From ae9cbfcb27b298380a7495033562b4f2e5bbb872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Thu, 30 Jan 2020 12:11:38 +0530 Subject: [PATCH 64/72] [Mappings editor] Bring improvements from #55804 PR to master (#56282) --- .../helpers/mappings_editor.helpers.ts | 2 +- .../mappings_editor.test.tsx | 4 +- .../load_mappings_provider.test.tsx | 77 +++++++++++++++++++ .../load_mappings/load_mappings_provider.tsx | 2 +- .../lib/extract_mappings_definition.ts | 9 +-- .../lib/mappings_validator.test.ts | 26 ++++++- .../mappings_editor/lib/mappings_validator.ts | 74 +++++++++++++----- 7 files changed, 159 insertions(+), 35 deletions(-) create mode 100644 x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx diff --git a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/helpers/mappings_editor.helpers.ts b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/helpers/mappings_editor.helpers.ts index b8b67a0f36bd2..dcee956130a29 100644 --- a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/helpers/mappings_editor.helpers.ts +++ b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/helpers/mappings_editor.helpers.ts @@ -13,4 +13,4 @@ export const setup = (props: any) => wrapComponent: false, }, defaultProps: props, - }); + })(); diff --git a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/mappings_editor.test.tsx b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/mappings_editor.test.tsx index 9e390e785c7d5..723c105d403b8 100644 --- a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/mappings_editor.test.tsx +++ b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/__jest__/client_integration/mappings_editor.test.tsx @@ -28,7 +28,7 @@ describe('', () => { }, }, }; - const testBed = await setup({ onUpdate: mockOnUpdate, defaultValue })(); + const testBed = await setup({ onUpdate: mockOnUpdate, defaultValue }); const { exists } = testBed; expect(exists('mappingsEditor')).toBe(true); @@ -44,7 +44,7 @@ describe('', () => { }, }, }; - const testBed = await setup({ onUpdate: mockOnUpdate, defaultValue })(); + const testBed = await setup({ onUpdate: mockOnUpdate, defaultValue }); const { exists } = testBed; expect(exists('mappingsEditor')).toBe(true); diff --git a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx new file mode 100644 index 0000000000000..a9433d3a7530f --- /dev/null +++ b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { act } from 'react-dom/test-utils'; + +jest.mock('@elastic/eui', () => ({ + ...jest.requireActual('@elastic/eui'), + // Mocking EuiCodeEditor, which uses React Ace under the hood + EuiCodeEditor: (props: any) => ( + { + props.onChange(syntheticEvent.jsonString); + }} + /> + ), +})); + +import { registerTestBed, nextTick, TestBed } from '../../../../../../../../../test_utils'; +import { LoadMappingsProvider } from './load_mappings_provider'; + +const ComponentToTest = ({ onJson }: { onJson: () => void }) => ( + + {openModal => ( + + )} + +); + +const setup = (props: any) => + registerTestBed(ComponentToTest, { + memoryRouter: { wrapComponent: false }, + defaultProps: props, + })(); + +const openModalWithJsonContent = ({ find, component }: TestBed) => async (json: any) => { + find('load-json-button').simulate('click'); + component.update(); + + // Set the mappings to load + // @ts-ignore + await act(async () => { + find('mockCodeEditor').simulate('change', { + jsonString: JSON.stringify(json), + }); + await nextTick(300); // There is a debounce in the JsonEditor that we need to wait for + }); +}; + +describe('', () => { + test('it should forward valid mapping definition', async () => { + const mappingsToLoad = { + properties: { + title: { + type: 'text', + }, + }, + }; + + const onJson = jest.fn(); + const testBed = await setup({ onJson }); + + // Open the modal and add the JSON + await openModalWithJsonContent(testBed)(mappingsToLoad); + + // Confirm + testBed.find('confirmModalConfirmButton').simulate('click'); + + const [jsonReturned] = onJson.mock.calls[0]; + expect(jsonReturned).toEqual({ ...mappingsToLoad, dynamic_templates: [] }); + }); +}); diff --git a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.tsx b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.tsx index a55bd96dce3d0..6bc360a1ec70e 100644 --- a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.tsx +++ b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/components/load_mappings/load_mappings_provider.tsx @@ -25,7 +25,7 @@ type OpenJsonModalFunc = () => void; interface Props { onJson(json: { [key: string]: any }): void; - children: (deleteProperty: OpenJsonModalFunc) => React.ReactNode; + children: (openModal: OpenJsonModalFunc) => React.ReactNode; } interface State { diff --git a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/extract_mappings_definition.ts b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/extract_mappings_definition.ts index eae3c5b15759c..817b0f4a4d3d0 100644 --- a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/extract_mappings_definition.ts +++ b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/extract_mappings_definition.ts @@ -6,15 +6,10 @@ import { isPlainObject } from 'lodash'; import { GenericObject } from '../types'; -import { - validateMappingsConfiguration, - mappingsConfigurationSchemaKeys, -} from './mappings_validator'; - -const ALLOWED_PARAMETERS = [...mappingsConfigurationSchemaKeys, 'dynamic_templates', 'properties']; +import { validateMappingsConfiguration, VALID_MAPPINGS_PARAMETERS } from './mappings_validator'; const isMappingDefinition = (obj: GenericObject): boolean => { - const areAllKeysValid = Object.keys(obj).every(key => ALLOWED_PARAMETERS.includes(key)); + const areAllKeysValid = Object.keys(obj).every(key => VALID_MAPPINGS_PARAMETERS.includes(key)); if (!areAllKeysValid) { return false; diff --git a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.test.ts b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.test.ts index f1e6efb06c649..d67c267dda6ae 100644 --- a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.test.ts +++ b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.test.ts @@ -18,6 +18,24 @@ describe('Mappings configuration validator', () => { }); }); + it('should detect valid mappings configuration', () => { + const mappings = { + _source: { + includes: [], + excludes: [], + enabled: true, + }, + _meta: {}, + _routing: { + required: false, + }, + dynamic: true, + }; + + const { errors } = validateMappings(mappings); + expect(errors).toBe(undefined); + }); + it('should strip out unknown configuration', () => { const mappings = { dynamic: true, @@ -30,6 +48,7 @@ describe('Mappings configuration validator', () => { excludes: ['abc'], }, properties: { title: { type: 'text' } }, + dynamic_templates: [], unknown: 123, }; @@ -37,7 +56,7 @@ describe('Mappings configuration validator', () => { const { unknown, ...expected } = mappings; expect(value).toEqual(expected); - expect(errors).toBe(undefined); + expect(errors).toEqual([{ code: 'ERR_CONFIG', configName: 'unknown' }]); }); it('should strip out invalid configuration and returns the errors for each of them', () => { @@ -47,9 +66,8 @@ describe('Mappings configuration validator', () => { dynamic_date_formats: false, // wrong format _source: { enabled: true, - includes: 'abc', + unknownProp: 'abc', // invalid excludes: ['abc'], - wrong: 123, // parameter not allowed }, properties: 'abc', }; @@ -59,10 +77,10 @@ describe('Mappings configuration validator', () => { expect(value).toEqual({ dynamic: true, properties: {}, + dynamic_templates: [], }); expect(errors).not.toBe(undefined); - expect(errors!.length).toBe(3); expect(errors!).toEqual([ { code: 'ERR_CONFIG', configName: '_source' }, { code: 'ERR_CONFIG', configName: 'dynamic_date_formats' }, diff --git a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.ts b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.ts index 6ccbfeb50dcf4..78d638e398593 100644 --- a/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.ts +++ b/x-pack/legacy/plugins/index_management/public/app/components/mappings_editor/lib/mappings_validator.ts @@ -196,23 +196,30 @@ export const validateProperties = (properties = {}): PropertiesValidatorResponse * Single source of truth to validate the *configuration* of the mappings. * Whenever a user loads a JSON object it will be validate against this Joi schema. */ -export const mappingsConfigurationSchema = t.partial({ - dynamic: t.union([t.literal(true), t.literal(false), t.literal('strict')]), - date_detection: t.boolean, - numeric_detection: t.boolean, - dynamic_date_formats: t.array(t.string), - _source: t.partial({ - enabled: t.boolean, - includes: t.array(t.string), - excludes: t.array(t.string), - }), - _meta: t.UnknownRecord, - _routing: t.partial({ - required: t.boolean, - }), -}); - -export const mappingsConfigurationSchemaKeys = Object.keys(mappingsConfigurationSchema.props); +export const mappingsConfigurationSchema = t.exact( + t.partial({ + dynamic: t.union([t.literal(true), t.literal(false), t.literal('strict')]), + date_detection: t.boolean, + numeric_detection: t.boolean, + dynamic_date_formats: t.array(t.string), + _source: t.exact( + t.partial({ + enabled: t.boolean, + includes: t.array(t.string), + excludes: t.array(t.string), + }) + ), + _meta: t.UnknownRecord, + _routing: t.interface({ + required: t.boolean, + }), + }) +); + +const mappingsConfigurationSchemaKeys = Object.keys(mappingsConfigurationSchema.type.props); +const sourceConfigurationSchemaKeys = Object.keys( + mappingsConfigurationSchema.type.props._source.type.props +); export const validateMappingsConfiguration = ( mappingsConfiguration: any @@ -222,8 +229,20 @@ export const validateMappingsConfiguration = ( let copyOfMappingsConfig = { ...mappingsConfiguration }; const result = mappingsConfigurationSchema.decode(mappingsConfiguration); + const isSchemaInvalid = isLeft(result); - if (isLeft(result)) { + const unknownConfigurationParameters = Object.keys(mappingsConfiguration).filter( + key => mappingsConfigurationSchemaKeys.includes(key) === false + ); + + const unknownSourceConfigurationParameters = + mappingsConfiguration._source !== undefined + ? Object.keys(mappingsConfiguration._source).filter( + key => sourceConfigurationSchemaKeys.includes(key) === false + ) + : []; + + if (isSchemaInvalid) { /** * To keep the logic simple we will strip out the parameters that contain errors */ @@ -235,6 +254,15 @@ export const validateMappingsConfiguration = ( }); } + if (unknownConfigurationParameters.length > 0) { + unknownConfigurationParameters.forEach(configName => configurationRemoved.add(configName)); + } + + if (unknownSourceConfigurationParameters.length > 0) { + configurationRemoved.add('_source'); + delete copyOfMappingsConfig._source; + } + copyOfMappingsConfig = pick(copyOfMappingsConfig, mappingsConfigurationSchemaKeys); const errors: MappingsValidationError[] = toArray(ordString)(configurationRemoved) @@ -252,7 +280,7 @@ export const validateMappings = (mappings: any = {}): MappingsValidatorResponse return { value: {} }; } - const { properties, dynamic_templates, ...mappingsConfiguration } = mappings; + const { properties, dynamic_templates: dynamicTemplates, ...mappingsConfiguration } = mappings; const { value: parsedConfiguration, errors: configurationErrors } = validateMappingsConfiguration( mappingsConfiguration @@ -265,8 +293,14 @@ export const validateMappings = (mappings: any = {}): MappingsValidatorResponse value: { ...parsedConfiguration, properties: parsedProperties, - dynamic_templates, + dynamic_templates: dynamicTemplates ?? [], }, errors: errors.length ? errors : undefined, }; }; + +export const VALID_MAPPINGS_PARAMETERS = [ + ...mappingsConfigurationSchemaKeys, + 'dynamic_templates', + 'properties', +]; From 326afbc304653123277c82ed82570f592aba39ac Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 30 Jan 2020 08:01:40 +0100 Subject: [PATCH 65/72] [Uptime] In Ping histogram use auto date histogram (#55605) * update ping histogram API * update test * fix tests * update test * unused code Co-authored-by: Elastic Machine --- .../uptime/common/domain_types/monitors.ts | 7 - .../uptime/common/graphql/introspection.json | 137 ------------- .../plugins/uptime/common/graphql/types.ts | 86 -------- .../plugins/uptime/common/types/index.ts | 7 + .../uptime/common/types/ping/histogram.ts | 32 +++ .../connected/charts/ping_histogram.tsx | 76 +++++++ .../public/components/connected/index.ts | 7 + .../__snapshots__/chart_wrapper.test.tsx.snap | 8 +- .../ping_histogram.test.tsx.snap | 48 +++++ .../snapshot_histogram.test.tsx.snap | 7 - ...ogram.test.tsx => ping_histogram.test.tsx} | 9 +- .../charts/chart_wrapper/chart_wrapper.tsx | 8 +- .../components/functional/charts/index.ts | 2 +- ...pshot_histogram.tsx => ping_histogram.tsx} | 47 ++--- .../public/components/functional/index.ts | 2 +- .../components/functional/monitor_charts.tsx | 8 +- .../components/functional/status_panel.tsx | 11 +- .../plugins/uptime/public/pages/overview.tsx | 1 - .../queries/snapshot_histogram_query.ts | 38 ---- .../uptime/public/state/actions/index.ts | 1 + .../uptime/public/state/actions/ping.ts | 12 ++ .../plugins/uptime/public/state/api/index.ts | 1 + .../uptime/public/state/api/monitor.ts | 6 +- .../plugins/uptime/public/state/api/ping.ts | 35 ++++ .../plugins/uptime/public/state/api/types.ts | 2 + .../uptime/public/state/effects/index.ts | 2 + .../uptime/public/state/effects/ping.ts | 17 ++ .../uptime/public/state/reducers/index.ts | 2 + .../uptime/public/state/reducers/ping.ts | 45 +++++ .../state/selectors/__tests__/index.test.ts | 5 + .../uptime/public/state/selectors/index.ts | 4 + .../server/graphql/monitors/resolvers.ts | 42 +--- .../server/graphql/monitors/schema.gql.ts | 26 --- .../elasticsearch_pings_adapter.test.ts.snap | 12 +- .../elasticsearch_pings_adapter.test.ts | 48 ++--- .../adapters/pings/es_get_ping_historgram.ts | 82 ++++++++ ...ticsearch_pings_adapter.ts => es_pings.ts} | 80 +------- .../uptime/server/lib/adapters/pings/index.ts | 4 +- .../pings/{adapter_types.ts => types.ts} | 15 +- .../server/lib/helper/assert_close_to.ts | 5 + .../plugins/uptime/server/lib/helper/index.ts | 1 - .../plugins/uptime/server/rest_api/index.ts | 2 + .../rest_api/pings/get_ping_histogram.ts | 44 ++++ .../graphql/fixtures/snapshot_histogram.json | 188 ------------------ .../snapshot_histogram_by_filter.json | 188 ------------------ .../fixtures/snapshot_histogram_by_id.json | 188 ------------------ .../apis/uptime/graphql/index.js | 1 - .../apis/uptime/graphql/snapshot_histogram.ts | 88 -------- .../uptime/rest/fixtures/ping_histogram.json | 24 +++ .../fixtures/ping_histogram_by_filter.json | 24 +++ .../rest/fixtures/ping_histogram_by_id.json | 24 +++ .../api_integration/apis/uptime/rest/index.ts | 1 + .../apis/uptime/rest/ping_histogram.ts | 64 ++++++ 53 files changed, 644 insertions(+), 1180 deletions(-) create mode 100644 x-pack/legacy/plugins/uptime/common/types/index.ts create mode 100644 x-pack/legacy/plugins/uptime/common/types/ping/histogram.ts create mode 100644 x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx create mode 100644 x-pack/legacy/plugins/uptime/public/components/connected/index.ts create mode 100644 x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/ping_histogram.test.tsx.snap delete mode 100644 x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/snapshot_histogram.test.tsx.snap rename x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/{snapshot_histogram.test.tsx => ping_histogram.test.tsx} (64%) rename x-pack/legacy/plugins/uptime/public/components/functional/charts/{snapshot_histogram.tsx => ping_histogram.tsx} (76%) delete mode 100644 x-pack/legacy/plugins/uptime/public/queries/snapshot_histogram_query.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/actions/ping.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/api/ping.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/effects/ping.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts create mode 100644 x-pack/legacy/plugins/uptime/server/lib/adapters/pings/es_get_ping_historgram.ts rename x-pack/legacy/plugins/uptime/server/lib/adapters/pings/{elasticsearch_pings_adapter.ts => es_pings.ts} (67%) rename x-pack/legacy/plugins/uptime/server/lib/adapters/pings/{adapter_types.ts => types.ts} (79%) create mode 100644 x-pack/legacy/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram.json delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_filter.json delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_id.json delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/snapshot_histogram.ts create mode 100644 x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram.json create mode 100644 x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_filter.json create mode 100644 x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_id.json create mode 100644 x-pack/test/api_integration/apis/uptime/rest/ping_histogram.ts diff --git a/x-pack/legacy/plugins/uptime/common/domain_types/monitors.ts b/x-pack/legacy/plugins/uptime/common/domain_types/monitors.ts index 296df279b8eec..7f5699eb7e8a4 100644 --- a/x-pack/legacy/plugins/uptime/common/domain_types/monitors.ts +++ b/x-pack/legacy/plugins/uptime/common/domain_types/monitors.ts @@ -4,14 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { HistogramDataPoint } from '../graphql/types'; - export interface UMGqlRange { dateRangeStart: string; dateRangeEnd: string; } - -export interface HistogramResult { - histogram: HistogramDataPoint[]; - interval: number; -} diff --git a/x-pack/legacy/plugins/uptime/common/graphql/introspection.json b/x-pack/legacy/plugins/uptime/common/graphql/introspection.json index 19d9cf19cc7f8..e5d9816ebd28e 100644 --- a/x-pack/legacy/plugins/uptime/common/graphql/introspection.json +++ b/x-pack/legacy/plugins/uptime/common/graphql/introspection.json @@ -166,65 +166,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "getSnapshotHistogram", - "description": "", - "args": [ - { - "name": "dateRangeStart", - "description": "", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } - }, - "defaultValue": null - }, - { - "name": "dateRangeEnd", - "description": "", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { "kind": "SCALAR", "name": "String", "ofType": null } - }, - "defaultValue": null - }, - { - "name": "filters", - "description": "", - "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "defaultValue": null - }, - { - "name": "statusFilter", - "description": "", - "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "defaultValue": null - }, - { - "name": "monitorId", - "description": "", - "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { "kind": "OBJECT", "name": "HistogramDataPoint", "ofType": null } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "getMonitorChartsData", "description": "", @@ -2172,57 +2113,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "OBJECT", - "name": "HistogramDataPoint", - "description": "", - "fields": [ - { - "name": "upCount", - "description": "", - "args": [], - "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "downCount", - "description": "", - "args": [], - "type": { "kind": "SCALAR", "name": "Int", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "x", - "description": "", - "args": [], - "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "x0", - "description": "", - "args": [], - "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "y", - "description": "", - "args": [], - "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, { "kind": "OBJECT", "name": "MonitorChart", @@ -3944,33 +3834,6 @@ ], "possibleTypes": null }, - { - "kind": "OBJECT", - "name": "DataPoint", - "description": "", - "fields": [ - { - "name": "x", - "description": "", - "args": [], - "type": { "kind": "SCALAR", "name": "UnsignedInteger", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "y", - "description": "", - "args": [], - "type": { "kind": "SCALAR", "name": "Float", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, { "kind": "OBJECT", "name": "MonitorDurationAreaPoint", diff --git a/x-pack/legacy/plugins/uptime/common/graphql/types.ts b/x-pack/legacy/plugins/uptime/common/graphql/types.ts index 92e27d20323a7..c58dd9111cc3f 100644 --- a/x-pack/legacy/plugins/uptime/common/graphql/types.ts +++ b/x-pack/legacy/plugins/uptime/common/graphql/types.ts @@ -24,8 +24,6 @@ export interface Query { getSnapshot?: Snapshot | null; - getSnapshotHistogram: HistogramDataPoint[]; - getMonitorChartsData?: MonitorChart | null; /** Fetch the most recent event data for a monitor ID, date range, location. */ getLatestMonitors: Ping[]; @@ -419,17 +417,7 @@ export interface SnapshotCount { total: number; } -export interface HistogramDataPoint { - upCount?: number | null; - - downCount?: number | null; - - x?: UnsignedInteger | null; - - x0?: UnsignedInteger | null; - y?: UnsignedInteger | null; -} /** The data used to populate the monitor charts. */ export interface MonitorChart { /** The average values for the monitor duration. */ @@ -616,47 +604,6 @@ export interface StatesIndexStatus { docCount?: DocCount | null; } -export interface DataPoint { - x?: UnsignedInteger | null; - - y?: number | null; -} -/** Represents a monitor's duration performance in microseconds at a point in time. */ -export interface MonitorDurationAreaPoint { - /** The timeseries value for this point in time. */ - x: UnsignedInteger; - /** The min duration value in microseconds at this time. */ - yMin?: number | null; - /** The max duration value in microseconds at this point. */ - yMax?: number | null; -} - -export interface MonitorSummaryUrl { - domain?: string | null; - - fragment?: string | null; - - full?: string | null; - - original?: string | null; - - password?: string | null; - - path?: string | null; - - port?: number | null; - - query?: string | null; - - scheme?: string | null; - - username?: string | null; -} - -// ==================================================== -// Arguments -// ==================================================== - export interface AllPingsQueryArgs { /** Optional: the direction to sort by. Accepts 'asc' and 'desc'. Defaults to 'desc'. */ sort?: string | null; @@ -673,35 +620,7 @@ export interface AllPingsQueryArgs { /** Optional: agent location to filter by. */ location?: string | null; } -export interface GetMonitorsQueryArgs { - dateRangeStart: string; - - dateRangeEnd: string; - - filters?: string | null; - - statusFilter?: string | null; -} -export interface GetSnapshotQueryArgs { - dateRangeStart: string; - - dateRangeEnd: string; - - filters?: string | null; - statusFilter?: string | null; -} -export interface GetSnapshotHistogramQueryArgs { - dateRangeStart: string; - - dateRangeEnd: string; - - filters?: string | null; - - statusFilter?: string | null; - - monitorId?: string | null; -} export interface GetMonitorChartsDataQueryArgs { monitorId: string; @@ -711,11 +630,6 @@ export interface GetMonitorChartsDataQueryArgs { location?: string | null; } -export interface GetFilterBarQueryArgs { - dateRangeStart: string; - - dateRangeEnd: string; -} export interface GetMonitorStatesQueryArgs { dateRangeStart: string; diff --git a/x-pack/legacy/plugins/uptime/common/types/index.ts b/x-pack/legacy/plugins/uptime/common/types/index.ts new file mode 100644 index 0000000000000..34bfbc540672f --- /dev/null +++ b/x-pack/legacy/plugins/uptime/common/types/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './ping/histogram'; diff --git a/x-pack/legacy/plugins/uptime/common/types/ping/histogram.ts b/x-pack/legacy/plugins/uptime/common/types/ping/histogram.ts new file mode 100644 index 0000000000000..7ac8d1f7b0151 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/common/types/ping/histogram.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export type UnsignedInteger = any; + +export interface HistogramDataPoint { + upCount?: number | null; + + downCount?: number | null; + + x?: UnsignedInteger | null; + + x0?: UnsignedInteger | null; + + y?: UnsignedInteger | null; +} + +export interface GetPingHistogramParams { + dateStart: string; + dateEnd: string; + filters?: string; + monitorId?: string; + statusFilter?: string; +} + +export interface HistogramResult { + histogram: HistogramDataPoint[]; + interval: string; +} diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx new file mode 100644 index 0000000000000..a6607ca81fc18 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useEffect } from 'react'; +import { connect } from 'react-redux'; +import { AppState } from '../../../state'; +import { + PingHistogramComponent, + PingHistogramComponentProps, +} from '../../functional/charts/ping_histogram'; +import { getPingHistogram } from '../../../state/actions'; +import { selectPingHistogram } from '../../../state/selectors'; +import { withResponsiveWrapper, ResponsiveWrapperProps } from '../../higher_order'; +import { GetPingHistogramParams, HistogramResult } from '../../../../common/types'; + +type Props = GetPingHistogramParams & + ResponsiveWrapperProps & + PingHistogramComponentProps & + DispatchProps & { lastRefresh: number }; + +const PingHistogramContainer: React.FC = ({ + data, + loadData, + statusFilter, + filters, + dateStart, + dateEnd, + absoluteStartDate, + absoluteEndDate, + monitorId, + lastRefresh, + ...props +}) => { + useEffect(() => { + loadData({ monitorId, dateStart, dateEnd, statusFilter, filters }); + }, [loadData, dateStart, dateEnd, monitorId, filters, statusFilter, lastRefresh]); + return ( + + ); +}; + +interface StateProps { + data: HistogramResult | null; + loading: boolean; + lastRefresh: number; +} + +interface DispatchProps { + loadData: typeof getPingHistogram; +} + +const mapStateToProps = (state: AppState): StateProps => ({ ...selectPingHistogram(state) }); + +const mapDispatchToProps = (dispatch: any): DispatchProps => ({ + loadData: (params: GetPingHistogramParams) => { + return dispatch(getPingHistogram(params)); + }, +}); + +export const PingHistogram = connect< + StateProps, + DispatchProps, + PingHistogramComponentProps, + AppState +>( + mapStateToProps, + mapDispatchToProps +)(withResponsiveWrapper(PingHistogramContainer)); diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/index.ts b/x-pack/legacy/plugins/uptime/public/components/connected/index.ts new file mode 100644 index 0000000000000..f9f6aa263ed27 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/connected/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { PingHistogram } from './charts/ping_histogram'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/chart_wrapper.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/chart_wrapper.test.tsx.snap index 3f3e6b0b929e1..c1b5970f6456c 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/chart_wrapper.test.tsx.snap +++ b/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/chart_wrapper.test.tsx.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ChartWrapper component renders the component with loading false 1`] = ` - +
-
+ `; exports[`ChartWrapper component renders the component with loading true 1`] = ` - +
- + `; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/ping_histogram.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/ping_histogram.test.tsx.snap new file mode 100644 index 0000000000000..8ee4dc3575469 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/ping_histogram.test.tsx.snap @@ -0,0 +1,48 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`PingHistogram component renders the component without errors 1`] = ` + + +
+ +
+
+ + + +

+ } + title={ + +
+ +
+
+ } + /> +
+
+`; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/snapshot_histogram.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/snapshot_histogram.test.tsx.snap deleted file mode 100644 index a725f97d3e0fb..0000000000000 --- a/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/__snapshots__/snapshot_histogram.test.tsx.snap +++ /dev/null @@ -1,7 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`SnapshotHistogram component renders the component without errors 1`] = ` - - - -`; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/snapshot_histogram.test.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/ping_histogram.test.tsx similarity index 64% rename from x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/snapshot_histogram.test.tsx rename to x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/ping_histogram.test.tsx index db78c063b7ed5..de7cfc86abc0c 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/snapshot_histogram.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/charts/__tests__/ping_histogram.test.tsx @@ -6,17 +6,16 @@ import React from 'react'; import { shallowWithIntl } from 'test_utils/enzyme_helpers'; -import { SnapshotHistogram, SnapshotHistogramProps } from '../snapshot_histogram'; +import { PingHistogramComponent, PingHistogramComponentProps } from '../ping_histogram'; -describe('SnapshotHistogram component', () => { - const props: SnapshotHistogramProps = { +describe('PingHistogram component', () => { + const props: PingHistogramComponentProps = { absoluteStartDate: 1548697920000, absoluteEndDate: 1548700920000, - isResponsive: false, }; it('renders the component without errors', () => { - const component = shallowWithIntl(); + const component = shallowWithIntl(); expect(component).toMatchSnapshot(); }); }); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/chart_wrapper/chart_wrapper.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/charts/chart_wrapper/chart_wrapper.tsx index deeb1411052c3..7286c59956887 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/charts/chart_wrapper/chart_wrapper.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/charts/chart_wrapper/chart_wrapper.tsx @@ -4,8 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { FC, Fragment, HTMLAttributes } from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiLoadingChart } from '@elastic/eui'; +import React, { FC, HTMLAttributes } from 'react'; +import { EuiErrorBoundary, EuiFlexGroup, EuiFlexItem, EuiLoadingChart } from '@elastic/eui'; interface Props { /** @@ -31,7 +31,7 @@ export const ChartWrapper: FC = ({ const opacity = loading === true ? 0.3 : 1; return ( - +
= ({ )} - + ); }; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/index.ts b/x-pack/legacy/plugins/uptime/public/components/functional/charts/index.ts index f7c1283dc9e07..2cbd9a2b3aa32 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/charts/index.ts +++ b/x-pack/legacy/plugins/uptime/public/components/functional/charts/index.ts @@ -7,4 +7,4 @@ export { DonutChart } from './donut_chart'; export { DurationChart } from './duration_chart'; export { MonitorBarSeries } from './monitor_bar_series'; -export { SnapshotHistogram } from './snapshot_histogram'; +export { PingHistogramComponent } from './ping_histogram'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/snapshot_histogram.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/charts/ping_histogram.tsx similarity index 76% rename from x-pack/legacy/plugins/uptime/public/components/functional/charts/snapshot_histogram.tsx rename to x-pack/legacy/plugins/uptime/public/components/functional/charts/ping_histogram.tsx index 92b04534b7331..2d44cff0108cd 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/charts/snapshot_histogram.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/charts/ping_histogram.tsx @@ -4,21 +4,18 @@ * you may not use this file except in compliance with the Elastic License. */ -import { Axis, BarSeries, Chart, Position, timeFormatter, Settings } from '@elastic/charts'; -import { EuiEmptyPrompt, EuiTitle, EuiPanel } from '@elastic/eui'; +import { Axis, BarSeries, Chart, Position, Settings, timeFormatter } from '@elastic/charts'; +import { EuiEmptyPrompt, EuiPanel, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useContext } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import moment from 'moment'; import { getChartDateLabel } from '../../../lib/helper'; -import { withUptimeGraphQL, UptimeGraphQLQueryProps } from '../../higher_order'; -import { snapshotHistogramQuery } from '../../../queries/snapshot_histogram_query'; import { ChartWrapper } from './chart_wrapper'; import { UptimeThemeContext } from '../../../contexts'; -import { ResponsiveWrapperProps, withResponsiveWrapper } from '../../higher_order'; -import { HistogramResult } from '../../../../common/domain_types'; +import { HistogramResult } from '../../../../common/types'; -interface HistogramProps { +export interface PingHistogramComponentProps { /** * The date/time for the start of the timespan. */ @@ -32,29 +29,23 @@ interface HistogramProps { * Height is needed, since by default charts takes height of 100% */ height?: string; -} -export type SnapshotHistogramProps = HistogramProps & ResponsiveWrapperProps; + data?: HistogramResult; -interface SnapshotHistogramQueryResult { - queryResult?: HistogramResult; + loading?: boolean; } -type Props = UptimeGraphQLQueryProps & - SnapshotHistogramProps & - ResponsiveWrapperProps; - -export const SnapshotHistogramComponent: React.FC = ({ +export const PingHistogramComponent: React.FC = ({ absoluteStartDate, absoluteEndDate, data, loading = false, height, -}: Props) => { +}) => { const { colors: { danger, gray }, } = useContext(UptimeThemeContext); - if (!data || !data.queryResult) + if (!data || !data.histogram) /** * TODO: the Fragment, EuiTitle, and EuiPanel should be extracted to a dumb component * that we can reuse in the subsequent return statement at the bottom of this function. @@ -93,19 +84,15 @@ export const SnapshotHistogramComponent: React.FC = ({ ); - const { - queryResult: { histogram, interval }, - } = data; + const { histogram } = data; - const downMonitorsId = i18n.translate('xpack.uptime.snapshotHistogram.downMonitorsId', { + const downSpecId = i18n.translate('xpack.uptime.snapshotHistogram.downMonitorsId', { defaultMessage: 'Down Monitors', }); - const downSpecId = downMonitorsId; const upMonitorsId = i18n.translate('xpack.uptime.snapshotHistogram.series.upLabel', { defaultMessage: 'Up', }); - const upSpecId = upMonitorsId; return ( <> @@ -131,7 +118,6 @@ export const SnapshotHistogramComponent: React.FC = ({ = ({ /> = ({ /> = ({ [x, upCount || 0])} - id={upSpecId} + id={upMonitorsId} name={upMonitorsId} stackAccessors={[0]} timeZone="local" @@ -187,8 +173,3 @@ export const SnapshotHistogramComponent: React.FC = ({ ); }; - -export const SnapshotHistogram = withUptimeGraphQL< - SnapshotHistogramQueryResult, - SnapshotHistogramProps ->(withResponsiveWrapper(SnapshotHistogramComponent), snapshotHistogramQuery); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/index.ts b/x-pack/legacy/plugins/uptime/public/components/functional/index.ts index 7370faa12f393..b9f0014322062 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/index.ts +++ b/x-pack/legacy/plugins/uptime/public/components/functional/index.ts @@ -15,5 +15,5 @@ export { MonitorList } from './monitor_list'; export { OverviewPageParsingErrorCallout } from './overview_page_parsing_error_callout'; export { PingList } from './ping_list'; export { Snapshot } from './snapshot'; -export { SnapshotHistogram } from './charts'; +export { PingHistogramComponent } from './charts'; export { StatusPanel } from './status_panel'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_charts.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_charts.tsx index 809618f07a6c1..ae99d08ab634e 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_charts.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_charts.tsx @@ -11,8 +11,8 @@ import { MonitorChart } from '../../../common/graphql/types'; import { UptimeGraphQLQueryProps, withUptimeGraphQL } from '../higher_order'; import { monitorChartsQuery } from '../../queries'; import { DurationChart } from './charts'; -import { SnapshotHistogram } from './charts/snapshot_histogram'; import { useUrlParams } from '../../hooks'; +import { PingHistogram } from '../connected'; interface MonitorChartsQueryResult { monitorChartsData?: MonitorChart; @@ -58,12 +58,14 @@ export const MonitorChartsComponent = ({ /> - diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/status_panel.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/status_panel.tsx index b74bc943dc3eb..03ab9fb5cf194 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/status_panel.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/status_panel.tsx @@ -6,8 +6,8 @@ import { EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui'; import React from 'react'; -import { SnapshotHistogram } from './charts'; import { Snapshot } from './snapshot'; +import { PingHistogram } from '../connected'; interface StatusPanelProps { absoluteDateRangeStart: number; @@ -16,7 +16,6 @@ interface StatusPanelProps { dateRangeEnd: string; filters?: string; statusFilter?: string; - sharedProps: { [key: string]: any }; } const STATUS_CHART_HEIGHT = '160px'; @@ -28,7 +27,6 @@ export const StatusPanel = ({ dateRangeEnd, filters, statusFilter, - sharedProps, }: StatusPanelProps) => ( @@ -42,12 +40,15 @@ export const StatusPanel = ({ /> - diff --git a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx index 36abee673b682..b9c2284edb0cf 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx @@ -135,7 +135,6 @@ export const OverviewPage = ({ autocomplete, setBreadcrumbs }: Props) => { dateRangeEnd={dateRangeEnd} filters={filters} statusFilter={statusFilter} - sharedProps={sharedProps} /> ('GET_PING_HISTOGRAM'); +export const getPingHistogramSuccess = createAction('GET_PING_HISTOGRAM_SUCCESS'); +export const getPingHistogramFail = createAction('GET_PING_HISTOGRAM_FAIL'); diff --git a/x-pack/legacy/plugins/uptime/public/state/api/index.ts b/x-pack/legacy/plugins/uptime/public/state/api/index.ts index 1d0cac5f87854..be79317dc97c2 100644 --- a/x-pack/legacy/plugins/uptime/public/state/api/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/api/index.ts @@ -8,3 +8,4 @@ export * from './monitor'; export * from './overview_filters'; export * from './snapshot'; export * from './monitor_status'; +export * from './ping'; diff --git a/x-pack/legacy/plugins/uptime/public/state/api/monitor.ts b/x-pack/legacy/plugins/uptime/public/state/api/monitor.ts index 8b1220830f091..80fd311c3ec7e 100644 --- a/x-pack/legacy/plugins/uptime/public/state/api/monitor.ts +++ b/x-pack/legacy/plugins/uptime/public/state/api/monitor.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ThrowReporter } from 'io-ts/lib/ThrowReporter'; +import { PathReporter } from 'io-ts/lib/PathReporter'; import { getApiPath } from '../../lib/helper'; import { BaseParams } from './types'; import { @@ -41,7 +41,7 @@ export const fetchMonitorDetails = async ({ throw new Error(response.statusText); } return response.json().then(data => { - ThrowReporter.report(MonitorDetailsType.decode(data)); + PathReporter.report(MonitorDetailsType.decode(data)); return data; }); }; @@ -68,7 +68,7 @@ export const fetchMonitorLocations = async ({ throw new Error(response.statusText); } return response.json().then(data => { - ThrowReporter.report(MonitorLocationsType.decode(data)); + PathReporter.report(MonitorLocationsType.decode(data)); return data; }); }; diff --git a/x-pack/legacy/plugins/uptime/public/state/api/ping.ts b/x-pack/legacy/plugins/uptime/public/state/api/ping.ts new file mode 100644 index 0000000000000..e0c358fe40e71 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/api/ping.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import qs from 'querystring'; +import { getApiPath } from '../../lib/helper'; +import { APIFn } from './types'; +import { GetPingHistogramParams, HistogramResult } from '../../../common/types'; + +export const fetchPingHistogram: APIFn = async ({ + basePath, + monitorId, + dateStart, + dateEnd, + statusFilter, + filters, +}) => { + const url = getApiPath(`/api/uptime/ping/histogram`, basePath); + const params = { + dateStart, + dateEnd, + ...(monitorId && { monitorId }), + ...(statusFilter && { statusFilter }), + ...(filters && { filters }), + }; + const urlParams = qs.stringify(params).toString(); + const response = await fetch(`${url}?${urlParams}`); + if (!response.ok) { + throw new Error(response.statusText); + } + const responseData = await response.json(); + return responseData; +}; diff --git a/x-pack/legacy/plugins/uptime/public/state/api/types.ts b/x-pack/legacy/plugins/uptime/public/state/api/types.ts index 278cfce29986f..c88e111d778d5 100644 --- a/x-pack/legacy/plugins/uptime/public/state/api/types.ts +++ b/x-pack/legacy/plugins/uptime/public/state/api/types.ts @@ -12,3 +12,5 @@ export interface BaseParams { statusFilter?: string; location?: string; } + +export type APIFn = (params: { basePath: string } & P) => Promise; diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts index 41dda145edb4e..21d4f7a66ad67 100644 --- a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts @@ -9,10 +9,12 @@ import { fetchMonitorDetailsEffect } from './monitor'; import { fetchOverviewFiltersEffect } from './overview_filters'; import { fetchSnapshotCountEffect } from './snapshot'; import { fetchMonitorStatusEffect } from './monitor_status'; +import { fetchPingHistogramEffect } from './ping'; export function* rootEffect() { yield fork(fetchMonitorDetailsEffect); yield fork(fetchSnapshotCountEffect); yield fork(fetchOverviewFiltersEffect); yield fork(fetchMonitorStatusEffect); + yield fork(fetchPingHistogramEffect); } diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/ping.ts b/x-pack/legacy/plugins/uptime/public/state/effects/ping.ts new file mode 100644 index 0000000000000..acb9b31915fa9 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/effects/ping.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { takeLatest } from 'redux-saga/effects'; +import { getPingHistogram, getPingHistogramSuccess, getPingHistogramFail } from '../actions'; +import { fetchPingHistogram } from '../api'; +import { fetchEffectFactory } from './fetch_effect'; + +export function* fetchPingHistogramEffect() { + yield takeLatest( + String(getPingHistogram), + fetchEffectFactory(fetchPingHistogram, getPingHistogramSuccess, getPingHistogramFail) + ); +} diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts index 5f915d970e543..c80ada4f63182 100644 --- a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts @@ -10,6 +10,7 @@ import { overviewFiltersReducer } from './overview_filters'; import { snapshotReducer } from './snapshot'; import { uiReducer } from './ui'; import { monitorStatusReducer } from './monitor_status'; +import { pingReducer } from './ping'; export const rootReducer = combineReducers({ monitor: monitorReducer, @@ -17,4 +18,5 @@ export const rootReducer = combineReducers({ snapshot: snapshotReducer, ui: uiReducer, monitorStatus: monitorStatusReducer, + ping: pingReducer, }); diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts new file mode 100644 index 0000000000000..76775e6a0a355 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { handleActions, Action } from 'redux-actions'; +import { getPingHistogram, getPingHistogramSuccess, getPingHistogramFail } from '../actions'; +import { HistogramResult } from '../../../common/types'; + +export interface PingState { + pingHistogram: HistogramResult | null; + errors: any[]; + loading: boolean; +} + +const initialState: PingState = { + pingHistogram: null, + loading: false, + errors: [], +}; + +type MonitorStatusPayload = HistogramResult & Error; + +export const pingReducer = handleActions( + { + [String(getPingHistogram)]: state => ({ + ...state, + loading: true, + }), + + [String(getPingHistogramSuccess)]: (state: PingState, action: Action) => ({ + ...state, + loading: false, + pingHistogram: { ...action.payload }, + }), + + [String(getPingHistogramFail)]: (state, action: Action) => ({ + ...state, + errors: [...state.errors, action.payload], + loading: false, + }), + }, + initialState +); diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts index 38fb3edea4768..5e3bf95d81292 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts @@ -45,6 +45,11 @@ describe('state selectors', () => { monitor: null, loading: false, }, + ping: { + pingHistogram: null, + loading: false, + errors: [], + }, }; it('selects base path from state', () => { diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts index 337e99f6ede16..0066241dcc217 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts @@ -28,3 +28,7 @@ export const selectSelectedMonitor = (state: AppState) => { export const selectMonitorStatus = (state: AppState) => { return state.monitorStatus.status; }; + +export const selectPingHistogram = ({ ping, ui }: AppState) => { + return { data: ping.pingHistogram, loading: ping.loading, lastRefresh: ui.lastRefresh }; +}; diff --git a/x-pack/legacy/plugins/uptime/server/graphql/monitors/resolvers.ts b/x-pack/legacy/plugins/uptime/server/graphql/monitors/resolvers.ts index 897d67dde807e..cc5744eac6ea1 100644 --- a/x-pack/legacy/plugins/uptime/server/graphql/monitors/resolvers.ts +++ b/x-pack/legacy/plugins/uptime/server/graphql/monitors/resolvers.ts @@ -4,19 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ -import { UMGqlRange } from '../../../common/domain_types'; import { UMResolver } from '../../../common/graphql/resolver_types'; -import { - GetFilterBarQueryArgs, - GetMonitorChartsDataQueryArgs, - MonitorChart, - GetSnapshotHistogramQueryArgs, -} from '../../../common/graphql/types'; +import { GetMonitorChartsDataQueryArgs, MonitorChart } from '../../../common/graphql/types'; import { UMServerLibs } from '../../lib/lib'; import { CreateUMGraphQLResolvers, UMContext } from '../types'; -import { HistogramResult } from '../../../common/domain_types'; - -export type UMMonitorsResolver = UMResolver, any, UMGqlRange, UMContext>; export type UMGetMonitorChartsResolver = UMResolver< any | Promise, @@ -25,49 +16,20 @@ export type UMGetMonitorChartsResolver = UMResolver< UMContext >; -export type UMGetFilterBarResolver = UMResolver< - any | Promise, - any, - GetFilterBarQueryArgs, - UMContext ->; - -export type UMGetSnapshotHistogram = UMResolver< - HistogramResult | Promise, - any, - GetSnapshotHistogramQueryArgs, - UMContext ->; - export const createMonitorsResolvers: CreateUMGraphQLResolvers = ( libs: UMServerLibs ): { Query: { - getSnapshotHistogram: UMGetSnapshotHistogram; getMonitorChartsData: UMGetMonitorChartsResolver; }; } => ({ Query: { - async getSnapshotHistogram( - _resolver, - { dateRangeStart, dateRangeEnd, filters, monitorId, statusFilter }, - { APICaller } - ): Promise { - return await libs.pings.getPingHistogram({ - callES: APICaller, - dateRangeStart, - dateRangeEnd, - filters, - monitorId, - statusFilter, - }); - }, async getMonitorChartsData( _resolver, { monitorId, dateRangeStart, dateRangeEnd, location }, { APICaller } ): Promise { - return await libs.monitors.getMonitorChartsData({ + return libs.monitors.getMonitorChartsData({ callES: APICaller, monitorId, dateRangeStart, diff --git a/x-pack/legacy/plugins/uptime/server/graphql/monitors/schema.gql.ts b/x-pack/legacy/plugins/uptime/server/graphql/monitors/schema.gql.ts index 8a86d97b4cd8e..6b8a896c4c60b 100644 --- a/x-pack/legacy/plugins/uptime/server/graphql/monitors/schema.gql.ts +++ b/x-pack/legacy/plugins/uptime/server/graphql/monitors/schema.gql.ts @@ -7,19 +7,6 @@ import gql from 'graphql-tag'; export const monitorsSchema = gql` - type HistogramDataPoint { - upCount: Int - downCount: Int - x: UnsignedInteger - x0: UnsignedInteger - y: UnsignedInteger - } - - type DataPoint { - x: UnsignedInteger - y: Float - } - "Represents a bucket of monitor status information." type StatusData { "The timeseries point for this status data." @@ -93,11 +80,6 @@ export const monitorsSchema = gql` monitors: [LatestMonitor!] } - type HistogramResult { - histogram: [HistogramDataPoint]! - interval: UnsignedInteger! - } - extend type Query { getMonitors( dateRangeStart: String! @@ -106,14 +88,6 @@ export const monitorsSchema = gql` statusFilter: String ): LatestMonitorsResult - getSnapshotHistogram( - dateRangeStart: String! - dateRangeEnd: String! - filters: String - statusFilter: String - monitorId: String - ): HistogramResult - getMonitorChartsData( monitorId: String! dateRangeStart: String! diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/__snapshots__/elasticsearch_pings_adapter.test.ts.snap b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/__snapshots__/elasticsearch_pings_adapter.test.ts.snap index b73595d539e93..1b31f44557df0 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/__snapshots__/elasticsearch_pings_adapter.test.ts.snap +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/__snapshots__/elasticsearch_pings_adapter.test.ts.snap @@ -22,7 +22,7 @@ Object { "y": 1, }, ], - "interval": 36000, + "interval": "1m", } `; @@ -48,7 +48,7 @@ Object { "y": 1, }, ], - "interval": 5609564928000, + "interval": "1h", } `; @@ -68,7 +68,7 @@ Object { "y": 1, }, ], - "interval": 5609564928000, + "interval": "1d", } `; @@ -88,7 +88,7 @@ Object { "y": 1, }, ], - "interval": 5609564928000, + "interval": "1s", } `; @@ -102,7 +102,7 @@ Object { "y": 1, }, ], - "interval": 36000, + "interval": "10s", } `; @@ -122,6 +122,6 @@ Object { "y": 1, }, ], - "interval": 36000, + "interval": "1m", } `; diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/elasticsearch_pings_adapter.test.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/elasticsearch_pings_adapter.test.ts index e1e39ac9b2637..866ab110928b4 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/elasticsearch_pings_adapter.test.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/__tests__/elasticsearch_pings_adapter.test.ts @@ -5,8 +5,7 @@ */ import { set } from 'lodash'; -import { elasticsearchPingsAdapter as adapter } from '../elasticsearch_pings_adapter'; -import { assertCloseTo } from '../../../helper'; +import { elasticsearchPingsAdapter as adapter } from '../es_pings'; describe('ElasticsearchPingsAdapter class', () => { let mockHits: any[]; @@ -35,6 +34,7 @@ describe('ElasticsearchPingsAdapter class', () => { }, }, ], + interval: '1s', }, }, }; @@ -98,12 +98,11 @@ describe('ElasticsearchPingsAdapter class', () => { }); const result = await adapter.getPingHistogram({ callES: mockEsClient, - dateRangeStart: 'now-15m', - dateRangeEnd: 'now', - filters: null, + dateStart: 'now-15m', + dateEnd: 'now', + filters: '', }); - assertCloseTo(result.interval, 36000, 100); - result.interval = 36000; + result.interval = '10s'; expect(mockEsClient).toHaveBeenCalledTimes(1); expect(result).toMatchSnapshot(); }); @@ -116,12 +115,11 @@ describe('ElasticsearchPingsAdapter class', () => { const result = await adapter.getPingHistogram({ callES: mockEsClient, - dateRangeStart: 'now-15m', - dateRangeEnd: 'now', - filters: null, + dateStart: 'now-15m', + dateEnd: 'now', + filters: '', }); - assertCloseTo(result.interval, 36000, 100); - result.interval = 36000; + result.interval = '1m'; expect(mockEsClient).toHaveBeenCalledTimes(1); expect(result).toMatchSnapshot(); @@ -175,14 +173,13 @@ describe('ElasticsearchPingsAdapter class', () => { }; const result = await adapter.getPingHistogram({ callES: mockEsClient, - dateRangeStart: '1234', - dateRangeEnd: '5678', + dateStart: '1234', + dateEnd: '5678', filters: JSON.stringify(searchFilter), monitorId: undefined, statusFilter: 'down', }); - assertCloseTo(result.interval, 5609564928000, 1000); - result.interval = 5609564928000; + result.interval = '1h'; expect(mockEsClient).toHaveBeenCalledTimes(1); expect(result).toMatchSnapshot(); @@ -229,13 +226,12 @@ describe('ElasticsearchPingsAdapter class', () => { const filters = `{"bool":{"must":[{"simple_query_string":{"query":"http"}}]}}`; const result = await adapter.getPingHistogram({ callES: mockEsClient, - dateRangeStart: 'now-15m', - dateRangeEnd: 'now', + dateStart: 'now-15m', + dateEnd: 'now', filters, }); - assertCloseTo(result.interval, 36000, 100); - result.interval = 36000; + result.interval = '1m'; expect(mockEsClient).toHaveBeenCalledTimes(1); expect(result).toMatchSnapshot(); }); @@ -246,14 +242,14 @@ describe('ElasticsearchPingsAdapter class', () => { mockEsClient.mockReturnValue(standardMockResponse); const result = await adapter.getPingHistogram({ callES: mockEsClient, - dateRangeStart: '1234', - dateRangeEnd: '5678', + dateStart: '1234', + dateEnd: '5678', filters: '', monitorId: undefined, statusFilter: 'down', }); - assertCloseTo(result.interval, 5609564928000, 1000); - result.interval = 5609564928000; + + result.interval = '1d'; expect(mockEsClient).toHaveBeenCalledTimes(1); expect(result).toMatchSnapshot(); @@ -267,8 +263,8 @@ describe('ElasticsearchPingsAdapter class', () => { const result = await adapter.getPingHistogram({ callES: mockEsClient, - dateRangeStart: '1234', - dateRangeEnd: '5678', + dateStart: '1234', + dateEnd: '5678', filters: '', monitorId: undefined, statusFilter: 'up', diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/es_get_ping_historgram.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/es_get_ping_historgram.ts new file mode 100644 index 0000000000000..66cae497eb081 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/es_get_ping_historgram.ts @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { get } from 'lodash'; +import { INDEX_NAMES, QUERY } from '../../../../common/constants'; +import { parseFilterQuery, getFilterClause } from '../../helper'; +import { UMElasticsearchQueryFn } from '../framework'; +import { GetPingHistogramParams, HistogramResult } from '../../../../common/types'; +import { HistogramQueryResult } from './types'; + +export const esGetPingHistogram: UMElasticsearchQueryFn< + GetPingHistogramParams, + HistogramResult +> = async ({ callES, dateStart, dateEnd, filters, monitorId, statusFilter }) => { + const boolFilters = parseFilterQuery(filters); + const additionalFilters = []; + if (monitorId) { + additionalFilters.push({ match: { 'monitor.id': monitorId } }); + } + if (boolFilters) { + additionalFilters.push(boolFilters); + } + const filter = getFilterClause(dateStart, dateEnd, additionalFilters); + + const params = { + index: INDEX_NAMES.HEARTBEAT, + body: { + query: { + bool: { + filter, + }, + }, + size: 0, + aggs: { + timeseries: { + auto_date_histogram: { + field: '@timestamp', + buckets: QUERY.DEFAULT_BUCKET_COUNT, + }, + aggs: { + down: { + filter: { + term: { + 'monitor.status': 'down', + }, + }, + }, + up: { + filter: { + term: { + 'monitor.status': 'up', + }, + }, + }, + }, + }, + }, + }, + }; + + const result = await callES('search', params); + const interval = result.aggregations.timeseries?.interval; + const buckets: HistogramQueryResult[] = get(result, 'aggregations.timeseries.buckets', []); + const histogram = buckets.map(bucket => { + const x: number = get(bucket, 'key'); + const downCount: number = get(bucket, 'down.doc_count'); + const upCount: number = get(bucket, 'up.doc_count'); + return { + x, + downCount: statusFilter && statusFilter !== 'down' ? 0 : downCount, + upCount: statusFilter && statusFilter !== 'up' ? 0 : upCount, + y: 1, + }; + }); + return { + histogram, + interval, + }; +}; diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/elasticsearch_pings_adapter.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/es_pings.ts similarity index 67% rename from x-pack/legacy/plugins/uptime/server/lib/adapters/pings/elasticsearch_pings_adapter.ts rename to x-pack/legacy/plugins/uptime/server/lib/adapters/pings/es_pings.ts index adabffcb1ea4a..93e3a1bd9397b 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/elasticsearch_pings_adapter.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/es_pings.ts @@ -7,9 +7,8 @@ import { get } from 'lodash'; import { INDEX_NAMES } from '../../../../common/constants'; import { HttpBody, Ping, PingResults } from '../../../../common/graphql/types'; -import { parseFilterQuery, getFilterClause, getHistogramIntervalFormatted } from '../../helper'; -import { UMPingsAdapter, HistogramQueryResult } from './adapter_types'; -import { getHistogramInterval } from '../../helper/get_histogram_interval'; +import { UMPingsAdapter } from './types'; +import { esGetPingHistogram } from './es_get_ping_historgram'; export const elasticsearchPingsAdapter: UMPingsAdapter = { getAll: async ({ @@ -174,80 +173,7 @@ export const elasticsearchPingsAdapter: UMPingsAdapter = { return result.hits.hits[0]?._source; }, - getPingHistogram: async ({ - callES, - dateRangeStart, - dateRangeEnd, - filters, - monitorId, - statusFilter, - }) => { - const boolFilters = parseFilterQuery(filters); - const additionalFilters = []; - if (monitorId) { - additionalFilters.push({ match: { 'monitor.id': monitorId } }); - } - if (boolFilters) { - additionalFilters.push(boolFilters); - } - const filter = getFilterClause(dateRangeStart, dateRangeEnd, additionalFilters); - const interval = getHistogramInterval(dateRangeStart, dateRangeEnd); - const intervalFormatted = getHistogramIntervalFormatted(dateRangeStart, dateRangeEnd); - - const params = { - index: INDEX_NAMES.HEARTBEAT, - body: { - query: { - bool: { - filter, - }, - }, - size: 0, - aggs: { - timeseries: { - date_histogram: { - field: '@timestamp', - fixed_interval: intervalFormatted, - }, - aggs: { - down: { - filter: { - term: { - 'monitor.status': 'down', - }, - }, - }, - up: { - filter: { - term: { - 'monitor.status': 'up', - }, - }, - }, - }, - }, - }, - }, - }; - - const result = await callES('search', params); - const buckets: HistogramQueryResult[] = get(result, 'aggregations.timeseries.buckets', []); - const histogram = buckets.map(bucket => { - const x: number = get(bucket, 'key'); - const downCount: number = get(bucket, 'down.doc_count'); - const upCount: number = get(bucket, 'up.doc_count'); - return { - x, - downCount: statusFilter && statusFilter !== 'down' ? 0 : downCount, - upCount: statusFilter && statusFilter !== 'up' ? 0 : upCount, - y: 1, - }; - }); - return { - histogram, - interval, - }; - }, + getPingHistogram: esGetPingHistogram, getDocCount: async ({ callES }) => { const { count } = await callES('count', { index: INDEX_NAMES.HEARTBEAT }); diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/index.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/index.ts index 6d93785e01527..37324a8f521f6 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/index.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/index.ts @@ -4,5 +4,5 @@ * you may not use this file except in compliance with the Elastic License. */ -export * from './adapter_types'; -export { elasticsearchPingsAdapter } from './elasticsearch_pings_adapter'; +export * from './types'; +export { elasticsearchPingsAdapter } from './es_pings'; diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/adapter_types.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/types.ts similarity index 79% rename from x-pack/legacy/plugins/uptime/server/lib/adapters/pings/adapter_types.ts rename to x-pack/legacy/plugins/uptime/server/lib/adapters/pings/types.ts index 8b2a49c0c9ffe..b1b1589af2ca7 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/adapter_types.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/pings/types.ts @@ -5,8 +5,8 @@ */ import { DocCount, Ping, PingResults } from '../../../../common/graphql/types'; -import { HistogramResult } from '../../../../common/domain_types'; import { UMElasticsearchQueryFn } from '../framework'; +import { GetPingHistogramParams, HistogramResult } from '../../../../common/types'; export interface GetAllParams { /** @member dateRangeStart timestamp bounds */ @@ -42,19 +42,6 @@ export interface GetLatestMonitorDocsParams { monitorId?: string | null; } -export interface GetPingHistogramParams { - /** @member dateRangeStart timestamp bounds */ - dateRangeStart: string; - /** @member dateRangeEnd timestamp bounds */ - dateRangeEnd: string; - /** @member filters user-defined filters */ - filters?: string | null; - /** @member monitorId optional limit to monitorId */ - monitorId?: string | null; - /** @member statusFilter special filter targeting the latest status of each monitor */ - statusFilter?: string | null; -} - /** * Count the number of documents in heartbeat indices */ diff --git a/x-pack/legacy/plugins/uptime/server/lib/helper/assert_close_to.ts b/x-pack/legacy/plugins/uptime/server/lib/helper/assert_close_to.ts index 13b6f3688809c..45b76ba25470b 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/helper/assert_close_to.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/helper/assert_close_to.ts @@ -8,4 +8,9 @@ export const assertCloseTo = (actual: number, expected: number, precision: numbe if (Math.abs(expected - actual) > precision) { throw new Error(`expected [${expected}] to be within ${precision} of ${actual}`); } + + // if actual is undefined above math condition will be NAN and it will be always false + if (actual === undefined) { + throw new Error(`expected close to [${expected}] but got [${actual}]`); + } }; diff --git a/x-pack/legacy/plugins/uptime/server/lib/helper/index.ts b/x-pack/legacy/plugins/uptime/server/lib/helper/index.ts index f9a8de81332d5..eae8023b66ff4 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/helper/index.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/helper/index.ts @@ -5,7 +5,6 @@ */ export { getFilterClause } from './get_filter_clause'; -export { getHistogramInterval } from './get_histogram_interval'; export { getHistogramIntervalFormatted } from './get_histogram_interval_formatted'; export { parseFilterQuery } from './parse_filter_query'; export { assertCloseTo } from './assert_close_to'; diff --git a/x-pack/legacy/plugins/uptime/server/rest_api/index.ts b/x-pack/legacy/plugins/uptime/server/rest_api/index.ts index e64b317e67f98..91936b499d8e6 100644 --- a/x-pack/legacy/plugins/uptime/server/rest_api/index.ts +++ b/x-pack/legacy/plugins/uptime/server/rest_api/index.ts @@ -16,6 +16,7 @@ import { createGetMonitorLocationsRoute, createGetStatusBarRoute, } from './monitors'; +import { createGetPingHistogramRoute } from './pings/get_ping_histogram'; export * from './types'; export { createRouteWithAuth } from './create_route_with_auth'; @@ -31,4 +32,5 @@ export const restApiRoutes: UMRestApiRouteFactory[] = [ createGetSnapshotCount, createLogMonitorPageRoute, createLogOverviewPageRoute, + createGetPingHistogramRoute, ]; diff --git a/x-pack/legacy/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts b/x-pack/legacy/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts new file mode 100644 index 0000000000000..c8eb2a1e40ad4 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { schema } from '@kbn/config-schema'; +import { UMServerLibs } from '../../lib/lib'; +import { UMRestApiRouteFactory } from '../types'; + +export const createGetPingHistogramRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ + method: 'GET', + path: '/api/uptime/ping/histogram', + validate: { + query: schema.object({ + dateStart: schema.string(), + dateEnd: schema.string(), + monitorId: schema.maybe(schema.string()), + statusFilter: schema.maybe(schema.string()), + filters: schema.maybe(schema.string()), + }), + }, + options: { + tags: ['access:uptime'], + }, + handler: async ({ callES }, _context, request, response): Promise => { + const { dateStart, dateEnd, statusFilter, monitorId, filters } = request.query; + + const result = await libs.pings.getPingHistogram({ + callES, + dateStart, + dateEnd, + monitorId, + statusFilter, + filters, + }); + + return response.ok({ + body: { + ...result, + }, + }); + }, +}); diff --git a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram.json b/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram.json deleted file mode 100644 index cf88ccae9cb99..0000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "queryResult": { - "histogram": [ - { - "upCount": 93, - "downCount": 7, - "x": 1568172657286, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172680087, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172702888, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172725689, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172748490, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172771291, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 8, - "x": 1568172794092, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172816893, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172839694, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172862495, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172885296, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172908097, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172930898, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172953699, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 8, - "x": 1568172976500, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172999301, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173022102, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173044903, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173067704, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568173090505, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173113306, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173136107, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 8, - "x": 1568173158908, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173181709, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568173204510, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173227311, - "x0": null, - "y": 1 - } - ] - } -} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_filter.json b/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_filter.json deleted file mode 100644 index 383d4acd96340..0000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_filter.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "queryResult": { - "histogram": [ - { - "upCount": 93, - "downCount": 0, - "x": 1568172657286, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172680087, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172702888, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172725689, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172748490, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172771291, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 0, - "x": 1568172794092, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172816893, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172839694, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172862495, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172885296, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172908097, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172930898, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568172953699, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 0, - "x": 1568172976500, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172999301, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568173022102, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568173044903, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568173067704, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568173090505, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568173113306, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568173136107, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 0, - "x": 1568173158908, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568173181709, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568173204510, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 0, - "x": 1568173227311, - "x0": null, - "y": 1 - } - ] - } -} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_id.json b/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_id.json deleted file mode 100644 index cf88ccae9cb99..0000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/snapshot_histogram_by_id.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "queryResult": { - "histogram": [ - { - "upCount": 93, - "downCount": 7, - "x": 1568172657286, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172680087, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172702888, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172725689, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172748490, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172771291, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 8, - "x": 1568172794092, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172816893, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172839694, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172862495, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172885296, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172908097, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172930898, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568172953699, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 8, - "x": 1568172976500, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568172999301, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173022102, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173044903, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173067704, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568173090505, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173113306, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173136107, - "x0": null, - "y": 1 - }, - { - "upCount": 92, - "downCount": 8, - "x": 1568173158908, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173181709, - "x0": null, - "y": 1 - }, - { - "upCount": 0, - "downCount": 0, - "x": 1568173204510, - "x0": null, - "y": 1 - }, - { - "upCount": 93, - "downCount": 7, - "x": 1568173227311, - "x0": null, - "y": 1 - } - ] - } -} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/uptime/graphql/index.js b/x-pack/test/api_integration/apis/uptime/graphql/index.js index 64999761fde4e..54284377ec430 100644 --- a/x-pack/test/api_integration/apis/uptime/graphql/index.js +++ b/x-pack/test/api_integration/apis/uptime/graphql/index.js @@ -14,6 +14,5 @@ export default function({ loadTestFile }) { loadTestFile(require.resolve('./monitor_charts')); loadTestFile(require.resolve('./monitor_states')); loadTestFile(require.resolve('./ping_list')); - loadTestFile(require.resolve('./snapshot_histogram')); }); } diff --git a/x-pack/test/api_integration/apis/uptime/graphql/snapshot_histogram.ts b/x-pack/test/api_integration/apis/uptime/graphql/snapshot_histogram.ts deleted file mode 100644 index 02fd3fd630d4b..0000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/snapshot_histogram.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { snapshotHistogramQueryString } from '../../../../../legacy/plugins/uptime/public/queries/snapshot_histogram_query'; -import { expectFixtureEql } from './helpers/expect_fixture_eql'; -import { FtrProviderContext } from '../../../ftr_provider_context'; -import { assertCloseTo } from '../../../../../legacy/plugins/uptime/server/lib/helper'; - -export default function({ getService }: FtrProviderContext) { - describe('snapshotHistogram', () => { - before('load heartbeat data', () => getService('esArchiver').load('uptime/full_heartbeat')); - after('unload heartbeat index', () => getService('esArchiver').unload('uptime/full_heartbeat')); - - const supertest = getService('supertest'); - - it('will fetch histogram data for all monitors', async () => { - const getSnapshotHistogramQuery = { - operationName: 'SnapshotHistogram', - query: snapshotHistogramQueryString, - variables: { - dateRangeStart: '2019-09-11T03:31:04.380Z', - dateRangeEnd: '2019-09-11T03:40:34.410Z', - }, - }; - - const { - body: { data }, - } = await supertest - .post('/api/uptime/graphql') - .set('kbn-xsrf', 'foo') - .send({ ...getSnapshotHistogramQuery }); - // manually testing this value and then removing it to avoid flakiness - const { interval } = data.queryResult; - assertCloseTo(interval, 22801, 100); - delete data.queryResult.interval; - expectFixtureEql(data, 'snapshot_histogram'); - }); - - it('will fetch histogram data for a given monitor id', async () => { - const getSnapshotHistogramQuery = { - operationName: 'SnapshotHistogram', - query: snapshotHistogramQueryString, - variables: { - dateRangeStart: '2019-09-11T03:31:04.380Z', - dateRangeEnd: '2019-09-11T03:40:34.410Z', - }, - }; - - const { - body: { data }, - } = await supertest - .post('/api/uptime/graphql') - .set('kbn-xsrf', 'foo') - .send({ ...getSnapshotHistogramQuery }); - const { interval } = data.queryResult; - assertCloseTo(interval, 22801, 100); - delete data.queryResult.interval; - expectFixtureEql(data, 'snapshot_histogram_by_id'); - }); - - it('will fetch histogram data for a given filter', async () => { - const getSnapshotHistogramQuery = { - operationName: 'SnapshotHistogram', - query: snapshotHistogramQueryString, - variables: { - dateRangeStart: '2019-09-11T03:31:04.380Z', - dateRangeEnd: '2019-09-11T03:40:34.410Z', - filters: - '{"bool":{"must":[{"match":{"monitor.status":{"query":"up","operator":"and"}}}]}}', - }, - }; - - const { - body: { data }, - } = await supertest - .post('/api/uptime/graphql') - .set('kbn-xsrf', 'foo') - .send({ ...getSnapshotHistogramQuery }); - const { interval } = data.queryResult; - assertCloseTo(interval, 22801, 100); - delete data.queryResult.interval; - expectFixtureEql(data, 'snapshot_histogram_by_filter'); - }); - }); -} diff --git a/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram.json b/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram.json new file mode 100644 index 0000000000000..972d1fd51760c --- /dev/null +++ b/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram.json @@ -0,0 +1,24 @@ +{ + "histogram": [ + { "x": 1568172664000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172694000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172724000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172754000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172784000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172814000, "downCount": 8, "upCount": 92, "y": 1 }, + { "x": 1568172844000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172874000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172904000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172934000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172964000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568172994000, "downCount": 8, "upCount": 92, "y": 1 }, + { "x": 1568173024000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568173054000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568173084000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568173114000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568173144000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568173174000, "downCount": 8, "upCount": 92, "y": 1 }, + { "x": 1568173204000, "downCount": 7, "upCount": 93, "y": 1 }, + { "x": 1568173234000, "downCount": 7, "upCount": 93, "y": 1 } + ] +} diff --git a/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_filter.json b/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_filter.json new file mode 100644 index 0000000000000..72b2d5276e025 --- /dev/null +++ b/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_filter.json @@ -0,0 +1,24 @@ +{ + "histogram": [ + { "x": 1568172664000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172694000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172724000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172754000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172784000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172814000, "downCount": 0, "upCount": 92, "y": 1 }, + { "x": 1568172844000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172874000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172904000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172934000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172964000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568172994000, "downCount": 0, "upCount": 92, "y": 1 }, + { "x": 1568173024000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568173054000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568173084000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568173114000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568173144000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568173174000, "downCount": 0, "upCount": 92, "y": 1 }, + { "x": 1568173204000, "downCount": 0, "upCount": 93, "y": 1 }, + { "x": 1568173234000, "downCount": 0, "upCount": 93, "y": 1 } + ] +} diff --git a/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_id.json b/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_id.json new file mode 100644 index 0000000000000..8e184b247ab52 --- /dev/null +++ b/x-pack/test/api_integration/apis/uptime/rest/fixtures/ping_histogram_by_id.json @@ -0,0 +1,24 @@ +{ + "histogram": [ + { "x": 1568172664000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172694000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172724000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172754000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172784000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172814000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172844000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172874000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172904000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172934000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172964000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568172994000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173024000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173054000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173084000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173114000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173144000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173174000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173204000, "downCount": 0, "upCount": 1, "y": 1 }, + { "x": 1568173234000, "downCount": 0, "upCount": 1, "y": 1 } + ] +} diff --git a/x-pack/test/api_integration/apis/uptime/rest/index.ts b/x-pack/test/api_integration/apis/uptime/rest/index.ts index a86411f7c49ec..30c301c5ecb17 100644 --- a/x-pack/test/api_integration/apis/uptime/rest/index.ts +++ b/x-pack/test/api_integration/apis/uptime/rest/index.ts @@ -19,6 +19,7 @@ export default function({ getService, loadTestFile }: FtrProviderContext) { after('unload', () => esArchiver.unload('uptime/full_heartbeat')); loadTestFile(require.resolve('./monitor_latest_status')); loadTestFile(require.resolve('./selected_monitor')); + loadTestFile(require.resolve('./ping_histogram')); }); }); } diff --git a/x-pack/test/api_integration/apis/uptime/rest/ping_histogram.ts b/x-pack/test/api_integration/apis/uptime/rest/ping_histogram.ts new file mode 100644 index 0000000000000..429f50ec0aa5b --- /dev/null +++ b/x-pack/test/api_integration/apis/uptime/rest/ping_histogram.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { expectFixtureEql } from '../graphql/helpers/expect_fixture_eql'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { assertCloseTo } from '../../../../../legacy/plugins/uptime/server/lib/helper'; + +export default function({ getService }: FtrProviderContext) { + describe('pingHistogram', () => { + const supertest = getService('supertest'); + + it('will fetch histogram data for all monitors', async () => { + const dateStart = '2019-09-11T03:31:04.380Z'; + const dateEnd = '2019-09-11T03:40:34.410Z'; + + const apiResponse = await supertest.get( + `/api/uptime/ping/histogram?dateStart=${dateStart}&dateEnd=${dateEnd}` + ); + const data = apiResponse.body; + + // manually testing this value and then removing it to avoid flakiness + const { interval } = data; + assertCloseTo(interval, 22801, 100); + delete data.interval; + expectFixtureEql(data, 'ping_histogram'); + }); + + it('will fetch histogram data for a given monitor id', async () => { + const dateStart = '2019-09-11T03:31:04.380Z'; + const dateEnd = '2019-09-11T03:40:34.410Z'; + const monitorId = '0002-up'; + + const apiResponse = await supertest.get( + `/api/uptime/ping/histogram?monitorId=${monitorId}&dateStart=${dateStart}&dateEnd=${dateEnd}` + ); + const data = apiResponse.body; + + const { interval } = data; + assertCloseTo(interval, 22801, 100); + delete data.interval; + expectFixtureEql(data, 'ping_histogram_by_id'); + }); + + it('will fetch histogram data for a given filter', async () => { + const dateStart = '2019-09-11T03:31:04.380Z'; + const dateEnd = '2019-09-11T03:40:34.410Z'; + const filters = + '{"bool":{"must":[{"match":{"monitor.status":{"query":"up","operator":"and"}}}]}}'; + + const apiResponse = await supertest.get( + `/api/uptime/ping/histogram?dateStart=${dateStart}&dateEnd=${dateEnd}&filters=${filters}` + ); + const data = apiResponse.body; + + const { interval } = data; + assertCloseTo(interval, 22801, 100); + delete data.interval; + expectFixtureEql(data, 'ping_histogram_by_filter'); + }); + }); +} From 0d03ade9eafc5862bdc6da0a800862a2d7ad9656 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Thu, 30 Jan 2020 09:25:47 +0100 Subject: [PATCH 66/72] NP Migration: Rollup plugin (#53503) * Start shimming rollup plugin * continued shimming rollup ui * Remove unnecessarily return * Register management section * Replace ui/chrome * Replace ui/documentation_links * Replace ui/kfetch and ui/courier * Start shimming rollup plugin * continued shimming rollup ui * Remove unnecessarily return * Register management section * Replace ui/chrome * Replace ui/documentation_links * Replace ui/kfetch and ui/courier * Replace ui/notify * Move ui/ imports to legacy_imports.ts * Update NP mock for management * Refactoring * Read body from error object * Update setup_environment.js * Update unit tests * Get rid of injectI18n * Replace npStart and npSetup usage to services * Import search strategy stuff from the top level of the data plugin * Update unit tests * Do not prepend the url * Fix merge conflicts * Refactoring * Revert removal of setUserHasLeftApp * Export getSearchErrorType * Remove extra wrapper - Router * Fix cause prop. * Leave just static imports in legacy_imports.js * Add TS * Pass statusCode instead of statusText * Move template in a separate file * Move app register to setup * Add karma mock for management setup * Add EditorConfigProviderRegistry export Co-authored-by: Maryia Lapata Co-authored-by: Elastic Machine --- .../ui/public/agg_types/filter/index.ts | 2 +- .../agg_types/param_types/filter/index.ts | 2 +- .../new_platform/new_platform.karma_mock.js | 12 ++ .../ui/public/new_platform/new_platform.ts | 3 +- src/legacy/ui/public/vis/config/index.ts | 2 +- src/plugins/data/public/search/index.ts | 2 + .../helpers/http_requests.js | 70 ---------- .../client_integration/helpers/index.js | 4 +- .../helpers/job_clone.helpers.js | 4 +- .../helpers/job_create.helpers.js | 4 +- .../helpers/job_list.helpers.js | 4 +- .../helpers/setup_context.tsx | 23 ++++ .../helpers/setup_environment.js | 23 ---- .../helpers/setup_environment.ts | 44 ++++++ .../job_create_clone.test.js | 17 ++- .../job_create_date_histogram.test.js | 26 ++-- .../job_create_histogram.test.js | 29 ++-- .../job_create_logistics.test.js | 29 ++-- .../job_create_metrics.test.js | 28 ++-- .../job_create_review.test.js | 54 ++++---- .../job_create_terms.test.js | 41 ++++-- .../client_integration/job_list.test.js | 20 +-- .../client_integration/job_list_clone.test.js | 23 ++-- .../rollup/common/{index.js => index.ts} | 0 .../common/{ui_metric.js => ui_metric.ts} | 0 x-pack/legacy/plugins/rollup/index.js | 12 +- .../plugins/rollup/public/application.tsx | 47 +++++++ .../rollup/public/crud_app/_crud_app.scss | 4 - .../plugins/rollup/public/crud_app/index.js | 98 -------------- .../plugins/rollup/public/crud_app/main.html | 3 - .../confirm_delete_modal.js | 57 ++++---- .../sections/job_create/job_create.js | 24 ++-- .../job_create/navigation/navigation.js | 8 +- .../job_create/steps/step_date_histogram.js | 12 +- .../job_create/steps/step_histogram.js | 10 +- .../job_create/steps/step_logistics.js | 14 +- .../sections/job_create/steps/step_metrics.js | 14 +- .../sections/job_create/steps/step_review.js | 6 +- .../sections/job_create/steps/step_terms.js | 10 +- .../steps_config/validate_rollup_index.js | 2 +- .../job_list/detail_panel/detail_panel.js | 12 +- .../detail_panel/detail_panel.test.js | 4 +- .../crud_app/sections/job_list/job_list.js | 23 ++-- .../sections/job_list/job_list.test.js | 35 ++--- .../sections/job_list/job_table/job_table.js | 11 +- .../rollup/public/crud_app/services/api.js | 23 ++-- .../services/{api_errors.js => api_errors.ts} | 22 +-- .../crud_app/services/documentation_links.js | 25 ++-- .../{http_provider.js => http_provider.ts} | 11 +- .../rollup/public/crud_app/services/index.js | 15 +- .../crud_app/store/actions/create_job.js | 20 +-- .../crud_app/store/actions/delete_jobs.js | 7 +- .../{index.js => index.ts} | 12 +- .../public/index_pattern_creation/index.js | 17 --- .../public/index_pattern_creation/register.js | 12 -- .../rollup_index_pattern_creation_config.js | 8 +- .../rollup/public/index_pattern_list/index.js | 16 --- .../public/index_pattern_list/register.js | 12 -- .../plugins/rollup/public/kibana_services.ts | 30 ++++ x-pack/legacy/plugins/rollup/public/legacy.ts | 30 ++++ .../plugins/rollup/public/legacy_imports.ts | 12 ++ x-pack/legacy/plugins/rollup/public/plugin.ts | 128 ++++++++++++++++++ .../plugins/rollup/public/search/index.js | 17 --- .../plugins/rollup/public/search/register.js | 12 -- ..._strategy.js => rollup_search_strategy.ts} | 36 +++-- .../plugins/rollup/public/services/api.js | 14 -- .../public/visualize/agg_type_field_filter.js | 4 +- .../public/visualize/agg_type_filter.js | 4 +- .../rollup/public/visualize/editor_config.js | 3 +- .../plugins/rollup/public/visualize/index.js | 21 --- 70 files changed, 716 insertions(+), 667 deletions(-) delete mode 100644 x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/http_requests.js create mode 100644 x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_context.tsx delete mode 100644 x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.js create mode 100644 x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.ts rename x-pack/legacy/plugins/rollup/common/{index.js => index.ts} (100%) rename x-pack/legacy/plugins/rollup/common/{ui_metric.js => ui_metric.ts} (100%) create mode 100644 x-pack/legacy/plugins/rollup/public/application.tsx delete mode 100644 x-pack/legacy/plugins/rollup/public/crud_app/index.js delete mode 100644 x-pack/legacy/plugins/rollup/public/crud_app/main.html rename x-pack/legacy/plugins/rollup/public/crud_app/services/{api_errors.js => api_errors.ts} (54%) rename x-pack/legacy/plugins/rollup/public/crud_app/services/{http_provider.js => http_provider.ts} (61%) rename x-pack/legacy/plugins/rollup/public/extend_index_management/{index.js => index.ts} (76%) delete mode 100644 x-pack/legacy/plugins/rollup/public/index_pattern_creation/index.js delete mode 100644 x-pack/legacy/plugins/rollup/public/index_pattern_creation/register.js delete mode 100644 x-pack/legacy/plugins/rollup/public/index_pattern_list/index.js delete mode 100644 x-pack/legacy/plugins/rollup/public/index_pattern_list/register.js create mode 100644 x-pack/legacy/plugins/rollup/public/kibana_services.ts create mode 100644 x-pack/legacy/plugins/rollup/public/legacy.ts create mode 100644 x-pack/legacy/plugins/rollup/public/legacy_imports.ts create mode 100644 x-pack/legacy/plugins/rollup/public/plugin.ts delete mode 100644 x-pack/legacy/plugins/rollup/public/search/index.js delete mode 100644 x-pack/legacy/plugins/rollup/public/search/register.js rename x-pack/legacy/plugins/rollup/public/search/{rollup_search_strategy.js => rollup_search_strategy.ts} (74%) delete mode 100644 x-pack/legacy/plugins/rollup/public/services/api.js delete mode 100644 x-pack/legacy/plugins/rollup/public/visualize/index.js diff --git a/src/legacy/ui/public/agg_types/filter/index.ts b/src/legacy/ui/public/agg_types/filter/index.ts index 3fc577e7e9a23..35d06807d0ec2 100644 --- a/src/legacy/ui/public/agg_types/filter/index.ts +++ b/src/legacy/ui/public/agg_types/filter/index.ts @@ -17,5 +17,5 @@ * under the License. */ -export { aggTypeFilters } from './agg_type_filters'; +export { aggTypeFilters, AggTypeFilters } from './agg_type_filters'; export { propFilter } from './prop_filter'; diff --git a/src/legacy/ui/public/agg_types/param_types/filter/index.ts b/src/legacy/ui/public/agg_types/param_types/filter/index.ts index ce5c7c4f9fea5..2e0039c96a192 100644 --- a/src/legacy/ui/public/agg_types/param_types/filter/index.ts +++ b/src/legacy/ui/public/agg_types/param_types/filter/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export { aggTypeFieldFilters } from './field_filters'; +export { aggTypeFieldFilters, AggTypeFieldFilters } from './field_filters'; diff --git a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js index 31dd00c37069f..f98b8801d5266 100644 --- a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js +++ b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js @@ -147,6 +147,13 @@ export const npSetup = { useChartsTheme: sinon.fake(), }, }, + management: { + sections: { + getSection: () => ({ + registerApp: sinon.fake(), + }), + }, + }, }, }; @@ -167,6 +174,11 @@ export const npStart = { hasItem: sinon.fake(), }), }, + sections: { + getSection: () => ({ + registerApp: sinon.fake(), + }), + }, }, embeddable: { getEmbeddableFactory: sinon.fake(), diff --git a/src/legacy/ui/public/new_platform/new_platform.ts b/src/legacy/ui/public/new_platform/new_platform.ts index cb98e72591b03..2ade98ec54efd 100644 --- a/src/legacy/ui/public/new_platform/new_platform.ts +++ b/src/legacy/ui/public/new_platform/new_platform.ts @@ -32,7 +32,7 @@ import { DevToolsSetup, DevToolsStart } from '../../../../plugins/dev_tools/publ import { KibanaLegacySetup, KibanaLegacyStart } from '../../../../plugins/kibana_legacy/public'; import { HomePublicPluginSetup, HomePublicPluginStart } from '../../../../plugins/home/public'; import { SharePluginSetup, SharePluginStart } from '../../../../plugins/share/public'; -import { ManagementStart } from '../../../../plugins/management/public'; +import { ManagementSetup, ManagementStart } from '../../../../plugins/management/public'; import { BfetchPublicSetup, BfetchPublicStart } from '../../../../plugins/bfetch/public'; import { UsageCollectionSetup } from '../../../../plugins/usage_collection/public'; import { @@ -54,6 +54,7 @@ export interface PluginsSetup { kibana_legacy: KibanaLegacySetup; share: SharePluginSetup; usageCollection: UsageCollectionSetup; + management: ManagementSetup; } export interface PluginsStart { diff --git a/src/legacy/ui/public/vis/config/index.ts b/src/legacy/ui/public/vis/config/index.ts index 5e87ac17b98fb..ee7385518a85d 100644 --- a/src/legacy/ui/public/vis/config/index.ts +++ b/src/legacy/ui/public/vis/config/index.ts @@ -17,5 +17,5 @@ * under the License. */ -export { editorConfigProviders } from './editor_config_providers'; +export { editorConfigProviders, EditorConfigProviderRegistry } from './editor_config_providers'; export * from './types'; diff --git a/src/plugins/data/public/search/index.ts b/src/plugins/data/public/search/index.ts index cf7e0268d745a..9d6e5072d657f 100644 --- a/src/plugins/data/public/search/index.ts +++ b/src/plugins/data/public/search/index.ts @@ -47,6 +47,8 @@ export { hasSearchStategyForIndexPattern, defaultSearchStrategy, SearchError, + SearchStrategyProvider, + getSearchErrorType, } from './search_strategy'; export { diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/http_requests.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/http_requests.js deleted file mode 100644 index 4552e62c371a1..0000000000000 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/http_requests.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import sinon from 'sinon'; - -// Register helpers to mock HTTP Requests -const registerHttpRequestMockHelpers = server => { - const setIndexPatternValidityResponse = response => { - const defaultResponse = { - doesMatchIndices: true, - doesMatchRollupIndices: false, - dateFields: ['foo', 'bar'], - numericFields: [], - keywordFields: [], - }; - server.respondWith(/\/api\/rollup\/index_pattern_validity\/.*/, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({ ...defaultResponse, ...response }), - ]); - }; - - const setCreateJobResponse = (responsePayload = {}) => { - server.respondWith(/\/api\/rollup\/create/, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(responsePayload), - ]); - }; - - const setStartJobResponse = () => { - server.respondWith(/\/api\/rollup\/start/, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({}), - ]); - }; - - const setLoadJobsResponse = response => { - server.respondWith('GET', '/api/rollup/jobs', [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(response), - ]); - }; - - return { - setIndexPatternValidityResponse, - setCreateJobResponse, - setLoadJobsResponse, - setStartJobResponse, - }; -}; - -export const init = () => { - const server = sinon.fakeServer.create(); - server.respondImmediately = true; - - // We make requests to APIs which don't impact the UX, e.g. UI metric telemetry, - // and we can mock them all with a 200 instead of mocking each one individually. - server.respondWith([200, {}, '']); - - return { - server, - httpRequestsMockHelpers: registerHttpRequestMockHelpers(server), - }; -}; diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/index.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/index.js index 9573e2f405b84..4a5b67e687d85 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/index.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/index.js @@ -10,7 +10,9 @@ import { setup as jobCloneSetup } from './job_clone.helpers'; export { nextTick, getRandomString, findTestSubject } from '../../../../../../test_utils'; -export { setupEnvironment } from './setup_environment'; +export { mockHttpRequest } from './setup_environment'; + +export { wrapComponent } from './setup_context'; export const pageHelpers = { jobCreate: { setup: jobCreateSetup }, diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_clone.helpers.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_clone.helpers.js index db0bb49289b60..a8376bb31b23f 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_clone.helpers.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_clone.helpers.js @@ -10,8 +10,10 @@ import { JobCreate } from '../../../public/crud_app/sections'; import { JOB_TO_CLONE } from './constants'; import { deserializeJob } from '../../../public/crud_app/services'; +import { wrapComponent } from './setup_context'; + export const setup = props => { - const initTestBed = registerTestBed(JobCreate, { + const initTestBed = registerTestBed(wrapComponent(JobCreate), { store: createRollupJobsStore({ cloneJob: { job: deserializeJob(JOB_TO_CLONE.jobs[0]) }, }), diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_create.helpers.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_create.helpers.js index 5de5d02dadd83..2395fd014dd1e 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_create.helpers.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_create.helpers.js @@ -10,7 +10,9 @@ import { JobCreate } from '../../../public/crud_app/sections'; import { JOB_TO_CREATE } from './constants'; -const initTestBed = registerTestBed(JobCreate, { store: rollupJobsStore }); +import { wrapComponent } from './setup_context'; + +const initTestBed = registerTestBed(wrapComponent(JobCreate), { store: rollupJobsStore }); export const setup = props => { const testBed = initTestBed(props); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_list.helpers.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_list.helpers.js index 10fa79f775fdc..bcad8c29c87c0 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_list.helpers.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/job_list.helpers.js @@ -9,6 +9,8 @@ import { registerRouter } from '../../../public/crud_app/services'; import { createRollupJobsStore } from '../../../public/crud_app/store'; import { JobList } from '../../../public/crud_app/sections/job_list'; +import { wrapComponent } from './setup_context'; + const testBedConfig = { store: createRollupJobsStore, memoryRouter: { @@ -19,4 +21,4 @@ const testBedConfig = { }, }; -export const setup = registerTestBed(JobList, testBedConfig); +export const setup = registerTestBed(wrapComponent(JobList), testBedConfig); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_context.tsx b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_context.tsx new file mode 100644 index 0000000000000..4c5a8e17c586a --- /dev/null +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_context.tsx @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent } from 'react'; + +import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public'; +import { coreMock } from '../../../../../../../src/core/public/mocks'; +const startMock = coreMock.createStart(); + +const services = { + setBreadcrumbs: startMock.chrome.setBreadcrumbs, +}; + +const wrapComponent = (Component: FunctionComponent) => (props: any) => ( + + + +); + +export { wrapComponent }; diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.js deleted file mode 100644 index 71e7f050786b5..0000000000000 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.js +++ /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; - * you may not use this file except in compliance with the Elastic License. - */ - -import axios from 'axios'; -import axiosXhrAdapter from 'axios/lib/adapters/xhr'; - -import { setHttp } from '../../../public/crud_app/services'; -import { init as initHttpRequests } from './http_requests'; - -export const setupEnvironment = () => { - // axios has a $http like interface so using it to simulate $http - setHttp(axios.create({ adapter: axiosXhrAdapter })); - - const { server, httpRequestsMockHelpers } = initHttpRequests(); - - return { - server, - httpRequestsMockHelpers, - }; -}; diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.ts b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.ts new file mode 100644 index 0000000000000..a8db058908ad4 --- /dev/null +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/helpers/setup_environment.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +interface RequestMocks { + jobs?: object; + createdJob?: object; + indxPatternVldtResp?: object; + [key: string]: any; +} + +const mockHttpRequest = ( + http: any, + { jobs = {}, createdJob = {}, indxPatternVldtResp = {} }: RequestMocks = {} +) => { + http.get.mockImplementation(async (url: string) => { + if (url === '/api/rollup/jobs') { + return jobs; + } + + if (url.startsWith('/api/rollup/index_pattern_validity')) { + return { + doesMatchIndices: true, + doesMatchRollupIndices: false, + dateFields: ['foo', 'bar'], + numericFields: [], + keywordFields: [], + ...indxPatternVldtResp, + }; + } + + return {}; + }); + + // mock '/api/rollup/start' + http.post.mockImplementation(async (url: string) => ({})); + + // mock '/api/rollup/create + http.put.mockImplementation(async (url: string) => createdJob); +}; + +export { mockHttpRequest }; diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_clone.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_clone.test.js index 4ffffd7574bd8..b7c98ed179c7a 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_clone.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_clone.test.js @@ -4,7 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import { setupEnvironment, pageHelpers, nextTick } from './helpers'; +import { setHttp } from '../../public/crud_app/services'; +import { mockHttpRequest, pageHelpers, nextTick } from './helpers'; import { JOB_TO_CLONE, JOB_CLONE_INDEX_PATTERN_CHECK } from './helpers/constants'; jest.mock('ui/new_platform'); @@ -17,26 +18,28 @@ const { } = JOB_TO_CLONE; describe('Cloning a rollup job through create job wizard', () => { - let httpRequestsMockHelpers; - let server; let find; let exists; let form; let table; let actions; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(() => { - httpRequestsMockHelpers.setIndexPatternValidityResponse(JOB_CLONE_INDEX_PATTERN_CHECK); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: JOB_CLONE_INDEX_PATTERN_CHECK }); ({ exists, find, form, actions, table } = setup()); }); - afterAll(() => { - server.restore(); + afterEach(() => { + npStart.core.http.get.mockClear(); + npStart.core.http.post.mockClear(); + npStart.core.http.put.mockClear(); }); it('should have fields correctly pre-populated', async () => { diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_date_histogram.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_date_histogram.test.js index c4336c535a0ee..b8ec7d9f85d00 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_date_histogram.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_date_histogram.test.js @@ -6,7 +6,8 @@ import moment from 'moment-timezone'; -import { setupEnvironment, pageHelpers } from './helpers'; +import { setHttp } from '../../public/crud_app/services'; +import { mockHttpRequest, pageHelpers } from './helpers'; jest.mock('ui/new_platform'); @@ -15,30 +16,31 @@ jest.mock('lodash/function/debounce', () => fn => fn); const { setup } = pageHelpers.jobCreate; describe('Create Rollup Job, step 2: Date histogram', () => { - let server; - let httpRequestsMockHelpers; let find; let exists; let actions; let goToStep; let form; let getEuiStepsHorizontalActive; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); - - afterAll(() => { - server.restore(); - }); - beforeEach(() => { // Set "default" mock responses by not providing any arguments - httpRequestsMockHelpers.setIndexPatternValidityResponse(); + mockHttpRequest(npStart.core.http); ({ find, exists, actions, form, getEuiStepsHorizontalActive, goToStep } = setup()); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + npStart.core.http.post.mockClear(); + npStart.core.http.put.mockClear(); + }); + describe('layout', () => { beforeEach(async () => { await goToStep(2); @@ -71,7 +73,7 @@ describe('Create Rollup Job, step 2: Date histogram', () => { describe('Date field select', () => { it('should set the options value from the index pattern', async () => { const dateFields = ['field1', 'field2', 'field3']; - httpRequestsMockHelpers.setIndexPatternValidityResponse({ dateFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { dateFields } }); await goToStep(2); @@ -83,7 +85,7 @@ describe('Create Rollup Job, step 2: Date histogram', () => { it('should sort the options in ascending order', async () => { const dateFields = ['field3', 'field2', 'field1']; - httpRequestsMockHelpers.setIndexPatternValidityResponse({ dateFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { dateFields } }); await goToStep(2); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_histogram.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_histogram.test.js index f91c4582ba247..c4b5d753f1a26 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_histogram.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_histogram.test.js @@ -4,7 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import { setupEnvironment, pageHelpers } from './helpers'; +import { setHttp } from '../../public/crud_app/services'; +import { mockHttpRequest, pageHelpers } from './helpers'; jest.mock('ui/new_platform'); @@ -13,8 +14,6 @@ jest.mock('lodash/function/debounce', () => fn => fn); const { setup } = pageHelpers.jobCreate; describe('Create Rollup Job, step 4: Histogram', () => { - let server; - let httpRequestsMockHelpers; let find; let exists; let actions; @@ -22,22 +21,26 @@ describe('Create Rollup Job, step 4: Histogram', () => { let goToStep; let table; let form; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); - }); - - afterAll(() => { - server.restore(); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(() => { // Set "default" mock responses by not providing any arguments - httpRequestsMockHelpers.setIndexPatternValidityResponse(); + mockHttpRequest(npStart.core.http); ({ find, exists, actions, getEuiStepsHorizontalActive, goToStep, table, form } = setup()); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + npStart.core.http.post.mockClear(); + npStart.core.http.put.mockClear(); + }); + const numericFields = ['a-numericField', 'b-numericField']; const goToStepAndOpenFieldChooser = async () => { @@ -108,7 +111,7 @@ describe('Create Rollup Job, step 4: Histogram', () => { describe('when no histogram fields are availalbe', () => { it('should indicate it to the user', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields: [] }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields: [] } }); await goToStepAndOpenFieldChooser(); const { tableCellsValues } = table.getMetaData('rollupJobHistogramFieldChooser-table'); @@ -119,7 +122,7 @@ describe('Create Rollup Job, step 4: Histogram', () => { describe('when histogram fields are available', () => { beforeEach(async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields } }); await goToStepAndOpenFieldChooser(); }); @@ -153,7 +156,7 @@ describe('Create Rollup Job, step 4: Histogram', () => { it('should have a delete button on each row to remove an histogram field', async () => { // First let's add a term to the list - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields } }); await goToStepAndOpenFieldChooser(); const { rows: fieldChooserRows } = table.getMetaData('rollupJobHistogramFieldChooser-table'); fieldChooserRows[0].reactWrapper.simulate('click'); @@ -180,7 +183,7 @@ describe('Create Rollup Job, step 4: Histogram', () => { }; beforeEach(async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields } }); await goToStep(4); addHistogramFieldToList(); }); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_logistics.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_logistics.test.js index c960eabb37dcb..98af94437fa5a 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_logistics.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_logistics.test.js @@ -13,7 +13,8 @@ import { YEAR, } from '../../../../../../src/plugins/es_ui_shared/public/components/cron_editor'; import { indexPatterns } from '../../../../../../src/plugins/data/public'; -import { setupEnvironment, pageHelpers } from './helpers'; +import { setHttp } from '../../public/crud_app/services'; +import { mockHttpRequest, pageHelpers } from './helpers'; jest.mock('ui/new_platform'); @@ -22,29 +23,31 @@ jest.mock('lodash/function/debounce', () => fn => fn); const { setup } = pageHelpers.jobCreate; describe('Create Rollup Job, step 1: Logistics', () => { - let server; - let httpRequestsMockHelpers; let find; let exists; let actions; let form; let getEuiStepsHorizontalActive; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); - }); - - afterAll(() => { - server.restore(); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(() => { // Set "default" mock responses by not providing any arguments - httpRequestsMockHelpers.setIndexPatternValidityResponse(); + mockHttpRequest(npStart.core.http); ({ find, exists, actions, form, getEuiStepsHorizontalActive } = setup()); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + npStart.core.http.post.mockClear(); + npStart.core.http.put.mockClear(); + }); + it('should have the horizontal step active on "Logistics"', () => { expect(getEuiStepsHorizontalActive()).toContain('Logistics'); }); @@ -94,14 +97,14 @@ describe('Create Rollup Job, step 1: Logistics', () => { }); it('should not allow an unknown index pattern', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ doesMatchIndices: false }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { doesMatchIndices: false } }); await form.setInputValue('rollupIndexPattern', 'unknown', true); actions.clickNextStep(); expect(form.getErrorsMessages()).toContain("Index pattern doesn't match any indices."); }); it('should not allow an index pattern without time fields', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ dateFields: [] }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { dateFields: [] } }); await form.setInputValue('rollupIndexPattern', 'abc', true); actions.clickNextStep(); expect(form.getErrorsMessages()).toContain( @@ -110,7 +113,9 @@ describe('Create Rollup Job, step 1: Logistics', () => { }); it('should not allow an index pattern that matches a rollup index', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ doesMatchRollupIndices: true }); + mockHttpRequest(npStart.core.http, { + indxPatternVldtResp: { doesMatchRollupIndices: true }, + }); await form.setInputValue('rollupIndexPattern', 'abc', true); actions.clickNextStep(); expect(form.getErrorsMessages()).toContain('Index pattern must not match rollup indices.'); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_metrics.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_metrics.test.js index bbbd2974c56db..a72dc8b25c083 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_metrics.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_metrics.test.js @@ -4,7 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import { setupEnvironment, pageHelpers } from './helpers'; +import { setHttp } from '../../public/crud_app/services'; +import { mockHttpRequest, pageHelpers } from './helpers'; jest.mock('ui/new_platform'); @@ -13,8 +14,6 @@ jest.mock('lodash/function/debounce', () => fn => fn); const { setup } = pageHelpers.jobCreate; describe('Create Rollup Job, step 5: Metrics', () => { - let server; - let httpRequestsMockHelpers; let find; let exists; let actions; @@ -22,22 +21,26 @@ describe('Create Rollup Job, step 5: Metrics', () => { let goToStep; let table; let metrics; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); - }); - - afterAll(() => { - server.restore(); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(() => { // Set "default" mock responses by not providing any arguments - httpRequestsMockHelpers.setIndexPatternValidityResponse(); + mockHttpRequest(npStart.core.http); ({ find, exists, actions, getEuiStepsHorizontalActive, goToStep, table, metrics } = setup()); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + npStart.core.http.post.mockClear(); + npStart.core.http.put.mockClear(); + }); + const numericFields = ['a-numericField', 'c-numericField']; const dateFields = ['b-dateField', 'd-dateField']; @@ -109,7 +112,7 @@ describe('Create Rollup Job, step 5: Metrics', () => { describe('table', () => { beforeEach(async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields, dateFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields, dateFields } }); await goToStepAndOpenFieldChooser(); }); @@ -166,7 +169,7 @@ describe('Create Rollup Job, step 5: Metrics', () => { describe('when fields are added', () => { beforeEach(async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields, dateFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields, dateFields } }); await goToStepAndOpenFieldChooser(); }); @@ -257,7 +260,8 @@ describe('Create Rollup Job, step 5: Metrics', () => { let getFieldListTableRows; beforeEach(async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields, dateFields }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields, dateFields } }); + await goToStep(5); await addFieldToList('numeric'); await addFieldToList('date'); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_review.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_review.test.js index d7bc5416263fe..0fa9509368d3f 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_review.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_review.test.js @@ -4,8 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { setupEnvironment, pageHelpers } from './helpers'; +import { pageHelpers, mockHttpRequest } from './helpers'; import { first } from 'lodash'; +import { setHttp } from '../../public/crud_app/services'; import { JOBS } from './helpers/constants'; jest.mock('ui/new_platform'); @@ -15,8 +16,6 @@ jest.mock('lodash/function/debounce', () => fn => fn); const { setup } = pageHelpers.jobCreate; describe('Create Rollup Job, step 6: Review', () => { - let server; - let httpRequestsMockHelpers; let find; let exists; let actions; @@ -24,21 +23,25 @@ describe('Create Rollup Job, step 6: Review', () => { let goToStep; let table; let form; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); - }); - - afterAll(() => { - server.restore(); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(() => { // Set "default" mock responses by not providing any arguments - httpRequestsMockHelpers.setIndexPatternValidityResponse(); + mockHttpRequest(npStart.core.http); ({ find, exists, actions, getEuiStepsHorizontalActive, goToStep, table, form } = setup()); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + npStart.core.http.post.mockClear(); + npStart.core.http.put.mockClear(); + }); + describe('layout', () => { beforeEach(async () => { await goToStep(6); @@ -81,7 +84,7 @@ describe('Create Rollup Job, step 6: Review', () => { }); it('should have a "Summary", "Terms" & "Request" tab if a term aggregation was added', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields: ['my-field'] }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields: ['my-field'] } }); await goToStep(3); selectFirstField('Terms'); @@ -93,7 +96,7 @@ describe('Create Rollup Job, step 6: Review', () => { }); it('should have a "Summary", "Histogram" & "Request" tab if a histogram field was added', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields: ['a-field'] }); + mockHttpRequest(npStart.core.http, { indxPatternVldtResp: { numericFields: ['a-field'] } }); await goToStep(4); selectFirstField('Histogram'); form.setInputValue('rollupJobCreateHistogramInterval', 3); // set an interval @@ -105,9 +108,11 @@ describe('Create Rollup Job, step 6: Review', () => { }); it('should have a "Summary", "Metrics" & "Request" tab if a histogram field was added', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ - numericFields: ['a-field'], - dateFields: ['b-field'], + mockHttpRequest(npStart.core.http, { + indxPatternVldtResp: { + numericFields: ['a-field'], + dateFields: ['b-field'], + }, }); await goToStep(5); selectFirstField('Metrics'); @@ -125,27 +130,30 @@ describe('Create Rollup Job, step 6: Review', () => { describe('without starting job after creation', () => { it('should call the "create" Api server endpoint', async () => { - httpRequestsMockHelpers.setCreateJobResponse(first(JOBS.jobs)); + mockHttpRequest(npStart.core.http, { + createdJob: first(JOBS.jobs), + }); await goToStep(6); - expect(server.requests.find(r => r.url === jobCreateApiPath)).toBe(undefined); // make sure it hasn't been called - expect(server.requests.find(r => r.url === jobStartApiPath)).toBe(undefined); // make sure it hasn't been called + expect(npStart.core.http.put).not.toHaveBeenCalledWith(jobCreateApiPath); // make sure it hasn't been called + expect(npStart.core.http.get).not.toHaveBeenCalledWith(jobStartApiPath); // make sure it hasn't been called actions.clickSave(); // Given the following anti-jitter sleep x-pack/legacy/plugins/rollup/public/crud_app/store/actions/create_job.js // we add a longer sleep here :( await new Promise(res => setTimeout(res, 750)); - expect(server.requests.find(r => r.url === jobCreateApiPath)).not.toBe(undefined); // It has been called! - expect(server.requests.find(r => r.url === jobStartApiPath)).toBe(undefined); // It has still not been called! + expect(npStart.core.http.put).toHaveBeenCalledWith(jobCreateApiPath, expect.anything()); // It has been called! + expect(npStart.core.http.get).not.toHaveBeenCalledWith(jobStartApiPath); // It has still not been called! }); }); describe('with starting job after creation', () => { it('should call the "create" and "start" Api server endpoints', async () => { - httpRequestsMockHelpers.setCreateJobResponse(first(JOBS.jobs)); - httpRequestsMockHelpers.setStartJobResponse(); + mockHttpRequest(npStart.core.http, { + createdJob: first(JOBS.jobs), + }); await goToStep(6); @@ -153,14 +161,14 @@ describe('Create Rollup Job, step 6: Review', () => { target: { checked: true }, }); - expect(server.requests.find(r => r.url === jobStartApiPath)).toBe(undefined); // make sure it hasn't been called + expect(npStart.core.http.post).not.toHaveBeenCalledWith(jobStartApiPath); // make sure it hasn't been called actions.clickSave(); // Given the following anti-jitter sleep x-pack/legacy/plugins/rollup/public/crud_app/store/actions/create_job.js // we add a longer sleep here :( await new Promise(res => setTimeout(res, 750)); - expect(server.requests.find(r => r.url === jobStartApiPath)).not.toBe(undefined); // It has been called! + expect(npStart.core.http.post).toHaveBeenCalledWith(jobStartApiPath, expect.anything()); // It has been called! }); }); }); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_terms.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_terms.test.js index d3a0aaa08e148..f111a7df2c250 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_terms.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_create_terms.test.js @@ -4,7 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import { setupEnvironment, pageHelpers } from './helpers'; +import { setHttp } from '../../public/crud_app/services'; +import { pageHelpers, mockHttpRequest } from './helpers'; jest.mock('ui/new_platform'); @@ -13,30 +14,30 @@ jest.mock('lodash/function/debounce', () => fn => fn); const { setup } = pageHelpers.jobCreate; describe('Create Rollup Job, step 3: Terms', () => { - let server; - let httpRequestsMockHelpers; let find; let exists; let actions; let getEuiStepsHorizontalActive; let goToStep; let table; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); - }); - - afterAll(() => { - server.restore(); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(() => { // Set "default" mock responses by not providing any arguments - httpRequestsMockHelpers.setIndexPatternValidityResponse(); + mockHttpRequest(npStart.core.http); ({ find, exists, actions, getEuiStepsHorizontalActive, goToStep, table } = setup()); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + }); + const numericFields = ['a-numericField', 'c-numericField']; const keywordFields = ['b-keywordField', 'd-keywordField']; @@ -108,9 +109,11 @@ describe('Create Rollup Job, step 3: Terms', () => { describe('when no terms are available', () => { it('should indicate it to the user', async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ - numericFields: [], - keywordFields: [], + mockHttpRequest(npStart.core.http, { + indxPatternVldtResp: { + numericFields: [], + keywordFields: [], + }, }); await goToStepAndOpenFieldChooser(); @@ -122,7 +125,12 @@ describe('Create Rollup Job, step 3: Terms', () => { describe('when terms are available', () => { beforeEach(async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields, keywordFields }); + mockHttpRequest(npStart.core.http, { + indxPatternVldtResp: { + numericFields, + keywordFields, + }, + }); await goToStepAndOpenFieldChooser(); }); @@ -163,7 +171,12 @@ describe('Create Rollup Job, step 3: Terms', () => { it('should have a delete button on each row to remove a term', async () => { // First let's add a term to the list - httpRequestsMockHelpers.setIndexPatternValidityResponse({ numericFields, keywordFields }); + mockHttpRequest(npStart.core.http, { + indxPatternVldtResp: { + numericFields, + keywordFields, + }, + }); await goToStepAndOpenFieldChooser(); const { rows: fieldChooserRows } = table.getMetaData('rollupJobTermsFieldChooser-table'); fieldChooserRows[0].reactWrapper.simulate('click'); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list.test.js index 16cb41bc76677..a9e474cf0b559 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list.test.js @@ -4,8 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import { getRouter } from '../../public/crud_app/services'; -import { setupEnvironment, pageHelpers, nextTick } from './helpers'; +import { getRouter, setHttp } from '../../public/crud_app/services'; +import { mockHttpRequest, pageHelpers, nextTick } from './helpers'; import { JOBS } from './helpers/constants'; jest.mock('ui/new_platform'); @@ -22,22 +22,18 @@ const { setup } = pageHelpers.jobList; describe('', () => { describe('detail panel', () => { - let server; - let httpRequestsMockHelpers; let component; let table; let exists; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); - }); - - afterAll(() => { - server.restore(); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(async () => { - httpRequestsMockHelpers.setLoadJobsResponse(JOBS); + mockHttpRequest(npStart.core.http, { jobs: JOBS }); ({ component, exists, table } = setup()); @@ -45,6 +41,10 @@ describe('', () => { component.update(); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + }); + test('should open the detail panel when clicking on a job in the table', () => { const { rows } = table.getMetaData('rollupJobsListTable'); const button = rows[0].columns[1].reactWrapper.find('button'); diff --git a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list_clone.test.js b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list_clone.test.js index 6feabe7f772ee..8a36af83def4c 100644 --- a/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list_clone.test.js +++ b/x-pack/legacy/plugins/rollup/__jest__/client_integration/job_list_clone.test.js @@ -4,9 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ -import { setupEnvironment, pageHelpers, nextTick } from './helpers'; +import { mockHttpRequest, pageHelpers, nextTick } from './helpers'; import { JOB_TO_CLONE, JOB_CLONE_INDEX_PATTERN_CHECK } from './helpers/constants'; import { getRouter } from '../../public/crud_app/services/routing'; +import { setHttp } from '../../public/crud_app/services'; import { CRUD_APP_BASE_PATH } from '../../public/crud_app/constants'; jest.mock('ui/new_platform'); @@ -16,24 +17,22 @@ jest.mock('lodash/function/debounce', () => fn => fn); const { setup } = pageHelpers.jobList; describe('Smoke test cloning an existing rollup job from job list', () => { - let server; - let httpRequestsMockHelpers; let table; let find; let component; let exists; + let npStart; beforeAll(() => { - ({ server, httpRequestsMockHelpers } = setupEnvironment()); - }); - - afterAll(() => { - server.restore(); + npStart = require('ui/new_platform').npStart; // eslint-disable-line + setHttp(npStart.core.http); }); beforeEach(async () => { - httpRequestsMockHelpers.setIndexPatternValidityResponse(JOB_CLONE_INDEX_PATTERN_CHECK); - httpRequestsMockHelpers.setLoadJobsResponse(JOB_TO_CLONE); + mockHttpRequest(npStart.core.http, { + jobs: JOB_TO_CLONE, + indxPatternVldtResp: JOB_CLONE_INDEX_PATTERN_CHECK, + }); ({ find, exists, table, component } = setup()); @@ -41,6 +40,10 @@ describe('Smoke test cloning an existing rollup job from job list', () => { component.update(); }); + afterEach(() => { + npStart.core.http.get.mockClear(); + }); + it('should navigate to create view with default values set', async () => { const router = getRouter(); const { rows } = table.getMetaData('rollupJobsListTable'); diff --git a/x-pack/legacy/plugins/rollup/common/index.js b/x-pack/legacy/plugins/rollup/common/index.ts similarity index 100% rename from x-pack/legacy/plugins/rollup/common/index.js rename to x-pack/legacy/plugins/rollup/common/index.ts diff --git a/x-pack/legacy/plugins/rollup/common/ui_metric.js b/x-pack/legacy/plugins/rollup/common/ui_metric.ts similarity index 100% rename from x-pack/legacy/plugins/rollup/common/ui_metric.js rename to x-pack/legacy/plugins/rollup/common/ui_metric.ts diff --git a/x-pack/legacy/plugins/rollup/index.js b/x-pack/legacy/plugins/rollup/index.js index f4210435abc09..a10407b19fa93 100644 --- a/x-pack/legacy/plugins/rollup/index.js +++ b/x-pack/legacy/plugins/rollup/index.js @@ -26,7 +26,7 @@ export function rollup(kibana) { require: ['kibana', 'elasticsearch', 'xpack_main'], uiExports: { styleSheetPaths: resolve(__dirname, 'public/index.scss'), - managementSections: ['plugins/rollup/crud_app'], + managementSections: ['plugins/rollup/legacy'], uiSettingDefaults: { [CONFIG_ROLLUPS]: { name: i18n.translate('xpack.rollupJobs.rollupIndexPatternsTitle', { @@ -41,13 +41,9 @@ export function rollup(kibana) { category: ['rollups'], }, }, - indexManagement: [ - 'plugins/rollup/index_pattern_creation', - 'plugins/rollup/index_pattern_list', - 'plugins/rollup/extend_index_management', - ], - visualize: ['plugins/rollup/visualize'], - search: ['plugins/rollup/search'], + indexManagement: ['plugins/rollup/legacy'], + visualize: ['plugins/rollup/legacy'], + search: ['plugins/rollup/legacy'], }, init: function(server) { const { usageCollection } = server.newPlatform.setup.plugins; diff --git a/x-pack/legacy/plugins/rollup/public/application.tsx b/x-pack/legacy/plugins/rollup/public/application.tsx new file mode 100644 index 0000000000000..df17d37bc3465 --- /dev/null +++ b/x-pack/legacy/plugins/rollup/public/application.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { render, unmountComponentAtNode } from 'react-dom'; +import { Provider } from 'react-redux'; +import { KibanaContextProvider } from '../../../../../src/plugins/kibana_react/public'; +import { ChromeBreadcrumb, CoreSetup } from '../../../../../src/core/public'; +// @ts-ignore +import { rollupJobsStore } from './crud_app/store'; +// @ts-ignore +import { App } from './crud_app/app'; + +/** + * This module will be loaded asynchronously to reduce the bundle size of your plugin's main bundle. + */ +export const renderApp = async ( + core: CoreSetup, + { + element, + setBreadcrumbs, + }: { element: HTMLElement; setBreadcrumbs: (crumbs: ChromeBreadcrumb[]) => void } +) => { + const [coreStart] = await core.getStartServices(); + const I18nContext = coreStart.i18n.Context; + + render( + + + + + + + , + element + ); + return () => { + unmountComponentAtNode(element); + }; +}; diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/_crud_app.scss b/x-pack/legacy/plugins/rollup/public/crud_app/_crud_app.scss index e1166d0942a5c..9e3bd491115ce 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/_crud_app.scss +++ b/x-pack/legacy/plugins/rollup/public/crud_app/_crud_app.scss @@ -5,10 +5,6 @@ align-items: flex-end; /* 1 */ } -.rollupJobsRoot { - display: flex; -} - /** * 1. Ensure panel fills width of parent when search input yields no matching rollup jobs. */ diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/index.js b/x-pack/legacy/plugins/rollup/public/crud_app/index.js deleted file mode 100644 index 82bbb90d2e33c..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/crud_app/index.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { - FeatureCatalogueRegistryProvider, - FeatureCatalogueCategory, -} from 'ui/registry/feature_catalogue'; -import { render, unmountComponentAtNode } from 'react-dom'; -import { Provider } from 'react-redux'; -import { i18n } from '@kbn/i18n'; -import { I18nContext } from 'ui/i18n'; -import { management } from 'ui/management'; -import routes from 'ui/routes'; - -import { CRUD_APP_BASE_PATH } from './constants'; -import { setHttp, setUserHasLeftApp } from './services'; -import { App } from './app'; -import template from './main.html'; -import { rollupJobsStore } from './store'; - -const esSection = management.getSection('elasticsearch'); - -esSection.register('rollup_jobs', { - visible: true, - display: i18n.translate('xpack.rollupJobs.appTitle', { defaultMessage: 'Rollup Jobs' }), - order: 3, - url: `#${CRUD_APP_BASE_PATH}/job_list`, -}); - -const renderReact = async elem => { - render( - - - - - , - elem - ); -}; - -routes.when(`${CRUD_APP_BASE_PATH}/:view?`, { - template: template, - controllerAs: 'rollupJobs', - controller: class IndexRollupJobsController { - constructor($scope, $route, $injector) { - // NOTE: We depend upon Angular's $http service because it's decorated with interceptors, - // e.g. to check license status per request. - setHttp($injector.get('$http')); - - // If returning to the app, we'll need to reset this state. - setUserHasLeftApp(false); - - $scope.$$postDigest(() => { - const appElement = document.getElementById('rollupJobsReactRoot'); - renderReact(appElement); - - const appRoute = $route.current; - const stopListeningForLocationChange = $scope.$on('$locationChangeSuccess', () => { - const currentRoute = $route.current; - - const isNavigationInApp = currentRoute.$$route.template === appRoute.$$route.template; - - // When we navigate within rollups, prevent Angular from re-matching the route and - // rebuilding the app. - if (isNavigationInApp) { - $route.current = appRoute; - } else { - // Set internal flag so we can prevent reacting to the route change internally. - setUserHasLeftApp(true); - } - }); - - $scope.$on('$destroy', () => { - stopListeningForLocationChange(); - unmountComponentAtNode(appElement); - }); - }); - } - }, -}); - -FeatureCatalogueRegistryProvider.register(() => { - return { - id: 'rollup_jobs', - title: 'Rollups', - description: i18n.translate('xpack.rollupJobs.featureCatalogueDescription', { - defaultMessage: 'Summarize and store historical data in a smaller index for future analysis.', - }), - icon: 'indexRollupApp', - path: `#${CRUD_APP_BASE_PATH}/job_list`, - showOnHomePage: true, - category: FeatureCatalogueCategory.ADMIN, - }; -}); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/main.html b/x-pack/legacy/plugins/rollup/public/crud_app/main.html deleted file mode 100644 index 2956d157e784c..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/crud_app/main.html +++ /dev/null @@ -1,3 +0,0 @@ - -
-
diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/components/job_action_menu/confirm_delete_modal/confirm_delete_modal.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/components/job_action_menu/confirm_delete_modal/confirm_delete_modal.js index 183a3765e1fd9..de1bee29aed4d 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/components/job_action_menu/confirm_delete_modal/confirm_delete_modal.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/components/job_action_menu/confirm_delete_modal/confirm_delete_modal.js @@ -6,11 +6,12 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n/react'; import { EuiConfirmModal, EuiOverlayMask } from '@elastic/eui'; -class ConfirmDeleteModalUi extends Component { +export class ConfirmDeleteModal extends Component { static propTypes = { isSingleSelection: PropTypes.bool.isRequired, jobs: PropTypes.array.isRequired, @@ -19,12 +20,14 @@ class ConfirmDeleteModalUi extends Component { }; renderJobs() { - const { jobs, intl } = this.props; + const { jobs } = this.props; const jobItems = jobs.map(({ id, status }) => { - const startedMessage = intl.formatMessage({ - id: 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.startedMessage', - defaultMessage: 'started', - }); + const startedMessage = i18n.translate( + 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.startedMessage', + { + defaultMessage: 'started', + } + ); const statusText = status === 'started' ? ` (${startedMessage})` : null; return (
  • @@ -38,19 +41,19 @@ class ConfirmDeleteModalUi extends Component { } render() { - const { isSingleSelection, jobs, onCancel, onConfirm, intl } = this.props; + const { isSingleSelection, jobs, onCancel, onConfirm } = this.props; let title; let content; if (isSingleSelection) { const { id, status } = jobs[0]; - title = intl.formatMessage( + title = i18n.translate( + 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.deleteSingleJobTitle', { - id: 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.deleteSingleJobTitle', defaultMessage: "Delete rollup job '{id}'?", - }, - { id } + values: { id }, + } ); if (status === 'started') { @@ -64,12 +67,12 @@ class ConfirmDeleteModalUi extends Component { ); } } else { - title = intl.formatMessage( + title = i18n.translate( + 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.multipleDeletionTitle', { - id: 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.multipleDeletionTitle', defaultMessage: 'Delete {count} rollup jobs?', - }, - { count: jobs.length } + values: { count: jobs.length }, + } ); content = ( @@ -92,15 +95,19 @@ class ConfirmDeleteModalUi extends Component { title={title} onCancel={onCancel} onConfirm={onConfirm} - cancelButtonText={intl.formatMessage({ - id: 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.cancelButtonText', - defaultMessage: 'Cancel', - })} + cancelButtonText={i18n.translate( + 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.cancelButtonText', + { + defaultMessage: 'Cancel', + } + )} buttonColor="danger" - confirmButtonText={intl.formatMessage({ - id: 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.confirmButtonText', - defaultMessage: 'Delete', - })} + confirmButtonText={i18n.translate( + 'xpack.rollupJobs.jobActionMenu.deleteJob.confirmModal.confirmButtonText', + { + defaultMessage: 'Delete', + } + )} > {content} @@ -108,5 +115,3 @@ class ConfirmDeleteModalUi extends Component { ); } } - -export const ConfirmDeleteModal = injectI18n(ConfirmDeleteModalUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/job_create.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/job_create.js index a8e921973efc0..5379778c77e2f 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/job_create.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/job_create.js @@ -12,9 +12,9 @@ import debounce from 'lodash/function/debounce'; import first from 'lodash/array/first'; import { i18n } from '@kbn/i18n'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; -import chrome from 'ui/chrome'; -import { MANAGEMENT_BREADCRUMB } from 'ui/management'; +import { FormattedMessage } from '@kbn/i18n/react'; + +import { withKibana } from '../../../../../../../../src/plugins/kibana_react/public/'; import { EuiCallOut, @@ -27,8 +27,6 @@ import { EuiTitle, } from '@elastic/eui'; -import { fatalError } from 'ui/notify'; - import { validateIndexPattern, formatFields, @@ -59,6 +57,8 @@ import { hasErrors, } from './steps_config'; +import { getFatalErrors } from '../../../kibana_services'; + const stepIdToTitleMap = { [STEP_LOGISTICS]: i18n.translate('xpack.rollupJobs.create.steps.stepLogisticsTitle', { defaultMessage: 'Logistics', @@ -92,7 +92,7 @@ export class JobCreateUi extends Component { constructor(props) { super(props); - chrome.breadcrumbs.set([MANAGEMENT_BREADCRUMB, listBreadcrumb, createBreadcrumb]); + props.kibana.services.setBreadcrumbs([listBreadcrumb, createBreadcrumb]); const { jobToClone: stepDefaultOverrides } = props; const stepsFields = mapValues(stepIdToStepConfigMap, step => cloneDeep(step.getDefaultFields(stepDefaultOverrides)) @@ -181,7 +181,7 @@ export class JobCreateUi extends Component { dateFields: indexPatternDateFields, numericFields, keywordFields, - } = response.data; + } = response; let indexPatternAsyncErrors; @@ -298,9 +298,9 @@ export class JobCreateUi extends Component { return; } - // Expect an error in the shape provided by Angular's $http service. - if (error && error.data) { - const { error: errorString, statusCode } = error.data; + // Expect an error in the shape provided by http service. + if (error && error.body) { + const { error: errorString, statusCode } = error.body; const indexPatternAsyncErrors = [ ({ text: name, })); -export class StepDateHistogramUi extends Component { +export class StepDateHistogram extends Component { static propTypes = { fields: PropTypes.object.isRequired, onFieldsChange: PropTypes.func.isRequired, @@ -192,7 +192,7 @@ export class StepDateHistogramUi extends Component { + ; }; } - -export const StepDateHistogram = injectI18n(StepDateHistogramUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_histogram.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_histogram.js index 4c4019b3161a9..9307c9074e663 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_histogram.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_histogram.js @@ -6,7 +6,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { EuiButtonEmpty, @@ -20,13 +20,13 @@ import { EuiTitle, } from '@elastic/eui'; -import { histogramDetailsUrl } from '../../../services'; +import { getHistogramDetailsUrl } from '../../../services'; import { FieldList } from '../../components'; import { FieldChooser, StepError } from './components'; -export class StepHistogramUi extends Component { +export class StepHistogram extends Component { static propTypes = { fields: PropTypes.object.isRequired, onFieldsChange: PropTypes.func.isRequired, @@ -96,7 +96,7 @@ export class StepHistogramUi extends Component { ; }; } - -export const StepHistogram = injectI18n(StepHistogramUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_logistics.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_logistics.js index 8cba18804b1c6..024001d463240 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_logistics.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_logistics.js @@ -6,7 +6,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { EuiButtonEmpty, @@ -26,8 +26,8 @@ import { // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { CronEditor } from '../../../../../../../../../src/plugins/es_ui_shared/public/components/cron_editor'; -import { INDEX_ILLEGAL_CHARACTERS_VISIBLE } from 'ui/indices'; -import { logisticalDetailsUrl, cronUrl } from '../../../services'; +import { INDEX_ILLEGAL_CHARACTERS_VISIBLE } from '../../../../legacy_imports'; +import { getLogisticalDetailsUrl, getCronUrl } from '../../../services'; import { StepError } from './components'; import { indexPatterns } from '../../../../../../../../../src/plugins/data/public'; @@ -35,7 +35,7 @@ import { indexPatterns } from '../../../../../../../../../src/plugins/data/publi const indexPatternIllegalCharacters = indexPatterns.ILLEGAL_CHARACTERS_VISIBLE.join(' '); const indexIllegalCharacters = INDEX_ILLEGAL_CHARACTERS_VISIBLE.join(' '); -export class StepLogisticsUi extends Component { +export class StepLogistics extends Component { static propTypes = { fields: PropTypes.object.isRequired, onFieldsChange: PropTypes.func.isRequired, @@ -146,7 +146,7 @@ export class StepLogisticsUi extends Component { isInvalid={Boolean(areStepErrorsVisible && errorRollupCron)} helpText={

    - + ; }; } - -export const StepLogistics = injectI18n(StepLogisticsUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_metrics.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_metrics.js index 5022754ec5faa..b71b6bfc805bf 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_metrics.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_metrics.js @@ -6,7 +6,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; import get from 'lodash/object/get'; @@ -22,7 +22,7 @@ import { EuiButton, } from '@elastic/eui'; -import { metricsDetailsUrl } from '../../../services'; +import { getMetricsDetailsUrl } from '../../../services'; import { FieldList } from '../../components'; import { FieldChooser, StepError } from './components'; import { METRICS_CONFIG } from '../../../constants'; @@ -64,7 +64,7 @@ const metricTypesConfig = (function() { }); })(); -export class StepMetricsUi extends Component { +export class StepMetrics extends Component { static propTypes = { fields: PropTypes.object.isRequired, onFieldsChange: PropTypes.func.isRequired, @@ -247,7 +247,7 @@ export class StepMetricsUi extends Component { } getListColumns() { - return StepMetricsUi.chooserColumns.concat({ + return StepMetrics.chooserColumns.concat({ type: 'metrics', name: i18n.translate('xpack.rollupJobs.create.stepMetrics.metricsColumnHeader', { defaultMessage: 'Metrics', @@ -384,7 +384,7 @@ export class StepMetricsUi extends Component { } - columns={StepMetricsUi.chooserColumns} + columns={StepMetrics.chooserColumns} fields={metricsFields} selectedFields={metrics} onSelectField={this.onSelectField} @@ -472,5 +472,3 @@ export class StepMetricsUi extends Component { }, ]; } - -export const StepMetrics = injectI18n(StepMetricsUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_review.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_review.js index 19937732275a2..0097792db3105 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_review.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_review.js @@ -6,7 +6,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { EuiErrorBoundary, EuiSpacer, EuiTab, EuiTabs, EuiTitle } from '@elastic/eui'; @@ -30,7 +30,7 @@ const JOB_DETAILS_TABS = [ JOB_DETAILS_TAB_REQUEST, ]; -export class StepReviewUi extends Component { +export class StepReview extends Component { static propTypes = { job: PropTypes.object.isRequired, }; @@ -121,5 +121,3 @@ export class StepReviewUi extends Component { ); } } - -export const StepReview = injectI18n(StepReviewUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_terms.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_terms.js index cd3c6cc5127f1..48e045e19f478 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_terms.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_create/steps/step_terms.js @@ -6,7 +6,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { EuiButtonEmpty, @@ -17,13 +17,13 @@ import { EuiTitle, } from '@elastic/eui'; -import { termsDetailsUrl } from '../../../services'; +import { getTermsDetailsUrl } from '../../../services'; import { FieldList } from '../../components'; import { FieldChooser } from './components'; -export class StepTermsUi extends Component { +export class StepTerms extends Component { static propTypes = { fields: PropTypes.object.isRequired, onFieldsChange: PropTypes.func.isRequired, @@ -99,7 +99,7 @@ export class StepTermsUi extends Component { @@ -251,5 +251,3 @@ export class DetailPanelUi extends Component { ); } } - -export const DetailPanel = injectI18n(DetailPanelUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/detail_panel/detail_panel.test.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/detail_panel/detail_panel.test.js index 39153cda1f99d..9ac8e6075e4cf 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/detail_panel/detail_panel.test.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/detail_panel/detail_panel.test.js @@ -58,12 +58,12 @@ describe('', () => { }); it("should have children if it's open", () => { - expect(component.find('DetailPanelUi').children().length).toBeTruthy(); + expect(component.find('DetailPanel').children().length).toBeTruthy(); }); it('should *not* have children if its closed', () => { ({ component } = initTestBed({ isOpen: false })); - expect(component.find('DetailPanelUi').children().length).toBeFalsy(); + expect(component.find('DetailPanel').children().length).toBeFalsy(); }); it('should show a loading when the job is loading', () => { diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.js index 035a53206c71d..98329a687217a 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.js @@ -6,9 +6,8 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; -import chrome from 'ui/chrome'; -import { MANAGEMENT_BREADCRUMB } from 'ui/management'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { i18n } from '@kbn/i18n'; import { EuiButton, @@ -26,6 +25,8 @@ import { EuiCallOut, } from '@elastic/eui'; +import { withKibana } from '../../../../../../../../src/plugins/kibana_react/public/'; + import { CRUD_APP_BASE_PATH } from '../../constants'; import { getRouterLinkProps, extractQueryParams, listBreadcrumb } from '../../services'; @@ -67,7 +68,7 @@ export class JobListUi extends Component { props.loadJobs(); - chrome.breadcrumbs.set([MANAGEMENT_BREADCRUMB, listBreadcrumb]); + props.kibana.services.setBreadcrumbs([listBreadcrumb]); this.state = {}; } @@ -97,9 +98,7 @@ export class JobListUi extends Component { } renderNoPermission() { - const { intl } = this.props; - const title = intl.formatMessage({ - id: 'xpack.rollupJobs.jobList.noPermissionTitle', + const title = i18n.translate('xpack.rollupJobs.jobList.noPermissionTitle', { defaultMessage: 'Permission error', }); return ( @@ -122,13 +121,11 @@ export class JobListUi extends Component { } renderError(error) { - // We can safely depend upon the shape of this error coming from Angular $http, because we + // We can safely depend upon the shape of this error coming from http service, because we // handle unexpected error shapes in the API action. - const { statusCode, error: errorString } = error.data; + const { statusCode, error: errorString } = error.body; - const { intl } = this.props; - const title = intl.formatMessage({ - id: 'xpack.rollupJobs.jobList.loadingErrorTitle', + const title = i18n.translate('xpack.rollupJobs.jobList.loadingErrorTitle', { defaultMessage: 'Error loading rollup jobs', }); return ( @@ -254,4 +251,4 @@ export class JobListUi extends Component { } } -export const JobList = injectI18n(JobListUi); +export const JobList = withKibana(JobListUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.test.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.test.js index 5c7d53efbd62c..725789fc584de 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.test.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_list.test.js @@ -4,24 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ +import React from 'react'; import { registerTestBed } from '../../../../../../../test_utils'; import { rollupJobsStore } from '../../store'; import { JobList } from './job_list'; +import { KibanaContextProvider } from '../../../../../../../../src/plugins/kibana_react/public'; +import { coreMock } from '../../../../../../../../src/core/public/mocks'; +const startMock = coreMock.createStart(); + jest.mock('ui/new_platform'); -jest.mock('ui/chrome', () => ({ - addBasePath: () => {}, - breadcrumbs: { set: () => {} }, - getInjected: key => { - if (key === 'uiCapabilities') { - return { - navLinks: {}, - management: {}, - catalogue: {}, - }; - } - }, -})); jest.mock('../../services', () => { const services = require.requireActual('../../services'); @@ -40,7 +32,16 @@ const defaultProps = { isLoading: false, }; -const initTestBed = registerTestBed(JobList, { defaultProps, store: rollupJobsStore }); +const services = { + setBreadcrumbs: startMock.chrome.setBreadcrumbs, +}; +const Component = props => ( + + + +); + +const initTestBed = registerTestBed(Component, { defaultProps, store: rollupJobsStore }); describe('', () => { it('should render empty prompt when loading is complete and there are no jobs', () => { @@ -53,21 +54,21 @@ describe('', () => { const { component, exists } = initTestBed({ isLoading: true }); expect(exists('jobListLoading')).toBeTruthy(); - expect(component.find('JobTableUi').length).toBeFalsy(); + expect(component.find('JobTable').length).toBeFalsy(); }); it('should display the when there are jobs', () => { const { component, exists } = initTestBed({ hasJobs: true }); expect(exists('jobListLoading')).toBeFalsy(); - expect(component.find('JobTableUi').length).toBeTruthy(); + expect(component.find('JobTable').length).toBeTruthy(); }); describe('when there is an API error', () => { const { exists, find } = initTestBed({ jobLoadError: { status: 400, - data: { statusCode: 400, error: 'Houston we got a problem.' }, + body: { statusCode: 400, error: 'Houston we got a problem.' }, }, }); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_table/job_table.js b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_table/job_table.js index 42d48702a3385..4dbe396ab8410 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_table/job_table.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/sections/job_list/job_table/job_table.js @@ -7,7 +7,7 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { i18n } from '@kbn/i18n'; -import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { EuiCheckbox, @@ -120,7 +120,7 @@ const COLUMNS = [ }, ]; -export class JobTableUi extends Component { +export class JobTable extends Component { static propTypes = { jobs: PropTypes.array, pager: PropTypes.object.isRequired, @@ -333,7 +333,7 @@ export class JobTableUi extends Component { } render() { - const { filterChanged, filter, jobs, intl, closeDetailPanel } = this.props; + const { filterChanged, filter, jobs, closeDetailPanel } = this.props; const { idToSelectedJobMap } = this.state; @@ -360,8 +360,7 @@ export class JobTableUi extends Component { filterChanged(event.target.value); }} data-test-subj="jobTableFilterInput" - placeholder={intl.formatMessage({ - id: 'xpack.rollupJobs.jobTable.searchInputPlaceholder', + placeholder={i18n.translate('xpack.rollupJobs.jobTable.searchInputPlaceholder', { defaultMessage: 'Search', })} aria-label="Search jobs" @@ -405,5 +404,3 @@ export class JobTableUi extends Component { ); } } - -export const JobTable = injectI18n(JobTableUi); diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/services/api.js b/x-pack/legacy/plugins/rollup/public/crud_app/services/api.js index e712415f9568d..8f95561b72d1d 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/services/api.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/services/api.js @@ -4,7 +4,6 @@ * you may not use this file except in compliance with the Elastic License. */ -import chrome from 'ui/chrome'; import { UIM_JOB_CREATE, UIM_JOB_DELETE, @@ -17,39 +16,45 @@ import { import { getHttp } from './http_provider'; import { trackUserRequest } from './track_ui_metric'; -const apiPrefix = chrome.addBasePath('/api/rollup'); +const apiPrefix = '/api/rollup'; export async function loadJobs() { - const { - data: { jobs }, - } = await getHttp().get(`${apiPrefix}/jobs`); + const { jobs } = await getHttp().get(`${apiPrefix}/jobs`); return jobs; } export async function startJobs(jobIds) { const body = { jobIds }; - const request = getHttp().post(`${apiPrefix}/start`, body); + const request = getHttp().post(`${apiPrefix}/start`, { + body: JSON.stringify(body), + }); const actionType = jobIds.length > 1 ? UIM_JOB_START_MANY : UIM_JOB_START; return await trackUserRequest(request, actionType); } export async function stopJobs(jobIds) { const body = { jobIds }; - const request = getHttp().post(`${apiPrefix}/stop`, body); + const request = getHttp().post(`${apiPrefix}/stop`, { + body: JSON.stringify(body), + }); const actionType = jobIds.length > 1 ? UIM_JOB_STOP_MANY : UIM_JOB_STOP; return await trackUserRequest(request, actionType); } export async function deleteJobs(jobIds) { const body = { jobIds }; - const request = getHttp().post(`${apiPrefix}/delete`, body); + const request = getHttp().post(`${apiPrefix}/delete`, { + body: JSON.stringify(body), + }); const actionType = jobIds.length > 1 ? UIM_JOB_DELETE_MANY : UIM_JOB_DELETE; return await trackUserRequest(request, actionType); } export async function createJob(job) { const body = { job }; - const request = getHttp().put(`${apiPrefix}/create`, body); + const request = getHttp().put(`${apiPrefix}/create`, { + body: JSON.stringify(body), + }); return await trackUserRequest(request, UIM_JOB_CREATE); } diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/services/api_errors.js b/x-pack/legacy/plugins/rollup/public/crud_app/services/api_errors.ts similarity index 54% rename from x-pack/legacy/plugins/rollup/public/crud_app/services/api_errors.js rename to x-pack/legacy/plugins/rollup/public/crud_app/services/api_errors.ts index bacaf13405898..af9e1a16e4cc5 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/services/api_errors.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/services/api_errors.ts @@ -4,12 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import { fatalError, toastNotifications } from 'ui/notify'; +import { getNotifications, getFatalErrors } from '../../kibana_services'; -function createToastConfig(error, errorTitle) { - // Expect an error in the shape provided by Angular's $http service. - if (error && error.data) { - const { error: errorString, statusCode, message } = error.data; +function createToastConfig(error: any, errorTitle: string) { + // Expect an error in the shape provided by http service. + if (error && error.body) { + const { error: errorString, statusCode, message } = error.body; return { title: errorTitle, text: `${statusCode}: ${errorString}. ${message}`, @@ -17,26 +17,26 @@ function createToastConfig(error, errorTitle) { } } -export function showApiWarning(error, errorTitle) { +export function showApiWarning(error: any, errorTitle: string) { const toastConfig = createToastConfig(error, errorTitle); if (toastConfig) { - return toastNotifications.addWarning(toastConfig); + return getNotifications().toasts.addWarning(toastConfig); } // This error isn't an HTTP error, so let the fatal error screen tell the user something // unexpected happened. - return fatalError(error, errorTitle); + return getFatalErrors().add(error, errorTitle); } -export function showApiError(error, errorTitle) { +export function showApiError(error: any, errorTitle: string) { const toastConfig = createToastConfig(error, errorTitle); if (toastConfig) { - return toastNotifications.addDanger(toastConfig); + return getNotifications().toasts.addDanger(toastConfig); } // This error isn't an HTTP error, so let the fatal error screen tell the user something // unexpected happened. - fatalError(error, errorTitle); + getFatalErrors().add(error, errorTitle); } diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/services/documentation_links.js b/x-pack/legacy/plugins/rollup/public/crud_app/services/documentation_links.js index 7616d8bc179c0..ce42b26cc3e86 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/services/documentation_links.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/services/documentation_links.js @@ -4,16 +4,21 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } from 'ui/documentation_links'; +let esBase = ''; +let xPackBase = ''; -const esBase = `${ELASTIC_WEBSITE_URL}guide/en/elasticsearch/reference/${DOC_LINK_VERSION}`; -const xPackBase = `${ELASTIC_WEBSITE_URL}guide/en/x-pack/${DOC_LINK_VERSION}`; +export function setEsBaseAndXPackBase(elasticWebsiteUrl, docLinksVersion) { + esBase = `${elasticWebsiteUrl}guide/en/elasticsearch/reference/${docLinksVersion}`; + xPackBase = `${elasticWebsiteUrl}guide/en/x-pack/${docLinksVersion}`; +} -export const logisticalDetailsUrl = `${esBase}/rollup-job-config.html#_logistical_details`; -export const dateHistogramDetailsUrl = `${esBase}/rollup-job-config.html#_date_histogram_2`; -export const termsDetailsUrl = `${esBase}/rollup-job-config.html#_terms_2`; -export const histogramDetailsUrl = `${esBase}/rollup-job-config.html#_histogram_2`; -export const metricsDetailsUrl = `${esBase}/rollup-job-config.html#rollup-metrics-config`; +export const getLogisticalDetailsUrl = () => `${esBase}/rollup-job-config.html#_logistical_details`; +export const getDateHistogramDetailsUrl = () => + `${esBase}/rollup-job-config.html#_date_histogram_2`; +export const getTermsDetailsUrl = () => `${esBase}/rollup-job-config.html#_terms_2`; +export const getHistogramDetailsUrl = () => `${esBase}/rollup-job-config.html#_histogram_2`; +export const getMetricsDetailsUrl = () => `${esBase}/rollup-job-config.html#rollup-metrics-config`; -export const dateHistogramAggregationUrl = `${esBase}/search-aggregations-bucket-datehistogram-aggregation.html`; -export const cronUrl = `${xPackBase}/trigger-schedule.html#_cron_expressions`; +export const getDateHistogramAggregationUrl = () => + `${esBase}/search-aggregations-bucket-datehistogram-aggregation.html`; +export const getCronUrl = () => `${xPackBase}/trigger-schedule.html#_cron_expressions`; diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/services/http_provider.js b/x-pack/legacy/plugins/rollup/public/crud_app/services/http_provider.ts similarity index 61% rename from x-pack/legacy/plugins/rollup/public/crud_app/services/http_provider.js rename to x-pack/legacy/plugins/rollup/public/crud_app/services/http_provider.ts index 835a7bdc09d86..dd84328084d05 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/services/http_provider.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/services/http_provider.ts @@ -4,14 +4,17 @@ * you may not use this file except in compliance with the Elastic License. */ -// This is an Angular service, which is why we use this provider pattern to access it within -// our React app. -let _http; +import { HttpStart } from 'src/core/public'; -export function setHttp(http) { +let _http: HttpStart | null = null; + +export function setHttp(http: HttpStart) { _http = http; } export function getHttp() { + if (!_http) { + throw new Error('Rollup http is not defined'); + } return _http; } diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/services/index.js b/x-pack/legacy/plugins/rollup/public/crud_app/services/index.js index 74ed8d8c325c0..790770b9b6a9f 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/services/index.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/services/index.js @@ -11,13 +11,14 @@ export { showApiError, showApiWarning } from './api_errors'; export { listBreadcrumb, createBreadcrumb } from './breadcrumbs'; export { - logisticalDetailsUrl, - dateHistogramDetailsUrl, - dateHistogramAggregationUrl, - termsDetailsUrl, - histogramDetailsUrl, - metricsDetailsUrl, - cronUrl, + setEsBaseAndXPackBase, + getLogisticalDetailsUrl, + getDateHistogramDetailsUrl, + getDateHistogramAggregationUrl, + getTermsDetailsUrl, + getHistogramDetailsUrl, + getMetricsDetailsUrl, + getCronUrl, } from './documentation_links'; export { filterItems } from './filter_items'; diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/create_job.js b/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/create_job.js index 163860b7f24c6..c85b4c55f665e 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/create_job.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/create_job.js @@ -5,7 +5,6 @@ */ import { i18n } from '@kbn/i18n'; -import { fatalError } from 'ui/notify'; import { CRUD_APP_BASE_PATH } from '../../constants'; import { @@ -24,6 +23,8 @@ import { CLEAR_CREATE_JOB_ERRORS, } from '../action_types'; +import { getFatalErrors } from '../../../kibana_services'; + export const createJob = jobConfig => async dispatch => { dispatch({ type: CREATE_JOB_START, @@ -39,12 +40,13 @@ export const createJob = jobConfig => async dispatch => { ]); } catch (error) { if (error) { - const { statusCode, data } = error; + const { body } = error; + const statusCode = error.statusCode || (body && body.statusCode); - // Expect an error in the shape provided by Angular's $http service. - if (data) { + // Expect an error in the shape provided by http service. + if (body) { // Some errors have statusCode directly available but some are under a data property. - if ((statusCode || (data && data.statusCode)) === 409) { + if (statusCode === 409) { return dispatch({ type: CREATE_JOB_FAILURE, payload: { @@ -67,9 +69,9 @@ export const createJob = jobConfig => async dispatch => { error: { message: i18n.translate('xpack.rollupJobs.createAction.failedDefaultErrorMessage', { defaultMessage: 'Request failed with a {statusCode} error. {message}', - values: { statusCode, message: data.message }, + values: { statusCode, message: body.message }, }), - cause: data.cause, + cause: body.cause, }, }, }); @@ -78,7 +80,7 @@ export const createJob = jobConfig => async dispatch => { // This error isn't an HTTP error, so let the fatal error screen tell the user something // unexpected happened. - return fatalError( + return getFatalErrors().add( error, i18n.translate('xpack.rollupJobs.createAction.errorTitle', { defaultMessage: 'Error creating rollup job', @@ -86,7 +88,7 @@ export const createJob = jobConfig => async dispatch => { ); } - const deserializedJob = deserializeJob(newJob.data); + const deserializedJob = deserializeJob(newJob); dispatch({ type: CREATE_JOB_SUCCESS, diff --git a/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/delete_jobs.js b/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/delete_jobs.js index d700ec69839be..0cfc8c24d46e9 100644 --- a/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/delete_jobs.js +++ b/x-pack/legacy/plugins/rollup/public/crud_app/store/actions/delete_jobs.js @@ -5,7 +5,6 @@ */ import { i18n } from '@kbn/i18n'; -import { toastNotifications } from 'ui/notify'; import { deleteJobs as sendDeleteJobsRequest, @@ -19,6 +18,8 @@ import { UPDATE_JOB_START, UPDATE_JOB_SUCCESS, UPDATE_JOB_FAILURE } from '../act import { refreshJobs } from './refresh_jobs'; import { closeDetailPanel } from './detail_panel'; +import { getNotifications } from '../../../kibana_services'; + export const deleteJobs = jobIds => async (dispatch, getState) => { dispatch({ type: UPDATE_JOB_START, @@ -40,14 +41,14 @@ export const deleteJobs = jobIds => async (dispatch, getState) => { } if (jobIds.length === 1) { - toastNotifications.addSuccess( + getNotifications().toasts.addSuccess( i18n.translate('xpack.rollupJobs.deleteAction.successSingleNotificationTitle', { defaultMessage: `Rollup job '{jobId}' was deleted`, values: { jobId: jobIds[0] }, }) ); } else { - toastNotifications.addSuccess( + getNotifications().toasts.addSuccess( i18n.translate('xpack.rollupJobs.deleteAction.successMultipleNotificationTitle', { defaultMessage: '{count} rollup jobs were deleted', values: { count: jobIds.length }, diff --git a/x-pack/legacy/plugins/rollup/public/extend_index_management/index.js b/x-pack/legacy/plugins/rollup/public/extend_index_management/index.ts similarity index 76% rename from x-pack/legacy/plugins/rollup/public/extend_index_management/index.js rename to x-pack/legacy/plugins/rollup/public/extend_index_management/index.ts index 5e14d3eabc9a6..1a34811901bbe 100644 --- a/x-pack/legacy/plugins/rollup/public/extend_index_management/index.js +++ b/x-pack/legacy/plugins/rollup/public/extend_index_management/index.ts @@ -4,15 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ import { i18n } from '@kbn/i18n'; -import { - addToggleExtension, - addBadgeExtension, -} from '../../../index_management/public/index_management_extensions'; import { get } from 'lodash'; const propertyPath = 'isRollupIndex'; export const rollupToggleExtension = { - matchIndex: index => { + matchIndex: (index: { isRollupIndex: boolean }) => { return get(index, propertyPath); }, label: i18n.translate('xpack.rollupJobs.indexMgmtToggle.toggleLabel', { @@ -20,8 +16,9 @@ export const rollupToggleExtension = { }), name: 'rollupToggle', }; + export const rollupBadgeExtension = { - matchIndex: index => { + matchIndex: (index: { isRollupIndex: boolean }) => { return get(index, propertyPath); }, label: i18n.translate('xpack.rollupJobs.indexMgmtBadge.rollupLabel', { @@ -30,6 +27,3 @@ export const rollupBadgeExtension = { color: 'secondary', filterExpression: 'isRollupIndex:true', }; - -addBadgeExtension(rollupBadgeExtension); -addToggleExtension(rollupToggleExtension); diff --git a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/index.js b/x-pack/legacy/plugins/rollup/public/index_pattern_creation/index.js deleted file mode 100644 index 1add469e073bd..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import chrome from 'ui/chrome'; - -import { initIndexPatternCreation } from './register'; -import { CONFIG_ROLLUPS } from '../../common'; - -const uiSettings = chrome.getUiSettingsClient(); -const isRollupIndexPatternsEnabled = uiSettings.get(CONFIG_ROLLUPS); - -if (isRollupIndexPatternsEnabled) { - initIndexPatternCreation(); -} diff --git a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/register.js b/x-pack/legacy/plugins/rollup/public/index_pattern_creation/register.js deleted file mode 100644 index 9a3aed548dcc9..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/register.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { setup as managementSetup } from '../../../../../../src/legacy/core_plugins/management/public/legacy'; -import { RollupIndexPatternCreationConfig } from './rollup_index_pattern_creation_config'; - -export function initIndexPatternCreation() { - managementSetup.indexPattern.creation.add(RollupIndexPatternCreationConfig); -} diff --git a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js b/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js index 07f2a674decc5..82a4c5a888594 100644 --- a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js +++ b/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js @@ -6,10 +6,8 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { npSetup } from 'ui/new_platform'; import { RollupPrompt } from './components/rollup_prompt'; -import { setHttpClient, getRollupIndices } from '../services/api'; import { IndexPatternCreationConfig } from '../../../../../../src/legacy/core_plugins/management/public'; const rollupIndexPatternTypeName = i18n.translate( @@ -54,7 +52,6 @@ export class RollupIndexPatternCreationConfig extends IndexPatternCreationConfig ...options, }); - setHttpClient(this.httpClient); this.rollupIndex = null; this.rollupJobs = []; this.rollupIndicesCapabilities = {}; @@ -67,9 +64,10 @@ export class RollupIndexPatternCreationConfig extends IndexPatternCreationConfig // This is a hack intended to prevent the getRollupIndices() request from being sent if // we're on /logout. There is a race condition that can arise on that page, whereby this // request resolves after the logout request resolves, and un-clears the session ID. - const isAnonymous = npSetup.core.http.anonymousPaths.isAnonymous(window.location.pathname); + const isAnonymous = this.httpClient.anonymousPaths.isAnonymous(window.location.pathname); if (!isAnonymous) { - this.rollupIndicesCapabilities = await getRollupIndices(); + const response = await this.httpClient.get('/api/rollup/indices'); + this.rollupIndicesCapabilities = response || {}; } this.rollupIndices = Object.keys(this.rollupIndicesCapabilities); diff --git a/x-pack/legacy/plugins/rollup/public/index_pattern_list/index.js b/x-pack/legacy/plugins/rollup/public/index_pattern_list/index.js deleted file mode 100644 index 63a3149faaadb..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/index_pattern_list/index.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import chrome from 'ui/chrome'; -import { initIndexPatternList } from './register'; -import { CONFIG_ROLLUPS } from '../../common'; - -const uiSettings = chrome.getUiSettingsClient(); -const isRollupIndexPatternsEnabled = uiSettings.get(CONFIG_ROLLUPS); - -if (isRollupIndexPatternsEnabled) { - initIndexPatternList(); -} diff --git a/x-pack/legacy/plugins/rollup/public/index_pattern_list/register.js b/x-pack/legacy/plugins/rollup/public/index_pattern_list/register.js deleted file mode 100644 index 173c28826436b..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/index_pattern_list/register.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { setup as managementSetup } from '../../../../../../src/legacy/core_plugins/management/public/legacy'; -import { RollupIndexPatternListConfig } from './rollup_index_pattern_list_config'; - -export function initIndexPatternList() { - managementSetup.indexPattern.list.add(RollupIndexPatternListConfig); -} diff --git a/x-pack/legacy/plugins/rollup/public/kibana_services.ts b/x-pack/legacy/plugins/rollup/public/kibana_services.ts new file mode 100644 index 0000000000000..335eeb90282ca --- /dev/null +++ b/x-pack/legacy/plugins/rollup/public/kibana_services.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { NotificationsStart, FatalErrorsSetup } from 'src/core/public'; + +let notifications: NotificationsStart | null = null; +let fatalErrors: FatalErrorsSetup | null = null; + +export function getNotifications() { + if (!notifications) { + throw new Error('Rollup notifications is not defined'); + } + return notifications; +} +export function setNotifications(newNotifications: NotificationsStart) { + notifications = newNotifications; +} + +export function getFatalErrors() { + if (!fatalErrors) { + throw new Error('Rollup fatalErrors is not defined'); + } + return fatalErrors; +} +export function setFatalErrors(newFatalErrors: FatalErrorsSetup) { + fatalErrors = newFatalErrors; +} diff --git a/x-pack/legacy/plugins/rollup/public/legacy.ts b/x-pack/legacy/plugins/rollup/public/legacy.ts new file mode 100644 index 0000000000000..a2738372ff346 --- /dev/null +++ b/x-pack/legacy/plugins/rollup/public/legacy.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { npSetup, npStart } from 'ui/new_platform'; +import { editorConfigProviders } from 'ui/vis/config'; +import { aggTypeFilters } from 'ui/agg_types/filter'; +import { aggTypeFieldFilters } from 'ui/agg_types/param_types/filter'; +import { addSearchStrategy } from '../../../../../src/plugins/data/public'; +import { RollupPlugin } from './plugin'; +import { setup as management } from '../../../../../src/legacy/core_plugins/management/public/legacy'; +import { addBadgeExtension, addToggleExtension } from '../../index_management/public'; + +const plugin = new RollupPlugin(); + +export const setup = plugin.setup(npSetup.core, { + ...npSetup.plugins, + __LEGACY: { + aggTypeFilters, + aggTypeFieldFilters, + editorConfigProviders, + addSearchStrategy, + addBadgeExtension, + addToggleExtension, + managementLegacy: management, + }, +}); +export const start = plugin.start(npStart.core); diff --git a/x-pack/legacy/plugins/rollup/public/legacy_imports.ts b/x-pack/legacy/plugins/rollup/public/legacy_imports.ts new file mode 100644 index 0000000000000..981f97963591e --- /dev/null +++ b/x-pack/legacy/plugins/rollup/public/legacy_imports.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +// @ts-ignore +export { findIllegalCharactersInIndexName, INDEX_ILLEGAL_CHARACTERS_VISIBLE } from 'ui/indices'; + +export { AggTypeFilters } from 'ui/agg_types/filter'; +export { AggTypeFieldFilters } from 'ui/agg_types/param_types/filter'; +export { EditorConfigProviderRegistry } from 'ui/vis/config'; diff --git a/x-pack/legacy/plugins/rollup/public/plugin.ts b/x-pack/legacy/plugins/rollup/public/plugin.ts new file mode 100644 index 0000000000000..97c03fd1fdfc2 --- /dev/null +++ b/x-pack/legacy/plugins/rollup/public/plugin.ts @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; +import { CoreSetup, CoreStart, Plugin } from 'kibana/public'; +import { + EditorConfigProviderRegistry, + AggTypeFilters, + AggTypeFieldFilters, +} from './legacy_imports'; +import { SearchStrategyProvider } from '../../../../../src/plugins/data/public'; +import { ManagementSetup as ManagementSetupLegacy } from '../../../../../src/legacy/core_plugins/management/public/np_ready'; +import { rollupBadgeExtension, rollupToggleExtension } from './extend_index_management'; +// @ts-ignore +import { RollupIndexPatternCreationConfig } from './index_pattern_creation/rollup_index_pattern_creation_config'; +// @ts-ignore +import { RollupIndexPatternListConfig } from './index_pattern_list/rollup_index_pattern_list_config'; +import { getRollupSearchStrategy } from './search/rollup_search_strategy'; +// @ts-ignore +import { initAggTypeFilter } from './visualize/agg_type_filter'; +// @ts-ignore +import { initAggTypeFieldFilter } from './visualize/agg_type_field_filter'; +// @ts-ignore +import { initEditorConfig } from './visualize/editor_config'; +import { CONFIG_ROLLUPS } from '../common'; +import { + FeatureCatalogueCategory, + HomePublicPluginSetup, +} from '../../../../../src/plugins/home/public'; +// @ts-ignore +import { CRUD_APP_BASE_PATH } from './crud_app/constants'; +import { ManagementSetup } from '../../../../../src/plugins/management/public'; +// @ts-ignore +import { setEsBaseAndXPackBase, setHttp } from './crud_app/services'; +import { setNotifications, setFatalErrors } from './kibana_services'; +import { renderApp } from './application'; + +export interface RollupPluginSetupDependencies { + __LEGACY: { + aggTypeFilters: AggTypeFilters; + aggTypeFieldFilters: AggTypeFieldFilters; + editorConfigProviders: EditorConfigProviderRegistry; + addSearchStrategy: (searchStrategy: SearchStrategyProvider) => void; + managementLegacy: ManagementSetupLegacy; + addBadgeExtension: (badgeExtension: any) => void; + addToggleExtension: (toggleExtension: any) => void; + }; + home?: HomePublicPluginSetup; + management: ManagementSetup; +} + +export class RollupPlugin implements Plugin { + setup( + core: CoreSetup, + { + __LEGACY: { + aggTypeFilters, + aggTypeFieldFilters, + editorConfigProviders, + addSearchStrategy, + managementLegacy, + addBadgeExtension, + addToggleExtension, + }, + home, + management, + }: RollupPluginSetupDependencies + ) { + setFatalErrors(core.fatalErrors); + addBadgeExtension(rollupBadgeExtension); + addToggleExtension(rollupToggleExtension); + + const isRollupIndexPatternsEnabled = core.uiSettings.get(CONFIG_ROLLUPS); + + if (isRollupIndexPatternsEnabled) { + managementLegacy.indexPattern.creation.add(RollupIndexPatternCreationConfig); + managementLegacy.indexPattern.list.add(RollupIndexPatternListConfig); + addSearchStrategy(getRollupSearchStrategy(core.http.fetch)); + initAggTypeFilter(aggTypeFilters); + initAggTypeFieldFilter(aggTypeFieldFilters); + initEditorConfig(editorConfigProviders); + } + + if (home) { + home.featureCatalogue.register({ + id: 'rollup_jobs', + title: 'Rollups', + description: i18n.translate('xpack.rollupJobs.featureCatalogueDescription', { + defaultMessage: + 'Summarize and store historical data in a smaller index for future analysis.', + }), + icon: 'indexRollupApp', + path: `#${CRUD_APP_BASE_PATH}/job_list`, + showOnHomePage: true, + category: FeatureCatalogueCategory.ADMIN, + }); + } + + const esSection = management.sections.getSection('elasticsearch'); + if (esSection) { + esSection.registerApp({ + id: 'rollup_jobs', + title: i18n.translate('xpack.rollupJobs.appTitle', { defaultMessage: 'Rollup Jobs' }), + order: 3, + mount(params) { + params.setBreadcrumbs([ + { + text: i18n.translate('xpack.rollupJobs.breadcrumbsTitle', { + defaultMessage: 'Rollup Jobs', + }), + }, + ]); + + return renderApp(core, params); + }, + }); + } + } + + start(core: CoreStart) { + setHttp(core.http); + setNotifications(core.notifications); + setEsBaseAndXPackBase(core.docLinks.ELASTIC_WEBSITE_URL, core.docLinks.DOC_LINK_VERSION); + } +} diff --git a/x-pack/legacy/plugins/rollup/public/search/index.js b/x-pack/legacy/plugins/rollup/public/search/index.js deleted file mode 100644 index e76ba4817d72c..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/search/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import chrome from 'ui/chrome'; - -import { initSearch } from './register'; -import { CONFIG_ROLLUPS } from '../../common'; - -const uiSettings = chrome.getUiSettingsClient(); -const isRollupIndexPatternsEnabled = uiSettings.get(CONFIG_ROLLUPS); - -if (isRollupIndexPatternsEnabled) { - initSearch(); -} diff --git a/x-pack/legacy/plugins/rollup/public/search/register.js b/x-pack/legacy/plugins/rollup/public/search/register.js deleted file mode 100644 index 05db100088e8a..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/search/register.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { addSearchStrategy } from '../../../../../../src/plugins/data/public'; -import { rollupSearchStrategy } from './rollup_search_strategy'; - -export function initSearch() { - addSearchStrategy(rollupSearchStrategy); -} diff --git a/x-pack/legacy/plugins/rollup/public/search/rollup_search_strategy.js b/x-pack/legacy/plugins/rollup/public/search/rollup_search_strategy.ts similarity index 74% rename from x-pack/legacy/plugins/rollup/public/search/rollup_search_strategy.js rename to x-pack/legacy/plugins/rollup/public/search/rollup_search_strategy.ts index 18e72cdf0fd3d..4709c0aa498f8 100644 --- a/x-pack/legacy/plugins/rollup/public/search/rollup_search_strategy.js +++ b/x-pack/legacy/plugins/rollup/public/search/rollup_search_strategy.ts @@ -4,10 +4,17 @@ * you may not use this file except in compliance with the Elastic License. */ -import { kfetch } from 'ui/kfetch'; -import { SearchError, getSearchErrorType } from '../../../../../../src/plugins/data/public'; +import { HttpSetup } from 'src/core/public'; +import { + SearchError, + getSearchErrorType, + IIndexPattern, + SearchStrategyProvider, + SearchResponse, + SearchRequest, +} from '../../../../../../src/plugins/data/public'; -function serializeFetchParams(searchRequests) { +function serializeFetchParams(searchRequests: SearchRequest[]) { return JSON.stringify( searchRequests.map(searchRequestWithFetchParams => { const indexPattern = @@ -17,7 +24,7 @@ function serializeFetchParams(searchRequests) { } = searchRequestWithFetchParams; const query = { - size: size, + size, aggregations: aggs, query: _query, }; @@ -30,7 +37,7 @@ function serializeFetchParams(searchRequests) { // Rollup search always returns 0 hits, but visualizations expect search responses // to return hits > 0, otherwise they do not render. We fake the number of hits here // by counting the number of aggregation buckets/values returned by rollup search. -function shimHitsInFetchResponse(response) { +function shimHitsInFetchResponse(response: SearchResponse[]) { return response.map(result => { const buckets = result.aggregations ? Object.keys(result.aggregations).reduce((allBuckets, agg) => { @@ -51,17 +58,16 @@ function shimHitsInFetchResponse(response) { }); } -export const rollupSearchStrategy = { +export const getRollupSearchStrategy = (fetch: HttpSetup['fetch']): SearchStrategyProvider => ({ id: 'rollup', - search: ({ searchRequests, Promise }) => { + search: ({ searchRequests }) => { // Serialize the fetch params into a format suitable for the body of an ES query. const serializedFetchParams = serializeFetchParams(searchRequests); const controller = new AbortController(); - const promise = kfetch({ + const promise = fetch('../api/rollup/search', { signal: controller.signal, - pathname: '../api/rollup/search', method: 'POST', body: serializedFetchParams, }); @@ -69,17 +75,17 @@ export const rollupSearchStrategy = { return { searching: promise.then(shimHitsInFetchResponse).catch(error => { const { - body: { statusText, error: title, message }, + body: { statusCode, error: title, message }, res: { url }, } = error; - // Format kfetch error as a SearchError. + // Format fetch error as a SearchError. const searchError = new SearchError({ - status: statusText, + status: statusCode, title, message: `Rollup search error: ${message}`, path: url, - type: getSearchErrorType({ message }), + type: getSearchErrorType({ message }) || '', }); return Promise.reject(searchError); @@ -88,11 +94,11 @@ export const rollupSearchStrategy = { }; }, - isViable: indexPattern => { + isViable: (indexPattern: IIndexPattern) => { if (!indexPattern) { return false; } return indexPattern.type === 'rollup'; }, -}; +}); diff --git a/x-pack/legacy/plugins/rollup/public/services/api.js b/x-pack/legacy/plugins/rollup/public/services/api.js deleted file mode 100644 index ae9e8756c7efc..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/services/api.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -let httpClient; -export const setHttpClient = client => { - httpClient = client; -}; - -export async function getRollupIndices() { - const response = await httpClient.get('/api/rollup/indices'); - return response || {}; -} diff --git a/x-pack/legacy/plugins/rollup/public/visualize/agg_type_field_filter.js b/x-pack/legacy/plugins/rollup/public/visualize/agg_type_field_filter.js index 9d19dff648667..6f44e0ef90efd 100644 --- a/x-pack/legacy/plugins/rollup/public/visualize/agg_type_field_filter.js +++ b/x-pack/legacy/plugins/rollup/public/visualize/agg_type_field_filter.js @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { aggTypeFieldFilters } from 'ui/agg_types/param_types/filter'; - -export function initAggTypeFieldFilter() { +export function initAggTypeFieldFilter(aggTypeFieldFilters) { /** * If rollup index pattern, check its capabilities * and limit available fields for a given aggType based on that. diff --git a/x-pack/legacy/plugins/rollup/public/visualize/agg_type_filter.js b/x-pack/legacy/plugins/rollup/public/visualize/agg_type_filter.js index 75b11dac06cf5..5f9fab3061a19 100644 --- a/x-pack/legacy/plugins/rollup/public/visualize/agg_type_filter.js +++ b/x-pack/legacy/plugins/rollup/public/visualize/agg_type_filter.js @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { aggTypeFilters } from 'ui/agg_types/filter'; - -export function initAggTypeFilter() { +export function initAggTypeFilter(aggTypeFilters) { /** * If rollup index pattern, check its capabilities * and limit available aggregations based on that. diff --git a/x-pack/legacy/plugins/rollup/public/visualize/editor_config.js b/x-pack/legacy/plugins/rollup/public/visualize/editor_config.js index 8f5072e8a9866..5c1eb7c8ee3b7 100644 --- a/x-pack/legacy/plugins/rollup/public/visualize/editor_config.js +++ b/x-pack/legacy/plugins/rollup/public/visualize/editor_config.js @@ -5,9 +5,8 @@ */ import { i18n } from '@kbn/i18n'; -import { editorConfigProviders } from 'ui/vis/config'; -export function initEditorConfig() { +export function initEditorConfig(editorConfigProviders) { // Limit agg params based on rollup capabilities editorConfigProviders.register((indexPattern, aggConfig) => { if (indexPattern.type !== 'rollup') { diff --git a/x-pack/legacy/plugins/rollup/public/visualize/index.js b/x-pack/legacy/plugins/rollup/public/visualize/index.js deleted file mode 100644 index e5a9c63c91a92..0000000000000 --- a/x-pack/legacy/plugins/rollup/public/visualize/index.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import chrome from 'ui/chrome'; - -import { initAggTypeFilter } from './agg_type_filter'; -import { initAggTypeFieldFilter } from './agg_type_field_filter'; -import { initEditorConfig } from './editor_config'; -import { CONFIG_ROLLUPS } from '../../common'; - -const uiSettings = chrome.getUiSettingsClient(); -const isRollupIndexPatternsEnabled = uiSettings.get(CONFIG_ROLLUPS); - -if (isRollupIndexPatternsEnabled) { - initAggTypeFilter(); - initAggTypeFieldFilter(); - initEditorConfig(); -} From 952b61e049f803acd20c8bbedec5d35aa3f384ff Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 30 Jan 2020 10:51:02 +0100 Subject: [PATCH 67/72] [Console] Move out of legacy + migrate server side to New Platform (#55690) * Initial move of public and setup of server skeleton * Fix public paths and types * Use new usage stats dependency directly in tracker also mark as an optional dependency * WiP on getting server side working * Restore proxy route behaviour for base case, still need to test custom proxy and SSL * Add new type and lib files * Clean up legacy start up code and add comment about issue in kibana.yml config for console * Move console_extensions to new platform and introduce ConsoleSetup API for extending autocomplete Add TODO regarding exposing legacy ES config * Re-introduce injected elasticsearch variable and use it in public * Don't pass stateSetter prop through to checkbox * Refactor of proxy route (split into separate files). Easier testing for now. Refactor file name of request.ts -> proxy_request.ts. This is consistent with the exported function now Started fixing server side tests for the proxy route - Migrated away from sinon - Completed the body.js -> body.test.ts. Still have to do the rest * headers.js test -> headers.test.ts and moved some of the proxy route mocking logic to a common space * Finish migration of rest of proxy route test away from hapi Add test for custom route validation * Bring console application in line with https://github.com/elastic/kibana/blob/master/src/core/CONVENTIONS.md#applications Change log from info level to debug level for console_extensions plugin * Update i18nrc file for console * Add setHeaders when passing back error response Co-authored-by: Elastic Machine --- .github/CODEOWNERS | 4 +- .i18nrc.json | 2 +- .../server/http/router/response_adapter.ts | 13 +- .../core_plugins/console/__tests__/index.js | 75 ------ src/legacy/core_plugins/console/index.ts | 187 --------------- src/legacy/core_plugins/console/package.json | 8 - .../core_plugins/console/public/legacy.ts | 53 ----- .../server/__tests__/proxy_route/headers.js | 96 -------- .../server/__tests__/proxy_route/params.js | 170 -------------- .../__tests__/proxy_route/query_string.js | 137 ----------- .../console/server/proxy_route.ts | 171 -------------- .../core_plugins/console_legacy/index.ts | 51 ++++ .../core_plugins/console_legacy/package.json | 4 + .../public}/styles/_app.scss | 0 .../public}/styles/components/_help.scss | 0 .../public}/styles/components/_history.scss | 0 .../public}/styles/components/_index.scss | 0 .../public}/styles/index.scss | 0 .../console/common/text_object.ts | 0 src/plugins/console/common/types/index.ts | 21 ++ .../console/common/types/models.ts} | 2 +- .../console/common/types/plugin_config.ts | 22 ++ .../public => plugins/console}/kibana.json | 2 +- .../application/components/console_menu.tsx | 0 .../components/editor_content_spinner.tsx | 0 .../application/components/editor_example.tsx | 0 .../application/components/help_panel.tsx | 0 .../public}/application/components/index.ts | 0 .../application/components/settings_modal.tsx | 5 +- .../something_went_wrong_callout.tsx | 0 .../application/components/top_nav_menu.tsx | 0 .../application/components/welcome_panel.tsx | 0 .../application/constants/help_example.txt | 0 .../console_history/console_history.tsx | 0 .../console_history/history_viewer.tsx | 0 .../containers/console_history/index.ts | 0 .../application/containers/editor/editor.tsx | 2 +- .../application/containers/editor/index.ts | 0 .../console_editor/apply_editor_settings.ts | 0 .../console_editor/editor.test.mock.tsx | 0 .../legacy/console_editor/editor.test.tsx | 2 +- .../editor/legacy/console_editor/editor.tsx | 0 .../legacy/console_editor/editor_output.tsx | 0 .../editor/legacy/console_editor/index.ts | 0 .../console_editor/keyboard_shortcuts.ts | 0 .../editor/legacy/console_menu_actions.ts | 0 .../containers/editor/legacy/index.ts | 0 .../subscribe_console_resize_checker.ts | 3 +- .../legacy/use_ui_ace_keyboard_mode.tsx | 0 .../public}/application/containers/index.ts | 0 .../containers/main/get_top_nav.ts | 0 .../application/containers/main/index.ts | 0 .../application/containers/main/main.tsx | 0 .../application/containers/settings.tsx | 0 .../contexts/create_use_context.ts | 0 .../editor_context/editor_context.tsx | 0 .../editor_context/editor_registry.ts | 0 .../contexts/editor_context/index.ts | 0 .../public}/application/contexts/index.ts | 0 .../application/contexts/request_context.tsx | 0 .../application/contexts/services_context.tsx | 2 +- .../public}/application/factories/index.ts | 0 .../application/factories/token_iterator.ts | 0 .../public}/application/hooks/index.ts | 0 .../hooks/use_data_init/data_migration.ts | 2 +- .../application/hooks/use_data_init/index.ts | 0 .../hooks/use_data_init/use_data_init.ts | 0 .../use_restore_request_from_history/index.ts | 0 .../restore_request_from_history.ts | 0 .../use_restore_request_from_history.ts | 0 .../hooks/use_save_current_text_object.ts | 0 .../use_send_current_request_to_es/index.ts | 0 .../send_request_to_es.ts | 0 .../use_send_current_request_to_es/track.ts | 0 .../use_send_current_request_to_es.ts | 0 .../application/hooks/use_set_input_editor.ts | 0 .../console/public}/application/index.tsx | 26 ++- .../console/public}/application/logo.svg | 0 .../public}/application/models/index.ts | 0 .../__tests__/input_tokenization.test.js | 0 .../__tests__/output_tokenization.test.js | 0 .../models/legacy_core_editor/create.ts | 0 .../legacy_core_editor/create_readonly.ts | 0 .../models/legacy_core_editor/index.ts | 0 .../legacy_core_editor.test.mocks.ts | 0 .../legacy_core_editor/legacy_core_editor.ts | 0 .../mode/elasticsearch_sql_highlight_rules.ts | 0 .../models/legacy_core_editor/mode/input.js | 0 .../mode/input_highlight_rules.js | 0 .../models/legacy_core_editor/mode/output.js | 0 .../mode/output_highlight_rules.js | 0 .../models/legacy_core_editor/mode/script.js | 0 .../mode/script_highlight_rules.js | 0 .../legacy_core_editor/mode/worker/index.js | 0 .../legacy_core_editor/mode/worker/worker.js | 0 .../mode/x_json_highlight_rules.js | 0 .../models/legacy_core_editor/smart_resize.ts | 0 .../legacy_core_editor/theme_sense_dark.js | 0 .../sense_editor/__tests__/editor_input1.txt | 0 .../__tests__/integration.test.js | 0 .../__tests__/sense_editor.test.js | 0 .../application/models/sense_editor/create.ts | 0 .../application/models/sense_editor/curl.ts | 0 .../application/models/sense_editor/index.ts | 0 .../sense_editor/sense_editor.test.mocks.ts | 0 .../models/sense_editor/sense_editor.ts | 0 .../public}/application/stores/editor.ts | 2 +- .../public}/application/stores/request.ts | 0 .../console/public}/index.ts | 6 +- .../public}/lib/ace_token_provider/index.ts | 0 .../ace_token_provider/token_provider.test.ts | 0 .../lib/ace_token_provider/token_provider.ts | 0 .../__tests__/url_autocomplete.test.js | 0 .../autocomplete/__tests__/url_params.test.js | 0 .../public}/lib/autocomplete/autocomplete.ts | 0 .../lib/autocomplete/body_completer.js | 0 .../components/accept_endpoint_component.js | 0 .../components/autocomplete_component.js | 0 .../components/conditional_proxy.js | 0 .../components/constant_component.js | 0 .../field_autocomplete_component.js | 0 .../components/full_request_component.ts | 0 .../components/global_only_component.js | 0 .../components/id_autocomplete_component.js | 0 .../lib/autocomplete/components/index.js | 0 .../index_autocomplete_component.js | 0 .../autocomplete/components/list_component.js | 0 .../components/object_component.js | 0 .../components/shared_component.js | 0 .../components/simple_param_component.js | 0 .../template_autocomplete_component.js | 0 .../components/type_autocomplete_component.js | 0 .../components/url_pattern_matcher.js | 0 .../username_autocomplete_component.js | 0 .../public}/lib/autocomplete/engine.js | 0 .../get_endpoint_from_position.ts | 0 .../public}/lib/autocomplete/url_params.js | 0 .../__tests__/curl_parsing.test.js | 0 .../curl_parsing/__tests__/curl_parsing.txt | 0 .../console/public}/lib/curl_parsing/curl.js | 0 .../lib/es/__tests__/content_type.test.js | 0 .../console/public}/lib/es/es.js | 0 .../public}/lib/kb/__tests__/kb.test.js | 0 .../console/public}/lib/kb/api.js | 0 .../console/public}/lib/kb/index.js | 0 .../console/public}/lib/kb/kb.js | 0 .../lib/local_storage_object_client/create.ts | 4 +- .../lib/local_storage_object_client/index.ts | 0 .../local_storage_object_client.ts | 2 +- .../lib/mappings/__tests__/mapping.test.js | 0 .../console/public}/lib/mappings/mappings.js | 0 .../console/public}/lib/row_parser.ts | 0 .../public}/lib/token_iterator/index.ts | 0 .../lib/token_iterator/token_iterator.test.ts | 0 .../lib/token_iterator/token_iterator.ts | 0 .../public}/lib/utils/__tests__/utils.test.js | 0 .../__tests__/utils_string_collapsing.txt | 0 .../__tests__/utils_string_expanding.txt | 0 .../console/public}/lib/utils/utils.ts | 0 .../console/public}/plugin.ts | 53 +++-- .../console/public}/services/history.ts | 0 .../console/public}/services/index.ts | 0 .../console/public}/services/settings.ts | 0 .../console/public}/services/storage.ts | 0 .../console/public}/services/tracker.ts | 19 +- .../console/public}/types/common.ts | 0 .../console/public}/types/core_editor.ts | 0 .../console/public}/types/index.ts | 1 + .../public/types/plugin_dependencies.ts | 27 +++ .../console/public}/types/token.ts | 0 .../console/public}/types/tokens_provider.ts | 0 .../__tests__/elasticsearch_proxy_config.js | 2 +- .../console/server/__tests__/proxy_config.js | 2 +- .../__tests__/proxy_config_collection.js | 2 +- .../__tests__/proxy_route/body.test.ts} | 64 +++--- .../__tests__/proxy_route/headers.test.ts | 89 +++++++ .../server/__tests__/proxy_route/mocks.ts | 44 ++++ .../__tests__/proxy_route/params.test.ts | 87 +++++++ .../proxy_route/query_string.test.ts | 76 ++++++ .../proxy_route/route_validation.test.ts | 52 +++++ .../server/__tests__/proxy_route/stubs.ts} | 36 ++- .../console/server/__tests__/set_headers.js | 2 +- .../server/__tests__/wildcard_matcher.js | 2 +- src/plugins/console/server/config.ts | 55 +++++ src/plugins/console/server/index.ts | 31 +++ .../server/lib}/elasticsearch_proxy_config.ts | 3 +- .../console/server/lib/index.ts} | 5 +- .../console/server/lib/proxy_config.ts} | 30 ++- .../server/lib/proxy_config_collection.ts} | 14 +- .../console/server/lib/proxy_request.test.ts} | 4 +- .../console/server/lib/proxy_request.ts} | 2 +- .../console/server/lib/set_headers.ts} | 2 +- .../server/lib/spec_definitions}/api.js | 0 .../server/lib/spec_definitions}/es_6_0.js | 0 .../spec_definitions}/es_6_0/aggregations.js | 0 .../lib/spec_definitions}/es_6_0/aliases.js | 0 .../lib/spec_definitions}/es_6_0/document.js | 0 .../lib/spec_definitions}/es_6_0/filter.js | 0 .../lib/spec_definitions}/es_6_0/globals.js | 0 .../lib/spec_definitions}/es_6_0/ingest.js | 0 .../lib/spec_definitions}/es_6_0/mappings.js | 0 .../lib/spec_definitions}/es_6_0/query/dsl.js | 0 .../spec_definitions}/es_6_0/query/index.js | 0 .../es_6_0/query/templates.js | 0 .../lib/spec_definitions}/es_6_0/reindex.js | 0 .../lib/spec_definitions}/es_6_0/search.js | 0 .../server/lib/spec_definitions/index.d.ts | 24 ++ .../server/lib/spec_definitions/index.js | 24 ++ .../server/lib/spec_definitions}/server.js | 4 +- .../lib/spec_definitions}/server.test.js | 0 .../lib/spec_definitions}/spec/.eslintrc | 0 .../spec/generated/_common.json | 0 .../spec/generated/bulk.json | 0 .../spec/generated/cat.aliases.json | 0 .../spec/generated/cat.allocation.json | 0 .../spec/generated/cat.count.json | 0 .../spec/generated/cat.fielddata.json | 0 .../spec/generated/cat.health.json | 0 .../spec/generated/cat.help.json | 0 .../spec/generated/cat.indices.json | 0 .../spec/generated/cat.master.json | 0 .../spec/generated/cat.nodeattrs.json | 0 .../spec/generated/cat.nodes.json | 0 .../spec/generated/cat.pending_tasks.json | 0 .../spec/generated/cat.plugins.json | 0 .../spec/generated/cat.recovery.json | 0 .../spec/generated/cat.repositories.json | 0 .../spec/generated/cat.segments.json | 0 .../spec/generated/cat.shards.json | 0 .../spec/generated/cat.snapshots.json | 0 .../spec/generated/cat.tasks.json | 0 .../spec/generated/cat.templates.json | 0 .../spec/generated/cat.thread_pool.json | 0 .../spec/generated/clear_scroll.json | 0 .../generated/cluster.allocation_explain.json | 0 .../spec/generated/cluster.get_settings.json | 0 .../spec/generated/cluster.health.json | 0 .../spec/generated/cluster.pending_tasks.json | 0 .../spec/generated/cluster.put_settings.json | 0 .../spec/generated/cluster.remote_info.json | 0 .../spec/generated/cluster.reroute.json | 0 .../spec/generated/cluster.state.json | 0 .../spec/generated/cluster.stats.json | 0 .../spec/generated/count.json | 0 .../spec/generated/create.json | 0 .../spec/generated/delete.json | 0 .../spec/generated/delete_by_query.json | 0 .../generated/delete_by_query_rethrottle.json | 0 .../spec/generated/delete_script.json | 0 .../spec/generated/exists.json | 0 .../spec/generated/exists_source.json | 0 .../spec/generated/explain.json | 0 .../spec/generated/field_caps.json | 0 .../spec_definitions}/spec/generated/get.json | 0 .../spec/generated/get_script.json | 0 .../spec/generated/get_script_context.json | 0 .../spec/generated/get_script_languages.json | 0 .../spec/generated/get_source.json | 0 .../spec/generated/index.json | 0 .../spec/generated/indices.analyze.json | 0 .../spec/generated/indices.clear_cache.json | 0 .../spec/generated/indices.clone.json | 0 .../spec/generated/indices.close.json | 0 .../spec/generated/indices.create.json | 0 .../spec/generated/indices.delete.json | 0 .../spec/generated/indices.delete_alias.json | 0 .../generated/indices.delete_template.json | 0 .../spec/generated/indices.exists.json | 0 .../spec/generated/indices.exists_alias.json | 0 .../generated/indices.exists_template.json | 0 .../spec/generated/indices.exists_type.json | 0 .../spec/generated/indices.flush.json | 0 .../spec/generated/indices.flush_synced.json | 0 .../spec/generated/indices.forcemerge.json | 0 .../spec/generated/indices.get.json | 0 .../spec/generated/indices.get_alias.json | 0 .../generated/indices.get_field_mapping.json | 0 .../spec/generated/indices.get_mapping.json | 0 .../spec/generated/indices.get_settings.json | 0 .../spec/generated/indices.get_template.json | 0 .../spec/generated/indices.get_upgrade.json | 0 .../spec/generated/indices.open.json | 0 .../spec/generated/indices.put_alias.json | 0 .../spec/generated/indices.put_mapping.json | 0 .../spec/generated/indices.put_settings.json | 0 .../spec/generated/indices.put_template.json | 0 .../spec/generated/indices.recovery.json | 0 .../spec/generated/indices.refresh.json | 0 .../spec/generated/indices.rollover.json | 0 .../spec/generated/indices.segments.json | 0 .../spec/generated/indices.shard_stores.json | 0 .../spec/generated/indices.shrink.json | 0 .../spec/generated/indices.split.json | 0 .../spec/generated/indices.stats.json | 0 .../generated/indices.update_aliases.json | 0 .../spec/generated/indices.upgrade.json | 0 .../generated/indices.validate_query.json | 0 .../spec/generated/info.json | 0 .../generated/ingest.delete_pipeline.json | 0 .../spec/generated/ingest.get_pipeline.json | 0 .../spec/generated/ingest.processor_grok.json | 0 .../spec/generated/ingest.put_pipeline.json | 0 .../spec/generated/ingest.simulate.json | 0 .../spec/generated/mget.json | 0 .../spec/generated/msearch.json | 0 .../spec/generated/msearch_template.json | 0 .../spec/generated/mtermvectors.json | 0 .../spec/generated/nodes.hot_threads.json | 0 .../spec/generated/nodes.info.json | 0 .../nodes.reload_secure_settings.json | 0 .../spec/generated/nodes.stats.json | 0 .../spec/generated/nodes.usage.json | 0 .../spec/generated/ping.json | 0 .../spec/generated/put_script.json | 0 .../spec/generated/rank_eval.json | 0 .../spec/generated/reindex.json | 0 .../spec/generated/reindex_rethrottle.json | 0 .../generated/render_search_template.json | 0 .../generated/scripts_painless_execute.json | 0 .../spec/generated/scroll.json | 0 .../spec/generated/search.json | 0 .../spec/generated/search_shards.json | 0 .../spec/generated/search_template.json | 0 .../snapshot.cleanup_repository.json | 0 .../spec/generated/snapshot.create.json | 0 .../generated/snapshot.create_repository.json | 0 .../spec/generated/snapshot.delete.json | 0 .../generated/snapshot.delete_repository.json | 0 .../spec/generated/snapshot.get.json | 0 .../generated/snapshot.get_repository.json | 0 .../spec/generated/snapshot.restore.json | 0 .../spec/generated/snapshot.status.json | 0 .../generated/snapshot.verify_repository.json | 0 .../spec/generated/tasks.cancel.json | 0 .../spec/generated/tasks.get.json | 0 .../spec/generated/tasks.list.json | 0 .../spec/generated/termvectors.json | 0 .../spec/generated/update.json | 0 .../spec/generated/update_by_query.json | 0 .../generated/update_by_query_rethrottle.json | 0 .../lib/spec_definitions}/spec/index.js | 0 .../spec/overrides/clear_scroll.json | 0 .../spec/overrides/cluster.health.json | 0 .../spec/overrides/cluster.put_settings.json | 0 .../spec/overrides/cluster.reroute.json | 0 .../spec/overrides/count.json | 0 .../spec/overrides/indices.analyze.json | 0 .../spec/overrides/indices.clone.json | 0 .../spec/overrides/indices.create.json | 0 .../overrides/indices.delete_template.json | 0 .../overrides/indices.exists_template.json | 0 .../overrides/indices.get_field_mapping.json | 0 .../spec/overrides/indices.get_mapping.json | 0 .../spec/overrides/indices.get_template.json | 0 .../spec/overrides/indices.put_alias.json | 0 .../spec/overrides/indices.put_settings.json | 0 .../spec/overrides/indices.put_template.json | 0 .../spec/overrides/indices.rollover.json | 0 .../overrides/indices.update_aliases.json | 0 .../overrides/indices.validate_query.json | 0 .../spec/overrides/snapshot.create.json | 0 .../overrides/snapshot.create_repository.json | 0 .../spec/overrides/snapshot.restore.json | 0 .../console/server/lib/wildcard_matcher.ts} | 12 +- src/plugins/console/server/plugin.ts | 81 +++++++ .../api/console/proxy/create_handler.ts | 217 ++++++++++++++++++ .../server/routes/api/console/proxy/index.ts | 44 ++++ .../api/console/proxy/validation_config.ts | 44 ++++ .../api/console/spec_definitions/index.ts | 48 ++++ src/plugins/console/server/types.ts | 34 +++ x-pack/index.js | 2 - .../plugins/console_extensions/index.js | 47 ---- x-pack/plugins/console_extensions/kibana.json | 8 + .../console_extensions/server/config.ts | 12 + .../console_extensions/server/index.ts | 15 ++ .../console_extensions/server/plugin.ts | 32 +++ .../ccr.delete_auto_follow_pattern.json | 0 .../server}/spec/generated/ccr.follow.json | 0 .../spec/generated/ccr.follow_info.json | 0 .../spec/generated/ccr.follow_stats.json | 0 .../spec/generated/ccr.forget_follower.json | 0 .../ccr.get_auto_follow_pattern.json | 0 .../ccr.pause_auto_follow_pattern.json | 0 .../spec/generated/ccr.pause_follow.json | 0 .../ccr.put_auto_follow_pattern.json | 0 .../ccr.resume_auto_follow_pattern.json | 0 .../spec/generated/ccr.resume_follow.json | 0 .../server}/spec/generated/ccr.stats.json | 0 .../server}/spec/generated/ccr.unfollow.json | 0 .../spec/generated/enrich.delete_policy.json | 0 .../spec/generated/enrich.execute_policy.json | 0 .../spec/generated/enrich.get_policy.json | 0 .../spec/generated/enrich.put_policy.json | 0 .../server}/spec/generated/enrich.stats.json | 0 .../server}/spec/generated/graph.explore.json | 0 .../spec/generated/ilm.delete_lifecycle.json | 0 .../spec/generated/ilm.explain_lifecycle.json | 0 .../spec/generated/ilm.get_lifecycle.json | 0 .../spec/generated/ilm.get_status.json | 0 .../spec/generated/ilm.move_to_step.json | 0 .../spec/generated/ilm.put_lifecycle.json | 0 .../spec/generated/ilm.remove_policy.json | 0 .../server}/spec/generated/ilm.retry.json | 0 .../spec/generated/ilm.set_policy.json | 0 .../server}/spec/generated/ilm.start.json | 0 .../server}/spec/generated/ilm.stop.json | 0 .../spec/generated/indices.freeze.json | 0 .../indices.reload_search_analyzers.json | 0 .../spec/generated/indices.unfreeze.json | 0 .../spec/generated/license.delete.json | 0 .../server}/spec/generated/license.get.json | 0 .../generated/license.get_basic_status.json | 0 .../generated/license.get_trial_status.json | 0 .../server}/spec/generated/license.post.json | 0 .../generated/license.post_start_basic.json | 0 .../generated/license.post_start_trial.json | 0 .../generated/migration.deprecations.json | 0 .../generated/migration.get_assistance.json | 0 .../spec/generated/migration.upgrade.json | 0 .../server}/spec/generated/ml.close_job.json | 0 .../spec/generated/ml.delete_calendar.json | 0 .../generated/ml.delete_calendar_event.json | 0 .../generated/ml.delete_calendar_job.json | 0 .../ml.delete_data_frame_analytics.json | 0 .../spec/generated/ml.delete_datafeed.json | 0 .../generated/ml.delete_expired_data.json | 0 .../spec/generated/ml.delete_filter.json | 0 .../spec/generated/ml.delete_forecast.json | 0 .../server}/spec/generated/ml.delete_job.json | 0 .../generated/ml.delete_model_snapshot.json | 0 .../generated/ml.delete_trained_model.json | 0 .../generated/ml.estimate_memory_usage.json | 0 .../generated/ml.evaluate_data_frame.json | 0 .../ml.explain_data_frame_analytics.json | 0 .../generated/ml.find_file_structure.json | 0 .../server}/spec/generated/ml.flush_job.json | 0 .../server}/spec/generated/ml.forecast.json | 0 .../spec/generated/ml.get_buckets.json | 0 .../generated/ml.get_calendar_events.json | 0 .../spec/generated/ml.get_calendars.json | 0 .../spec/generated/ml.get_categories.json | 0 .../ml.get_data_frame_analytics.json | 0 .../ml.get_data_frame_analytics_stats.json | 0 .../spec/generated/ml.get_datafeed_stats.json | 0 .../spec/generated/ml.get_datafeeds.json | 0 .../spec/generated/ml.get_filters.json | 0 .../spec/generated/ml.get_influencers.json | 0 .../spec/generated/ml.get_job_stats.json | 0 .../server}/spec/generated/ml.get_jobs.json | 0 .../generated/ml.get_model_snapshots.json | 0 .../generated/ml.get_overall_buckets.json | 0 .../spec/generated/ml.get_records.json | 0 .../spec/generated/ml.get_trained_models.json | 0 .../ml.get_trained_models_stats.json | 0 .../server}/spec/generated/ml.info.json | 0 .../server}/spec/generated/ml.open_job.json | 0 .../generated/ml.post_calendar_events.json | 0 .../server}/spec/generated/ml.post_data.json | 0 .../spec/generated/ml.preview_datafeed.json | 0 .../spec/generated/ml.put_calendar.json | 0 .../spec/generated/ml.put_calendar_job.json | 0 .../ml.put_data_frame_analytics.json | 0 .../spec/generated/ml.put_datafeed.json | 0 .../server}/spec/generated/ml.put_filter.json | 0 .../server}/spec/generated/ml.put_job.json | 0 .../spec/generated/ml.put_trained_model.json | 0 .../generated/ml.revert_model_snapshot.json | 0 .../spec/generated/ml.set_upgrade_mode.json | 0 .../ml.start_data_frame_analytics.json | 0 .../spec/generated/ml.start_datafeed.json | 0 .../ml.stop_data_frame_analytics.json | 0 .../spec/generated/ml.stop_datafeed.json | 0 .../spec/generated/ml.update_datafeed.json | 0 .../spec/generated/ml.update_filter.json | 0 .../server}/spec/generated/ml.update_job.json | 0 .../generated/ml.update_model_snapshot.json | 0 .../server}/spec/generated/ml.upgrade.json | 0 .../server}/spec/generated/ml.validate.json | 0 .../spec/generated/ml.validate_detector.json | 0 .../spec/generated/monitoring.bulk.json | 0 .../spec/generated/rollup.delete_job.json | 0 .../spec/generated/rollup.get_jobs.json | 0 .../generated/rollup.get_rollup_caps.json | 0 .../rollup.get_rollup_index_caps.json | 0 .../spec/generated/rollup.put_job.json | 0 .../spec/generated/rollup.rollup_search.json | 0 .../spec/generated/rollup.start_job.json | 0 .../spec/generated/rollup.stop_job.json | 0 .../spec/generated/security.authenticate.json | 0 .../generated/security.change_password.json | 0 .../security.clear_cached_realms.json | 0 .../security.clear_cached_roles.json | 0 .../generated/security.create_api_key.json | 0 .../generated/security.delete_privileges.json | 0 .../spec/generated/security.delete_role.json | 0 .../security.delete_role_mapping.json | 0 .../spec/generated/security.delete_user.json | 0 .../spec/generated/security.disable_user.json | 0 .../spec/generated/security.enable_user.json | 0 .../spec/generated/security.get_api_key.json | 0 .../security.get_builtin_privileges.json | 0 .../generated/security.get_privileges.json | 0 .../spec/generated/security.get_role.json | 0 .../generated/security.get_role_mapping.json | 0 .../spec/generated/security.get_token.json | 0 .../spec/generated/security.get_user.json | 0 .../security.get_user_privileges.json | 0 .../generated/security.has_privileges.json | 0 .../security.invalidate_api_key.json | 0 .../generated/security.invalidate_token.json | 0 .../generated/security.put_privileges.json | 0 .../spec/generated/security.put_role.json | 0 .../generated/security.put_role_mapping.json | 0 .../spec/generated/security.put_user.json | 0 .../spec/generated/slm.delete_lifecycle.json | 0 .../spec/generated/slm.execute_lifecycle.json | 0 .../spec/generated/slm.execute_retention.json | 0 .../spec/generated/slm.get_lifecycle.json | 0 .../server}/spec/generated/slm.get_stats.json | 0 .../spec/generated/slm.get_status.json | 0 .../spec/generated/slm.put_lifecycle.json | 0 .../server}/spec/generated/slm.start.json | 0 .../server}/spec/generated/slm.stop.json | 0 .../spec/generated/sql.clear_cursor.json | 0 .../server}/spec/generated/sql.query.json | 0 .../server}/spec/generated/sql.translate.json | 0 .../spec/generated/ssl.certificates.json | 0 .../generated/transform.delete_transform.json | 0 .../generated/transform.get_transform.json | 0 .../transform.get_transform_stats.json | 0 .../transform.preview_transform.json | 0 .../generated/transform.put_transform.json | 0 .../generated/transform.start_transform.json | 0 .../generated/transform.stop_transform.json | 0 .../generated/transform.update_transform.json | 0 .../spec/generated/watcher.ack_watch.json | 0 .../generated/watcher.activate_watch.json | 0 .../generated/watcher.deactivate_watch.json | 0 .../spec/generated/watcher.delete_watch.json | 0 .../spec/generated/watcher.execute_watch.json | 0 .../spec/generated/watcher.get_watch.json | 0 .../spec/generated/watcher.put_watch.json | 0 .../server}/spec/generated/watcher.start.json | 0 .../server}/spec/generated/watcher.stats.json | 0 .../server}/spec/generated/watcher.stop.json | 0 .../server}/spec/generated/xpack.info.json | 0 .../generated/xpack.ssl.certificates.json | 0 .../server}/spec/generated/xpack.usage.json | 0 .../server/spec/ingest/index.ts} | 0 .../server}/spec/overrides/ccr.follow.json | 0 .../spec/overrides/ccr.forget_follower.json | 0 .../ccr.put_auto_follow_pattern.json | 0 .../spec/overrides/ccr.resume_follow.json | 0 .../spec/overrides/enrich.put_policy.json | 0 .../spec/overrides/ilm.move_to_step.json | 0 .../spec/overrides/ilm.put_lifecycle.json | 0 .../overrides/ml.estimate_memory_usage.json | 0 .../overrides/ml.evaluate_data_frame.json | 0 .../ml.explain_data_frame_analytics.json | 0 .../spec/overrides/ml.get_buckets.json | 0 .../overrides/ml.get_calendar_events.json | 0 .../spec/overrides/ml.get_calendars.json | 0 .../spec/overrides/ml.get_categories.json | 0 .../spec/overrides/ml.get_influencers.json | 0 .../overrides/ml.get_model_snapshots.json | 0 .../overrides/ml.get_overall_buckets.json | 0 .../spec/overrides/ml.get_records.json | 0 .../overrides/ml.post_calendar_events.json | 0 .../spec/overrides/ml.put_calendar.json | 0 .../ml.put_data_frame_analytics.json | 0 .../spec/overrides/ml.put_datafeed.json | 0 .../server}/spec/overrides/ml.put_job.json | 0 .../spec/overrides/ml.put_trained_model.json | 0 .../overrides/ml.revert_model_snapshot.json | 0 .../spec/overrides/ml.update_datafeed.json | 0 .../server}/spec/overrides/ml.update_job.json | 0 .../overrides/ml.update_model_snapshot.json | 0 .../spec/overrides/security.authenticate.json | 0 .../overrides/security.change_password.json | 0 .../overrides/security.create_api_key.json | 0 .../overrides/security.delete_privileges.json | 0 .../spec/overrides/security.get_token.json | 0 .../overrides/security.has_privileges.json | 0 .../security.invalidate_api_key.json | 0 .../overrides/security.invalidate_token.json | 0 .../overrides/security.put_privileges.json | 0 .../spec/overrides/security.put_role.json | 0 .../overrides/security.put_role_mapping.json | 0 .../spec/overrides/security.put_user.json | 0 .../spec/overrides/slm.put_lifecycle.json | 0 .../server}/spec/overrides/slm.start.json | 0 .../server}/spec/overrides/slm.stop.json | 0 .../server}/spec/overrides/sql.query.json | 0 .../transform.get_transform_stats.json | 0 .../transform.preview_transform.json | 0 .../overrides/transform.put_transform.json | 0 .../overrides/transform.stop_transform.json | 0 .../overrides/transform.update_transform.json | 0 .../spec/overrides/xpack.graph.explore.json | 0 .../server}/spec/overrides/xpack.info.json | 0 .../spec/overrides/xpack.license.post.json | 0 .../overrides/xpack.rollup.delete_job.json | 0 .../spec/overrides/xpack.rollup.put_job.json | 0 .../overrides/xpack.rollup.rollup_search.json | 0 .../xpack.security.authenticate.json | 0 .../xpack.security.change_password.json | 0 .../overrides/xpack.security.get_token.json | 0 .../xpack.security.invalidate_token.json | 0 .../overrides/xpack.security.put_role.json | 0 .../xpack.security.put_role_mapping.json | 0 .../overrides/xpack.security.put_user.json | 0 .../xpack.watcher.execute_watch.json | 0 .../overrides/xpack.watcher.put_watch.json | 0 613 files changed, 1345 insertions(+), 1081 deletions(-) delete mode 100644 src/legacy/core_plugins/console/__tests__/index.js delete mode 100644 src/legacy/core_plugins/console/index.ts delete mode 100644 src/legacy/core_plugins/console/package.json delete mode 100644 src/legacy/core_plugins/console/public/legacy.ts delete mode 100644 src/legacy/core_plugins/console/server/__tests__/proxy_route/headers.js delete mode 100644 src/legacy/core_plugins/console/server/__tests__/proxy_route/params.js delete mode 100644 src/legacy/core_plugins/console/server/__tests__/proxy_route/query_string.js delete mode 100644 src/legacy/core_plugins/console/server/proxy_route.ts create mode 100644 src/legacy/core_plugins/console_legacy/index.ts create mode 100644 src/legacy/core_plugins/console_legacy/package.json rename src/legacy/core_plugins/{console/public/np_ready/application => console_legacy/public}/styles/_app.scss (100%) rename src/legacy/core_plugins/{console/public/np_ready/application => console_legacy/public}/styles/components/_help.scss (100%) rename src/legacy/core_plugins/{console/public/np_ready/application => console_legacy/public}/styles/components/_history.scss (100%) rename src/legacy/core_plugins/{console/public/np_ready/application => console_legacy/public}/styles/components/_index.scss (100%) rename src/legacy/core_plugins/{console/public/np_ready/application => console_legacy/public}/styles/index.scss (100%) rename src/{legacy/core_plugins => plugins}/console/common/text_object.ts (100%) create mode 100644 src/plugins/console/common/types/index.ts rename src/{legacy/core_plugins/console/common/types.ts => plugins/console/common/types/models.ts} (97%) create mode 100644 src/plugins/console/common/types/plugin_config.ts rename src/{legacy/core_plugins/console/public => plugins/console}/kibana.json (73%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/console_menu.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/editor_content_spinner.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/editor_example.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/help_panel.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/settings_modal.tsx (98%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/something_went_wrong_callout.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/top_nav_menu.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/components/welcome_panel.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/constants/help_example.txt (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/console_history/console_history.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/console_history/history_viewer.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/console_history/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/editor.tsx (96%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_editor/apply_editor_settings.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_editor/editor.test.mock.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_editor/editor.test.tsx (99%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_editor/editor.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_editor/editor_output.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_editor/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/console_menu_actions.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/subscribe_console_resize_checker.ts (93%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/editor/legacy/use_ui_ace_keyboard_mode.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/main/get_top_nav.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/main/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/main/main.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/containers/settings.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/contexts/create_use_context.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/contexts/editor_context/editor_context.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/contexts/editor_context/editor_registry.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/contexts/editor_context/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/contexts/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/contexts/request_context.tsx (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/contexts/services_context.tsx (96%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/factories/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/factories/token_iterator.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_data_init/data_migration.ts (95%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_data_init/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_data_init/use_data_init.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_restore_request_from_history/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_restore_request_from_history/restore_request_from_history.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_restore_request_from_history/use_restore_request_from_history.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_save_current_text_object.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_send_current_request_to_es/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_send_current_request_to_es/send_request_to_es.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_send_current_request_to_es/track.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_send_current_request_to_es/use_send_current_request_to_es.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/hooks/use_set_input_editor.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/index.tsx (81%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/logo.svg (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/__tests__/input_tokenization.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/__tests__/output_tokenization.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/create.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/create_readonly.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/legacy_core_editor.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/elasticsearch_sql_highlight_rules.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/input.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/input_highlight_rules.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/output.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/output_highlight_rules.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/script.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/script_highlight_rules.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/worker/index.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/worker/worker.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/mode/x_json_highlight_rules.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/smart_resize.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/legacy_core_editor/theme_sense_dark.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/__tests__/editor_input1.txt (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/__tests__/integration.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/__tests__/sense_editor.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/create.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/curl.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/sense_editor.test.mocks.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/models/sense_editor/sense_editor.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/stores/editor.ts (96%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/application/stores/request.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/index.ts (85%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/ace_token_provider/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/ace_token_provider/token_provider.test.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/ace_token_provider/token_provider.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/__tests__/url_autocomplete.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/__tests__/url_params.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/autocomplete.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/body_completer.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/accept_endpoint_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/autocomplete_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/conditional_proxy.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/constant_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/field_autocomplete_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/full_request_component.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/global_only_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/id_autocomplete_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/index.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/index_autocomplete_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/list_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/object_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/shared_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/simple_param_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/template_autocomplete_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/type_autocomplete_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/url_pattern_matcher.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/components/username_autocomplete_component.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/engine.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/get_endpoint_from_position.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/autocomplete/url_params.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/curl_parsing/__tests__/curl_parsing.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/curl_parsing/__tests__/curl_parsing.txt (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/curl_parsing/curl.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/es/__tests__/content_type.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/es/es.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/kb/__tests__/kb.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/kb/api.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/kb/index.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/kb/kb.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/local_storage_object_client/create.ts (88%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/local_storage_object_client/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/local_storage_object_client/local_storage_object_client.ts (96%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/mappings/__tests__/mapping.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/mappings/mappings.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/row_parser.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/token_iterator/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/token_iterator/token_iterator.test.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/token_iterator/token_iterator.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/utils/__tests__/utils.test.js (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/utils/__tests__/utils_string_collapsing.txt (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/utils/__tests__/utils_string_expanding.txt (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/lib/utils/utils.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/plugin.ts (58%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/services/history.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/services/index.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/services/settings.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/services/storage.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/services/tracker.ts (62%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/types/common.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/types/core_editor.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/types/index.ts (95%) create mode 100644 src/plugins/console/public/types/plugin_dependencies.ts rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/types/token.ts (100%) rename src/{legacy/core_plugins/console/public/np_ready => plugins/console/public}/types/tokens_provider.ts (100%) rename src/{legacy/core_plugins => plugins}/console/server/__tests__/elasticsearch_proxy_config.js (98%) rename src/{legacy/core_plugins => plugins}/console/server/__tests__/proxy_config.js (99%) rename src/{legacy/core_plugins => plugins}/console/server/__tests__/proxy_config_collection.js (98%) rename src/{legacy/core_plugins/console/server/__tests__/proxy_route/body.js => plugins/console/server/__tests__/proxy_route/body.test.ts} (63%) create mode 100644 src/plugins/console/server/__tests__/proxy_route/headers.test.ts create mode 100644 src/plugins/console/server/__tests__/proxy_route/mocks.ts create mode 100644 src/plugins/console/server/__tests__/proxy_route/params.test.ts create mode 100644 src/plugins/console/server/__tests__/proxy_route/query_string.test.ts create mode 100644 src/plugins/console/server/__tests__/proxy_route/route_validation.test.ts rename src/{legacy/core_plugins/console/server/__tests__/proxy_route/stubs.js => plugins/console/server/__tests__/proxy_route/stubs.ts} (65%) rename src/{legacy/core_plugins => plugins}/console/server/__tests__/set_headers.js (97%) rename src/{legacy/core_plugins => plugins}/console/server/__tests__/wildcard_matcher.js (98%) create mode 100644 src/plugins/console/server/config.ts create mode 100644 src/plugins/console/server/index.ts rename src/{legacy/core_plugins/console/server => plugins/console/server/lib}/elasticsearch_proxy_config.ts (94%) rename src/{legacy/core_plugins/console/server/index.js => plugins/console/server/lib/index.ts} (80%) rename src/{legacy/core_plugins/console/server/proxy_config.js => plugins/console/server/lib/proxy_config.ts} (80%) rename src/{legacy/core_plugins/console/server/proxy_config_collection.js => plugins/console/server/lib/proxy_config_collection.ts} (83%) rename src/{legacy/core_plugins/console/server/request.test.ts => plugins/console/server/lib/proxy_request.test.ts} (96%) rename src/{legacy/core_plugins/console/server/request.ts => plugins/console/server/lib/proxy_request.ts} (99%) rename src/{legacy/core_plugins/console/server/set_headers.js => plugins/console/server/lib/set_headers.ts} (94%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/api.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/aggregations.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/aliases.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/document.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/filter.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/globals.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/ingest.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/mappings.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/query/dsl.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/query/index.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/query/templates.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/reindex.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/es_6_0/search.js (100%) create mode 100644 src/plugins/console/server/lib/spec_definitions/index.d.ts create mode 100644 src/plugins/console/server/lib/spec_definitions/index.js rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/server.js (91%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/server.test.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/.eslintrc (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/_common.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/bulk.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.aliases.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.allocation.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.count.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.fielddata.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.health.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.help.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.indices.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.master.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.nodeattrs.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.nodes.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.pending_tasks.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.plugins.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.recovery.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.repositories.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.segments.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.shards.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.snapshots.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.tasks.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.templates.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cat.thread_pool.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/clear_scroll.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.allocation_explain.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.get_settings.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.health.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.pending_tasks.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.put_settings.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.remote_info.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.reroute.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.state.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/cluster.stats.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/count.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/create.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/delete.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/delete_by_query.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/delete_by_query_rethrottle.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/delete_script.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/exists.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/exists_source.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/explain.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/field_caps.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/get.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/get_script.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/get_script_context.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/get_script_languages.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/get_source.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/index.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.analyze.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.clear_cache.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.clone.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.close.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.create.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.delete.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.delete_alias.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.delete_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.exists.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.exists_alias.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.exists_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.exists_type.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.flush.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.flush_synced.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.forcemerge.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.get.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.get_alias.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.get_field_mapping.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.get_mapping.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.get_settings.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.get_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.get_upgrade.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.open.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.put_alias.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.put_mapping.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.put_settings.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.put_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.recovery.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.refresh.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.rollover.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.segments.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.shard_stores.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.shrink.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.split.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.stats.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.update_aliases.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.upgrade.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/indices.validate_query.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/info.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/ingest.delete_pipeline.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/ingest.get_pipeline.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/ingest.processor_grok.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/ingest.put_pipeline.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/ingest.simulate.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/mget.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/msearch.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/msearch_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/mtermvectors.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/nodes.hot_threads.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/nodes.info.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/nodes.reload_secure_settings.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/nodes.stats.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/nodes.usage.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/ping.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/put_script.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/rank_eval.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/reindex.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/reindex_rethrottle.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/render_search_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/scripts_painless_execute.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/scroll.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/search.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/search_shards.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/search_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.cleanup_repository.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.create.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.create_repository.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.delete.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.delete_repository.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.get.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.get_repository.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.restore.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.status.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/snapshot.verify_repository.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/tasks.cancel.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/tasks.get.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/tasks.list.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/termvectors.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/update.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/update_by_query.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/generated/update_by_query_rethrottle.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/index.js (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/clear_scroll.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/cluster.health.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/cluster.put_settings.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/cluster.reroute.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/count.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.analyze.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.clone.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.create.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.delete_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.exists_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.get_field_mapping.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.get_mapping.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.get_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.put_alias.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.put_settings.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.put_template.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.rollover.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.update_aliases.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/indices.validate_query.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/snapshot.create.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/snapshot.create_repository.json (100%) rename src/{legacy/core_plugins/console/server/api_server => plugins/console/server/lib/spec_definitions}/spec/overrides/snapshot.restore.json (100%) rename src/{legacy/core_plugins/console/server/wildcard_matcher.js => plugins/console/server/lib/wildcard_matcher.ts} (81%) create mode 100644 src/plugins/console/server/plugin.ts create mode 100644 src/plugins/console/server/routes/api/console/proxy/create_handler.ts create mode 100644 src/plugins/console/server/routes/api/console/proxy/index.ts create mode 100644 src/plugins/console/server/routes/api/console/proxy/validation_config.ts create mode 100644 src/plugins/console/server/routes/api/console/spec_definitions/index.ts create mode 100644 src/plugins/console/server/types.ts delete mode 100644 x-pack/legacy/plugins/console_extensions/index.js create mode 100644 x-pack/plugins/console_extensions/kibana.json create mode 100644 x-pack/plugins/console_extensions/server/config.ts create mode 100644 x-pack/plugins/console_extensions/server/index.ts create mode 100644 x-pack/plugins/console_extensions/server/plugin.ts rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.delete_auto_follow_pattern.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.follow.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.follow_info.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.follow_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.forget_follower.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.get_auto_follow_pattern.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.pause_auto_follow_pattern.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.pause_follow.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.put_auto_follow_pattern.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.resume_auto_follow_pattern.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.resume_follow.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ccr.unfollow.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/enrich.delete_policy.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/enrich.execute_policy.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/enrich.get_policy.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/enrich.put_policy.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/enrich.stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/graph.explore.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.delete_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.explain_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.get_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.get_status.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.move_to_step.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.put_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.remove_policy.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.retry.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.set_policy.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.start.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ilm.stop.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/indices.freeze.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/indices.reload_search_analyzers.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/indices.unfreeze.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/license.delete.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/license.get.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/license.get_basic_status.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/license.get_trial_status.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/license.post.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/license.post_start_basic.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/license.post_start_trial.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/migration.deprecations.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/migration.get_assistance.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/migration.upgrade.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.close_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_calendar.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_calendar_event.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_calendar_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_expired_data.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_filter.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_forecast.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_model_snapshot.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.delete_trained_model.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.estimate_memory_usage.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.evaluate_data_frame.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.explain_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.find_file_structure.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.flush_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.forecast.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_buckets.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_calendar_events.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_calendars.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_categories.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_data_frame_analytics_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_datafeed_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_datafeeds.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_filters.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_influencers.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_job_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_jobs.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_model_snapshots.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_overall_buckets.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_records.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_trained_models.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.get_trained_models_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.info.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.open_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.post_calendar_events.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.post_data.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.preview_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.put_calendar.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.put_calendar_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.put_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.put_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.put_filter.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.put_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.put_trained_model.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.revert_model_snapshot.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.set_upgrade_mode.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.start_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.start_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.stop_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.stop_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.update_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.update_filter.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.update_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.update_model_snapshot.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.upgrade.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.validate.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ml.validate_detector.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/monitoring.bulk.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.delete_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.get_jobs.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.get_rollup_caps.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.get_rollup_index_caps.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.put_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.rollup_search.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.start_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/rollup.stop_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.authenticate.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.change_password.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.clear_cached_realms.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.clear_cached_roles.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.create_api_key.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.delete_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.delete_role.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.delete_role_mapping.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.delete_user.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.disable_user.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.enable_user.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_api_key.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_builtin_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_role.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_role_mapping.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_token.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_user.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.get_user_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.has_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.invalidate_api_key.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.invalidate_token.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.put_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.put_role.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.put_role_mapping.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/security.put_user.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.delete_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.execute_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.execute_retention.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.get_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.get_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.get_status.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.put_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.start.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/slm.stop.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/sql.clear_cursor.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/sql.query.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/sql.translate.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/ssl.certificates.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.delete_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.get_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.get_transform_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.preview_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.put_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.start_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.stop_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/transform.update_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.ack_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.activate_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.deactivate_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.delete_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.execute_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.get_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.put_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.start.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/watcher.stop.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/xpack.info.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/xpack.ssl.certificates.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/generated/xpack.usage.json (100%) rename x-pack/{legacy/plugins/console_extensions/spec/ingest/index.js => plugins/console_extensions/server/spec/ingest/index.ts} (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ccr.follow.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ccr.forget_follower.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ccr.put_auto_follow_pattern.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ccr.resume_follow.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/enrich.put_policy.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ilm.move_to_step.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ilm.put_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.estimate_memory_usage.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.evaluate_data_frame.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.explain_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_buckets.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_calendar_events.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_calendars.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_categories.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_influencers.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_model_snapshots.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_overall_buckets.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.get_records.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.post_calendar_events.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.put_calendar.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.put_data_frame_analytics.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.put_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.put_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.put_trained_model.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.revert_model_snapshot.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.update_datafeed.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.update_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/ml.update_model_snapshot.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.authenticate.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.change_password.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.create_api_key.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.delete_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.get_token.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.has_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.invalidate_api_key.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.invalidate_token.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.put_privileges.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.put_role.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.put_role_mapping.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/security.put_user.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/slm.put_lifecycle.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/slm.start.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/slm.stop.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/sql.query.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/transform.get_transform_stats.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/transform.preview_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/transform.put_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/transform.stop_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/transform.update_transform.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.graph.explore.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.info.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.license.post.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.rollup.delete_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.rollup.put_job.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.rollup.rollup_search.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.security.authenticate.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.security.change_password.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.security.get_token.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.security.invalidate_token.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.security.put_role.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.security.put_role_mapping.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.security.put_user.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.watcher.execute_watch.json (100%) rename x-pack/{legacy/plugins/console_extensions => plugins/console_extensions/server}/spec/overrides/xpack.watcher.put_watch.json (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index eff8c58a48b0d..37ca1ff7bbdec 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -150,9 +150,9 @@ **/*.scss @elastic/kibana-design # Elasticsearch UI -/src/legacy/core_plugins/console/ @elastic/es-ui +/src/plugins/console/ @elastic/es-ui /src/plugins/es_ui_shared/ @elastic/es-ui -/x-pack/legacy/plugins/console_extensions/ @elastic/es-ui +/x-pack/plugins/console_extensions/ @elastic/es-ui /x-pack/legacy/plugins/cross_cluster_replication/ @elastic/es-ui /x-pack/legacy/plugins/index_lifecycle_management/ @elastic/es-ui /x-pack/legacy/plugins/index_management/ @elastic/es-ui diff --git a/.i18nrc.json b/.i18nrc.json index af21f3426d75e..98c36b43e5d8f 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -1,7 +1,7 @@ { "paths": { "common.ui": "src/legacy/ui", - "console": "src/legacy/core_plugins/console", + "console": "src/plugins/console", "core": "src/core", "dashboardEmbeddableContainer": "src/plugins/dashboard_embeddable_container", "data": [ diff --git a/src/core/server/http/router/response_adapter.ts b/src/core/server/http/router/response_adapter.ts index e5dabc99f4442..948b4596e2658 100644 --- a/src/core/server/http/router/response_adapter.ts +++ b/src/core/server/http/router/response_adapter.ts @@ -19,6 +19,7 @@ import { ResponseObject as HapiResponseObject, ResponseToolkit as HapiResponseToolkit } from 'hapi'; import typeDetect from 'type-detect'; import Boom from 'boom'; +import * as stream from 'stream'; import { HttpResponsePayload, @@ -112,8 +113,18 @@ export class HapiResponseAdapter { return response; } - private toError(kibanaResponse: KibanaResponse) { + private toError(kibanaResponse: KibanaResponse) { const { payload } = kibanaResponse; + + // Special case for when we are proxying requests and want to enable streaming back error responses opaquely. + if (Buffer.isBuffer(payload) || payload instanceof stream.Readable) { + const response = this.responseToolkit + .response(kibanaResponse.payload) + .code(kibanaResponse.status); + setHeaders(response, kibanaResponse.options.headers); + return response; + } + // we use for BWC with Boom payload for error responses - {error: string, message: string, statusCode: string} const error = new Boom('', { statusCode: kibanaResponse.status, diff --git a/src/legacy/core_plugins/console/__tests__/index.js b/src/legacy/core_plugins/console/__tests__/index.js deleted file mode 100644 index c811bb3f89bba..0000000000000 --- a/src/legacy/core_plugins/console/__tests__/index.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Deprecations } from '../../../deprecation'; -import expect from '@kbn/expect'; -import index from '../index'; -import { noop } from 'lodash'; -import sinon from 'sinon'; - -describe('plugins/console', function() { - describe('#deprecate()', function() { - let transformDeprecations; - - before(function() { - const Plugin = function(options) { - this.deprecations = options.deprecations; - }; - - const plugin = index({ Plugin }); - - const deprecations = plugin.deprecations(Deprecations); - transformDeprecations = (settings, log = noop) => { - deprecations.forEach(deprecation => deprecation(settings, log)); - }; - }); - - describe('proxyConfig', function() { - it('leaves the proxyConfig settings', function() { - const proxyConfigOne = {}; - const proxyConfigTwo = {}; - const settings = { - proxyConfig: [proxyConfigOne, proxyConfigTwo], - }; - - transformDeprecations(settings); - expect(settings.proxyConfig[0]).to.be(proxyConfigOne); - expect(settings.proxyConfig[1]).to.be(proxyConfigTwo); - }); - - it('logs a warning when proxyConfig is specified', function() { - const settings = { - proxyConfig: [], - }; - - const log = sinon.spy(); - transformDeprecations(settings, log); - expect(log.calledOnce).to.be(true); - }); - - it(`doesn't log a warning when proxyConfig isn't specified`, function() { - const settings = {}; - - const log = sinon.spy(); - transformDeprecations(settings, log); - expect(log.called).to.be(false); - }); - }); - }); -}); diff --git a/src/legacy/core_plugins/console/index.ts b/src/legacy/core_plugins/console/index.ts deleted file mode 100644 index cec6d0a4219ae..0000000000000 --- a/src/legacy/core_plugins/console/index.ts +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import Boom from 'boom'; -import { first } from 'rxjs/operators'; -import { resolve, join } from 'path'; -import url from 'url'; -import { has, isEmpty, head, pick } from 'lodash'; - -// @ts-ignore -import { addProcessorDefinition } from './server/api_server/es_6_0/ingest'; -// @ts-ignore -import { resolveApi } from './server/api_server/server'; -// @ts-ignore -import { addExtensionSpecFilePath } from './server/api_server/spec'; -// @ts-ignore -import { setHeaders } from './server/set_headers'; -// @ts-ignore -import { ProxyConfigCollection, getElasticsearchProxyConfig, createProxyRoute } from './server'; - -function filterHeaders(originalHeaders: any, headersToKeep: any) { - const normalizeHeader = function(header: any) { - if (!header) { - return ''; - } - header = header.toString(); - return header.trim().toLowerCase(); - }; - - // Normalize list of headers we want to allow in upstream request - const headersToKeepNormalized = headersToKeep.map(normalizeHeader); - - return pick(originalHeaders, headersToKeepNormalized); -} - -// eslint-disable-next-line -export default function(kibana: any) { - const npSrc = resolve(__dirname, 'public/np_ready'); - - let defaultVars: any; - return new kibana.Plugin({ - id: 'console', - require: ['elasticsearch'], - - config(Joi: any) { - return Joi.object({ - enabled: Joi.boolean().default(true), - proxyFilter: Joi.array() - .items(Joi.string()) - .single() - .default(['.*']), - ssl: Joi.object({ - verify: Joi.boolean(), - }).default(), - proxyConfig: Joi.array() - .items( - Joi.object().keys({ - match: Joi.object().keys({ - protocol: Joi.string().default('*'), - host: Joi.string().default('*'), - port: Joi.string().default('*'), - path: Joi.string().default('*'), - }), - - timeout: Joi.number(), - ssl: Joi.object() - .keys({ - verify: Joi.boolean(), - ca: Joi.array() - .single() - .items(Joi.string()), - cert: Joi.string(), - key: Joi.string(), - }) - .default(), - }) - ) - .default(), - }).default(); - }, - - deprecations() { - return [ - (settings: any, log: any) => { - if (has(settings, 'proxyConfig')) { - log( - 'Config key "proxyConfig" is deprecated. Configuration can be inferred from the "elasticsearch" settings' - ); - } - }, - ]; - }, - - uiCapabilities() { - return { - dev_tools: { - show: true, - save: true, - }, - }; - }, - - async init(server: any, options: any) { - server.expose('addExtensionSpecFilePath', addExtensionSpecFilePath); - server.expose('addProcessorDefinition', addProcessorDefinition); - - if (options.ssl && options.ssl.verify) { - throw new Error('sense.ssl.verify is no longer supported.'); - } - - const config = server.config(); - const legacyEsConfig = await server.newPlatform.__internals.elasticsearch.legacy.config$ - .pipe(first()) - .toPromise(); - const proxyConfigCollection = new ProxyConfigCollection(options.proxyConfig); - const proxyPathFilters = options.proxyFilter.map((str: string) => new RegExp(str)); - - defaultVars = { - elasticsearchUrl: url.format( - Object.assign(url.parse(head(legacyEsConfig.hosts)), { auth: false }) - ), - }; - - server.route( - createProxyRoute({ - hosts: legacyEsConfig.hosts, - pathFilters: proxyPathFilters, - getConfigForReq(req: any, uri: any) { - const filteredHeaders = filterHeaders( - req.headers, - legacyEsConfig.requestHeadersWhitelist - ); - const headers = setHeaders(filteredHeaders, legacyEsConfig.customHeaders); - - if (!isEmpty(config.get('console.proxyConfig'))) { - return { - ...proxyConfigCollection.configForUri(uri), - headers, - }; - } - - return { - ...getElasticsearchProxyConfig(legacyEsConfig), - headers, - }; - }, - }) - ); - - server.route({ - path: '/api/console/api_server', - method: ['GET', 'POST'], - handler(req: any, h: any) { - const { sense_version: version, apis } = req.query; - if (!apis) { - throw Boom.badRequest('"apis" is a required param.'); - } - - return resolveApi(version, apis.split(','), h); - }, - }); - }, - - uiExports: { - devTools: [resolve(__dirname, 'public/legacy')], - styleSheetPaths: resolve(npSrc, 'application/styles/index.scss'), - injectDefaultVars: () => defaultVars, - noParse: [join(npSrc, 'application/models/legacy_core_editor/mode/worker/worker.js')], - }, - } as any); -} diff --git a/src/legacy/core_plugins/console/package.json b/src/legacy/core_plugins/console/package.json deleted file mode 100644 index 84ebcb95889c7..0000000000000 --- a/src/legacy/core_plugins/console/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "author": "Boaz Leskes ", - "contributors": [ - "Spencer Alger " - ], - "name": "console", - "version": "kibana" -} diff --git a/src/legacy/core_plugins/console/public/legacy.ts b/src/legacy/core_plugins/console/public/legacy.ts deleted file mode 100644 index d151a27d27e5c..0000000000000 --- a/src/legacy/core_plugins/console/public/legacy.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { npSetup, npStart } from 'ui/new_platform'; -import { I18nContext } from 'ui/i18n'; -import chrome from 'ui/chrome'; -import { FeatureCatalogueCategory } from 'ui/registry/feature_catalogue'; - -import { plugin } from './np_ready'; -import { DevToolsSetup } from '../../../../plugins/dev_tools/public'; -import { HomePublicPluginSetup } from '../../../../plugins/home/public'; -import { UsageCollectionSetup } from '../../../../plugins/usage_collection/public'; - -export interface XPluginSet { - usageCollection: UsageCollectionSetup; - dev_tools: DevToolsSetup; - home: HomePublicPluginSetup; - __LEGACY: { - I18nContext: any; - elasticsearchUrl: string; - category: FeatureCatalogueCategory; - }; -} - -const pluginInstance = plugin({} as any); - -(async () => { - await pluginInstance.setup(npSetup.core, { - ...npSetup.plugins, - __LEGACY: { - elasticsearchUrl: chrome.getInjected('elasticsearchUrl'), - I18nContext, - category: FeatureCatalogueCategory.ADMIN, - }, - }); - await pluginInstance.start(npStart.core); -})(); diff --git a/src/legacy/core_plugins/console/server/__tests__/proxy_route/headers.js b/src/legacy/core_plugins/console/server/__tests__/proxy_route/headers.js deleted file mode 100644 index 3a8233775f9b7..0000000000000 --- a/src/legacy/core_plugins/console/server/__tests__/proxy_route/headers.js +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { request } from 'http'; - -import sinon from 'sinon'; -import expect from '@kbn/expect'; -import { Server } from 'hapi'; -import * as requestModule from '../../request'; - -import { createProxyRoute } from '../../'; - -import { createResponseStub } from './stubs'; - -describe('Console Proxy Route', () => { - const sandbox = sinon.createSandbox(); - const teardowns = []; - let setup; - - beforeEach(() => { - sandbox.stub(requestModule, 'sendRequest').callsFake(createResponseStub()); - - setup = () => { - const server = new Server(); - server.route( - createProxyRoute({ - hosts: ['http://localhost:9200'], - }) - ); - - teardowns.push(() => server.stop()); - - return { server }; - }; - }); - - afterEach(async () => { - sandbox.restore(); - await Promise.all(teardowns.splice(0).map(fn => fn())); - }); - - describe('headers', function() { - this.timeout(Infinity); - - it('forwards the remote header info', async () => { - const { server } = setup(); - await server.start(); - - const resp = await new Promise(resolve => { - request( - { - protocol: server.info.protocol + ':', - host: server.info.address, - port: server.info.port, - method: 'POST', - path: '/api/console/proxy?method=GET&path=/', - }, - resolve - ).end(); - }); - - resp.destroy(); - - sinon.assert.calledOnce(requestModule.sendRequest); - const { headers } = requestModule.sendRequest.getCall(0).args[0]; - expect(headers) - .to.have.property('x-forwarded-for') - .and.not.be(''); - expect(headers) - .to.have.property('x-forwarded-port') - .and.not.be(''); - expect(headers) - .to.have.property('x-forwarded-proto') - .and.not.be(''); - expect(headers) - .to.have.property('x-forwarded-host') - .and.not.be(''); - }); - }); -}); diff --git a/src/legacy/core_plugins/console/server/__tests__/proxy_route/params.js b/src/legacy/core_plugins/console/server/__tests__/proxy_route/params.js deleted file mode 100644 index 2cf09f96e7b72..0000000000000 --- a/src/legacy/core_plugins/console/server/__tests__/proxy_route/params.js +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Agent } from 'http'; - -import sinon from 'sinon'; -import * as requestModule from '../../request'; -import expect from '@kbn/expect'; -import { Server } from 'hapi'; - -import { createProxyRoute } from '../../'; - -import { createResponseStub } from './stubs'; - -describe('Console Proxy Route', () => { - const sandbox = sinon.createSandbox(); - const teardowns = []; - let setup; - - beforeEach(() => { - sandbox.stub(requestModule, 'sendRequest').callsFake(createResponseStub()); - - setup = () => { - const server = new Server(); - teardowns.push(() => server.stop()); - return { server }; - }; - }); - - afterEach(async () => { - sandbox.restore(); - await Promise.all(teardowns.splice(0).map(fn => fn())); - }); - - describe('params', () => { - describe('pathFilters', () => { - describe('no matches', () => { - it('rejects with 403', async () => { - const { server } = setup(); - server.route( - createProxyRoute({ - pathFilters: [/^\/foo\//, /^\/bar\//], - }) - ); - - const { statusCode } = await server.inject({ - method: 'POST', - url: '/api/console/proxy?method=GET&path=/baz/id', - }); - - expect(statusCode).to.be(403); - }); - }); - describe('one match', () => { - it('allows the request', async () => { - const { server } = setup(); - server.route( - createProxyRoute({ - hosts: ['http://localhost:9200'], - pathFilters: [/^\/foo\//, /^\/bar\//], - }) - ); - - const { statusCode } = await server.inject({ - method: 'POST', - url: '/api/console/proxy?method=GET&path=/foo/id', - }); - - expect(statusCode).to.be(200); - sinon.assert.calledOnce(requestModule.sendRequest); - }); - }); - describe('all match', () => { - it('allows the request', async () => { - const { server } = setup(); - server.route( - createProxyRoute({ - hosts: ['http://localhost:9200'], - pathFilters: [/^\/foo\//, /^\/bar\//], - }) - ); - - const { statusCode } = await server.inject({ - method: 'POST', - url: '/api/console/proxy?method=GET&path=/foo/id', - }); - - expect(statusCode).to.be(200); - sinon.assert.calledOnce(requestModule.sendRequest); - }); - }); - }); - - describe('getConfigForReq()', () => { - it('passes the request and targeted uri', async () => { - const { server } = setup(); - - const getConfigForReq = sinon.stub().returns({}); - - server.route(createProxyRoute({ hosts: ['http://localhost:9200'], getConfigForReq })); - await server.inject({ - method: 'POST', - url: '/api/console/proxy?method=HEAD&path=/index/id', - }); - - sinon.assert.calledOnce(getConfigForReq); - const args = getConfigForReq.getCall(0).args; - expect(args[0]).to.have.property('path', '/api/console/proxy'); - expect(args[0]).to.have.property('method', 'post'); - expect(args[0]) - .to.have.property('query') - .eql({ method: 'HEAD', path: '/index/id' }); - expect(args[1]).to.be('http://localhost:9200/index/id?pretty=true'); - }); - - it('sends the returned timeout, agent, and base headers to request', async () => { - const { server } = setup(); - - const timeout = Math.round(Math.random() * 10000); - const agent = new Agent(); - const rejectUnauthorized = !!Math.round(Math.random()); - const headers = { - foo: 'bar', - baz: 'bop', - }; - - server.route( - createProxyRoute({ - hosts: ['http://localhost:9200'], - getConfigForReq: () => ({ - timeout, - agent, - headers, - rejectUnauthorized, - }), - }) - ); - - await server.inject({ - method: 'POST', - url: '/api/console/proxy?method=HEAD&path=/index/id', - }); - - sinon.assert.calledOnce(requestModule.sendRequest); - const opts = requestModule.sendRequest.getCall(0).args[0]; - expect(opts).to.have.property('timeout', timeout); - expect(opts).to.have.property('agent', agent); - expect(opts).to.have.property('rejectUnauthorized', rejectUnauthorized); - expect(opts.headers).to.have.property('foo', 'bar'); - expect(opts.headers).to.have.property('baz', 'bop'); - }); - }); - }); -}); diff --git a/src/legacy/core_plugins/console/server/__tests__/proxy_route/query_string.js b/src/legacy/core_plugins/console/server/__tests__/proxy_route/query_string.js deleted file mode 100644 index 6b98702131d91..0000000000000 --- a/src/legacy/core_plugins/console/server/__tests__/proxy_route/query_string.js +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import sinon from 'sinon'; -import * as requestModule from '../../request'; -import expect from '@kbn/expect'; -import { Server } from 'hapi'; - -import { createProxyRoute } from '../../'; - -import { createResponseStub } from './stubs'; - -describe('Console Proxy Route', () => { - const sandbox = sinon.createSandbox(); - const teardowns = []; - let request; - - beforeEach(() => { - sandbox.stub(requestModule, 'sendRequest').callsFake(createResponseStub()); - - request = async (method, path) => { - const server = new Server(); - server.route( - createProxyRoute({ - hosts: ['http://localhost:9200'], - }) - ); - - teardowns.push(() => server.stop()); - - const params = []; - if (path != null) params.push(`path=${path}`); - if (method != null) params.push(`method=${method}`); - return await server.inject({ - method: 'POST', - url: `/api/console/proxy${params.length ? `?${params.join('&')}` : ''}`, - }); - }; - }); - - afterEach(async () => { - sandbox.restore(); - await Promise.all(teardowns.splice(0).map(fn => fn())); - }); - - describe('query string', () => { - describe('path', () => { - describe('contains full url', () => { - it('treats the url as a path', async () => { - await request('GET', 'http://evil.com/test'); - sinon.assert.calledOnce(requestModule.sendRequest); - const args = requestModule.sendRequest.getCall(0).args; - expect(args[0].uri.href).to.be('http://localhost:9200/http://evil.com/test?pretty=true'); - }); - }); - describe('is missing', () => { - it('returns a 400 error', async () => { - const { statusCode } = await request('GET', undefined); - expect(statusCode).to.be(400); - sinon.assert.notCalled(requestModule.sendRequest); - }); - }); - describe('is empty', () => { - it('returns a 400 error', async () => { - const { statusCode } = await request('GET', ''); - expect(statusCode).to.be(400); - sinon.assert.notCalled(requestModule.sendRequest); - }); - }); - describe('starts with a slash', () => { - it('combines well with the base url', async () => { - await request('GET', '/index/id'); - sinon.assert.calledOnce(requestModule.sendRequest); - expect(requestModule.sendRequest.getCall(0).args[0].uri.href).to.be( - 'http://localhost:9200/index/id?pretty=true' - ); - }); - }); - describe(`doesn't start with a slash`, () => { - it('combines well with the base url', async () => { - await request('GET', 'index/id'); - sinon.assert.calledOnce(requestModule.sendRequest); - expect(requestModule.sendRequest.getCall(0).args[0].uri.href).to.be( - 'http://localhost:9200/index/id?pretty=true' - ); - }); - }); - }); - describe('method', () => { - describe('is missing', () => { - it('returns a 400 error', async () => { - const { statusCode } = await request(null, '/'); - expect(statusCode).to.be(400); - sinon.assert.notCalled(requestModule.sendRequest); - }); - }); - describe('is empty', () => { - it('returns a 400 error', async () => { - const { statusCode } = await request('', '/'); - expect(statusCode).to.be(400); - sinon.assert.notCalled(requestModule.sendRequest); - }); - }); - describe('is an invalid http method', () => { - it('returns a 400 error', async () => { - const { statusCode } = await request('foo', '/'); - expect(statusCode).to.be(400); - sinon.assert.notCalled(requestModule.sendRequest); - }); - }); - describe('is mixed case', () => { - it('sends a request with the exact method', async () => { - const { statusCode } = await request('HeAd', '/'); - expect(statusCode).to.be(200); - sinon.assert.calledOnce(requestModule.sendRequest); - expect(requestModule.sendRequest.getCall(0).args[0].method).to.be('HeAd'); - }); - }); - }); - }); -}); diff --git a/src/legacy/core_plugins/console/server/proxy_route.ts b/src/legacy/core_plugins/console/server/proxy_route.ts deleted file mode 100644 index f67c97443ba07..0000000000000 --- a/src/legacy/core_plugins/console/server/proxy_route.ts +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import Joi from 'joi'; -import * as url from 'url'; -import { IncomingMessage } from 'http'; -import Boom from 'boom'; -import { trimLeft, trimRight } from 'lodash'; -import { sendRequest } from './request'; - -function toURL(base: string, path: string) { - const urlResult = new url.URL(`${trimRight(base, '/')}/${trimLeft(path, '/')}`); - // Appending pretty here to have Elasticsearch do the JSON formatting, as doing - // in JS can lead to data loss (7.0 will get munged into 7, thus losing indication of - // measurement precision) - if (!urlResult.searchParams.get('pretty')) { - urlResult.searchParams.append('pretty', 'true'); - } - return urlResult; -} - -function getProxyHeaders(req: any) { - const headers = Object.create(null); - - // Scope this proto-unsafe functionality to where it is being used. - function extendCommaList(obj: Record, property: string, value: any) { - obj[property] = (obj[property] ? obj[property] + ',' : '') + value; - } - - if (req.info.remotePort && req.info.remoteAddress) { - // see https://git.io/vytQ7 - extendCommaList(headers, 'x-forwarded-for', req.info.remoteAddress); - extendCommaList(headers, 'x-forwarded-port', req.info.remotePort); - extendCommaList(headers, 'x-forwarded-proto', req.server.info.protocol); - extendCommaList(headers, 'x-forwarded-host', req.info.host); - } - - const contentType = req.headers['content-type']; - if (contentType) { - headers['content-type'] = contentType; - } - return headers; -} - -export const createProxyRoute = ({ - hosts, - pathFilters = [/.*/], - getConfigForReq = () => ({}), -}: { - hosts: string[]; - pathFilters: RegExp[]; - getConfigForReq: (...args: any[]) => any; -}) => ({ - path: '/api/console/proxy', - method: 'POST', - config: { - tags: ['access:console'], - payload: { - output: 'stream', - parse: false, - }, - validate: { - payload: true, - query: Joi.object() - .keys({ - method: Joi.string() - .valid('HEAD', 'GET', 'POST', 'PUT', 'DELETE') - .insensitive() - .required(), - path: Joi.string().required(), - }) - .unknown(true), - }, - - pre: [ - function filterPath(req: any) { - const { path } = req.query; - - if (pathFilters.some(re => re.test(path))) { - return null; - } - - const err = Boom.forbidden(); - err.output.payload = `Error connecting to '${path}':\n\nUnable to send requests to that path.` as any; - err.output.headers['content-type'] = 'text/plain'; - throw err; - }, - ], - - handler: async (req: any, h: any) => { - const { payload, query } = req; - const { path, method } = query; - - let esIncomingMessage: IncomingMessage; - - for (let idx = 0; idx < hosts.length; ++idx) { - const host = hosts[idx]; - try { - const uri = toURL(host, path); - - // Because this can technically be provided by a settings-defined proxy config, we need to - // preserve these property names to maintain BWC. - const { timeout, agent, headers, rejectUnauthorized } = getConfigForReq( - req, - uri.toString() - ); - - const requestHeaders = { - ...headers, - ...getProxyHeaders(req), - }; - - esIncomingMessage = await sendRequest({ - method, - headers: requestHeaders, - uri, - timeout, - payload, - rejectUnauthorized, - agent, - }); - - break; - } catch (e) { - if (e.code !== 'ECONNREFUSED') { - throw Boom.boomify(e); - } - if (idx === hosts.length - 1) { - throw Boom.badGateway('Could not reach any configured nodes.'); - } - // Otherwise, try the next host... - } - } - - const { - statusCode, - statusMessage, - headers: { warning }, - } = esIncomingMessage!; - - if (method.toUpperCase() !== 'HEAD') { - return h - .response(esIncomingMessage!) - .code(statusCode) - .header('warning', warning!); - } else { - return h - .response(`${statusCode} - ${statusMessage}`) - .code(statusCode) - .type('text/plain') - .header('warning', warning!); - } - }, - }, -}); diff --git a/src/legacy/core_plugins/console_legacy/index.ts b/src/legacy/core_plugins/console_legacy/index.ts new file mode 100644 index 0000000000000..65547e1ee5406 --- /dev/null +++ b/src/legacy/core_plugins/console_legacy/index.ts @@ -0,0 +1,51 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { first } from 'rxjs/operators'; +import { head } from 'lodash'; +import { resolve } from 'path'; +import url from 'url'; + +// TODO: Remove this hack once we can get the ES config we need for Console proxy a better way. +let _legacyEsConfig: any; +export const readLegacyEsConfig = () => { + return _legacyEsConfig; +}; + +// eslint-disable-next-line import/no-default-export +export default function(kibana: any) { + return new kibana.Plugin({ + id: 'console_legacy', + + async init(server: any) { + _legacyEsConfig = await server.newPlatform.__internals.elasticsearch.legacy.config$ + .pipe(first()) + .toPromise(); + }, + + uiExports: { + styleSheetPaths: resolve(__dirname, 'public/styles/index.scss'), + injectDefaultVars: () => ({ + elasticsearchUrl: url.format( + Object.assign(url.parse(head(_legacyEsConfig.hosts)), { auth: false }) + ), + }), + }, + } as any); +} diff --git a/src/legacy/core_plugins/console_legacy/package.json b/src/legacy/core_plugins/console_legacy/package.json new file mode 100644 index 0000000000000..b78807daed959 --- /dev/null +++ b/src/legacy/core_plugins/console_legacy/package.json @@ -0,0 +1,4 @@ +{ + "name": "console_legacy", + "version": "kibana" +} diff --git a/src/legacy/core_plugins/console/public/np_ready/application/styles/_app.scss b/src/legacy/core_plugins/console_legacy/public/styles/_app.scss similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/styles/_app.scss rename to src/legacy/core_plugins/console_legacy/public/styles/_app.scss diff --git a/src/legacy/core_plugins/console/public/np_ready/application/styles/components/_help.scss b/src/legacy/core_plugins/console_legacy/public/styles/components/_help.scss similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/styles/components/_help.scss rename to src/legacy/core_plugins/console_legacy/public/styles/components/_help.scss diff --git a/src/legacy/core_plugins/console/public/np_ready/application/styles/components/_history.scss b/src/legacy/core_plugins/console_legacy/public/styles/components/_history.scss similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/styles/components/_history.scss rename to src/legacy/core_plugins/console_legacy/public/styles/components/_history.scss diff --git a/src/legacy/core_plugins/console/public/np_ready/application/styles/components/_index.scss b/src/legacy/core_plugins/console_legacy/public/styles/components/_index.scss similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/styles/components/_index.scss rename to src/legacy/core_plugins/console_legacy/public/styles/components/_index.scss diff --git a/src/legacy/core_plugins/console/public/np_ready/application/styles/index.scss b/src/legacy/core_plugins/console_legacy/public/styles/index.scss similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/styles/index.scss rename to src/legacy/core_plugins/console_legacy/public/styles/index.scss diff --git a/src/legacy/core_plugins/console/common/text_object.ts b/src/plugins/console/common/text_object.ts similarity index 100% rename from src/legacy/core_plugins/console/common/text_object.ts rename to src/plugins/console/common/text_object.ts diff --git a/src/plugins/console/common/types/index.ts b/src/plugins/console/common/types/index.ts new file mode 100644 index 0000000000000..65e02b859d1ac --- /dev/null +++ b/src/plugins/console/common/types/index.ts @@ -0,0 +1,21 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export * from './models'; +export * from './plugin_config'; diff --git a/src/legacy/core_plugins/console/common/types.ts b/src/plugins/console/common/types/models.ts similarity index 97% rename from src/legacy/core_plugins/console/common/types.ts rename to src/plugins/console/common/types/models.ts index 33d6907ff60b8..de118761aea54 100644 --- a/src/legacy/core_plugins/console/common/types.ts +++ b/src/plugins/console/common/types/models.ts @@ -17,7 +17,7 @@ * under the License. */ -import { TextObject } from './text_object'; +import { TextObject } from '../text_object'; export interface IdObject { id: string; diff --git a/src/plugins/console/common/types/plugin_config.ts b/src/plugins/console/common/types/plugin_config.ts new file mode 100644 index 0000000000000..965c301d8b086 --- /dev/null +++ b/src/plugins/console/common/types/plugin_config.ts @@ -0,0 +1,22 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export interface PluginServerConfig { + elasticsearchUrl: string; +} diff --git a/src/legacy/core_plugins/console/public/kibana.json b/src/plugins/console/kibana.json similarity index 73% rename from src/legacy/core_plugins/console/public/kibana.json rename to src/plugins/console/kibana.json index c58a5a90fb9f2..18f7eb06e98ed 100644 --- a/src/legacy/core_plugins/console/public/kibana.json +++ b/src/plugins/console/kibana.json @@ -3,6 +3,6 @@ "version": "kibana", "server": true, "ui": true, - "requiredPlugins": ["home"], + "requiredPlugins": ["dev_tools", "home"], "optionalPlugins": ["usageCollection"] } diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/console_menu.tsx b/src/plugins/console/public/application/components/console_menu.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/console_menu.tsx rename to src/plugins/console/public/application/components/console_menu.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/editor_content_spinner.tsx b/src/plugins/console/public/application/components/editor_content_spinner.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/editor_content_spinner.tsx rename to src/plugins/console/public/application/components/editor_content_spinner.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/editor_example.tsx b/src/plugins/console/public/application/components/editor_example.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/editor_example.tsx rename to src/plugins/console/public/application/components/editor_example.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/help_panel.tsx b/src/plugins/console/public/application/components/help_panel.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/help_panel.tsx rename to src/plugins/console/public/application/components/help_panel.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/index.ts b/src/plugins/console/public/application/components/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/index.ts rename to src/plugins/console/public/application/components/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/settings_modal.tsx b/src/plugins/console/public/application/components/settings_modal.tsx similarity index 98% rename from src/legacy/core_plugins/console/public/np_ready/application/components/settings_modal.tsx rename to src/plugins/console/public/application/components/settings_modal.tsx index 05afdc9b79e0f..3cd20bf1bc343 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/components/settings_modal.tsx +++ b/src/plugins/console/public/application/components/settings_modal.tsx @@ -248,7 +248,10 @@ export function DevToolsSettingsModal(props: Props) { } > { + const { stateSetter, ...rest } = opts; + return rest; + })} idToSelectedMap={checkboxIdToSelectedMap} onChange={(e: any) => { onAutocompleteChange(e as AutocompleteOptions); diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/something_went_wrong_callout.tsx b/src/plugins/console/public/application/components/something_went_wrong_callout.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/something_went_wrong_callout.tsx rename to src/plugins/console/public/application/components/something_went_wrong_callout.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/top_nav_menu.tsx b/src/plugins/console/public/application/components/top_nav_menu.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/top_nav_menu.tsx rename to src/plugins/console/public/application/components/top_nav_menu.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/components/welcome_panel.tsx b/src/plugins/console/public/application/components/welcome_panel.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/components/welcome_panel.tsx rename to src/plugins/console/public/application/components/welcome_panel.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/constants/help_example.txt b/src/plugins/console/public/application/constants/help_example.txt similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/constants/help_example.txt rename to src/plugins/console/public/application/constants/help_example.txt diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/console_history/console_history.tsx b/src/plugins/console/public/application/containers/console_history/console_history.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/console_history/console_history.tsx rename to src/plugins/console/public/application/containers/console_history/console_history.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/console_history/history_viewer.tsx b/src/plugins/console/public/application/containers/console_history/history_viewer.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/console_history/history_viewer.tsx rename to src/plugins/console/public/application/containers/console_history/history_viewer.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/console_history/index.ts b/src/plugins/console/public/application/containers/console_history/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/console_history/index.ts rename to src/plugins/console/public/application/containers/console_history/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/editor.tsx b/src/plugins/console/public/application/containers/editor/editor.tsx similarity index 96% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/editor.tsx rename to src/plugins/console/public/application/containers/editor/editor.tsx index b42d791e5acd8..5c7fe293651fb 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/editor.tsx +++ b/src/plugins/console/public/application/containers/editor/editor.tsx @@ -21,7 +21,7 @@ import React, { useCallback } from 'react'; import { debounce } from 'lodash'; import { EditorContentSpinner } from '../../components'; -import { Panel, PanelsContainer } from '../../../../../../../../plugins/kibana_react/public'; +import { Panel, PanelsContainer } from '../../../../../kibana_react/public'; import { Editor as EditorUI, EditorOutput } from './legacy/console_editor'; import { StorageKeys } from '../../../services'; import { useEditorReadContext, useServicesContext } from '../../contexts'; diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/index.ts b/src/plugins/console/public/application/containers/editor/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/index.ts rename to src/plugins/console/public/application/containers/editor/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/apply_editor_settings.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/apply_editor_settings.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/apply_editor_settings.ts rename to src/plugins/console/public/application/containers/editor/legacy/console_editor/apply_editor_settings.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor.test.mock.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.test.mock.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor.test.mock.tsx rename to src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.test.mock.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor.test.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.test.tsx similarity index 99% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor.test.tsx rename to src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.test.tsx index d4079fcea33f8..306cdd396f4f8 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor.test.tsx +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.test.tsx @@ -25,7 +25,7 @@ import { I18nProvider } from '@kbn/i18n/react'; import { act } from 'react-dom/test-utils'; import * as sinon from 'sinon'; -import { notificationServiceMock } from '../../../../../../../../../../../src/core/public/mocks'; +import { notificationServiceMock } from '../../../../../../../../core/public/mocks'; import { nextTick } from 'test_utils/enzyme_helpers'; import { diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor.tsx rename to src/plugins/console/public/application/containers/editor/legacy/console_editor/editor.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor_output.tsx b/src/plugins/console/public/application/containers/editor/legacy/console_editor/editor_output.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/editor_output.tsx rename to src/plugins/console/public/application/containers/editor/legacy/console_editor/editor_output.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/index.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/index.ts rename to src/plugins/console/public/application/containers/editor/legacy/console_editor/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts rename to src/plugins/console/public/application/containers/editor/legacy/console_editor/keyboard_shortcuts.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_menu_actions.ts b/src/plugins/console/public/application/containers/editor/legacy/console_menu_actions.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/console_menu_actions.ts rename to src/plugins/console/public/application/containers/editor/legacy/console_menu_actions.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/index.ts b/src/plugins/console/public/application/containers/editor/legacy/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/index.ts rename to src/plugins/console/public/application/containers/editor/legacy/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/subscribe_console_resize_checker.ts b/src/plugins/console/public/application/containers/editor/legacy/subscribe_console_resize_checker.ts similarity index 93% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/subscribe_console_resize_checker.ts rename to src/plugins/console/public/application/containers/editor/legacy/subscribe_console_resize_checker.ts index 1adc56d47927b..2d992aadbf15a 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/subscribe_console_resize_checker.ts +++ b/src/plugins/console/public/application/containers/editor/legacy/subscribe_console_resize_checker.ts @@ -16,7 +16,8 @@ * specific language governing permissions and limitations * under the License. */ -import { ResizeChecker } from '../../../../../../../../../plugins/kibana_utils/public'; + +import { ResizeChecker } from '../../../../../../kibana_utils/public'; export function subscribeResizeChecker(el: HTMLElement, ...editors: any[]) { const checker = new ResizeChecker(el); diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/use_ui_ace_keyboard_mode.tsx b/src/plugins/console/public/application/containers/editor/legacy/use_ui_ace_keyboard_mode.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/editor/legacy/use_ui_ace_keyboard_mode.tsx rename to src/plugins/console/public/application/containers/editor/legacy/use_ui_ace_keyboard_mode.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/index.ts b/src/plugins/console/public/application/containers/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/index.ts rename to src/plugins/console/public/application/containers/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/main/get_top_nav.ts b/src/plugins/console/public/application/containers/main/get_top_nav.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/main/get_top_nav.ts rename to src/plugins/console/public/application/containers/main/get_top_nav.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/main/index.ts b/src/plugins/console/public/application/containers/main/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/main/index.ts rename to src/plugins/console/public/application/containers/main/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/main/main.tsx b/src/plugins/console/public/application/containers/main/main.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/main/main.tsx rename to src/plugins/console/public/application/containers/main/main.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/containers/settings.tsx b/src/plugins/console/public/application/containers/settings.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/containers/settings.tsx rename to src/plugins/console/public/application/containers/settings.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/contexts/create_use_context.ts b/src/plugins/console/public/application/contexts/create_use_context.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/contexts/create_use_context.ts rename to src/plugins/console/public/application/contexts/create_use_context.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/contexts/editor_context/editor_context.tsx b/src/plugins/console/public/application/contexts/editor_context/editor_context.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/contexts/editor_context/editor_context.tsx rename to src/plugins/console/public/application/contexts/editor_context/editor_context.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/contexts/editor_context/editor_registry.ts b/src/plugins/console/public/application/contexts/editor_context/editor_registry.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/contexts/editor_context/editor_registry.ts rename to src/plugins/console/public/application/contexts/editor_context/editor_registry.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/contexts/editor_context/index.ts b/src/plugins/console/public/application/contexts/editor_context/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/contexts/editor_context/index.ts rename to src/plugins/console/public/application/contexts/editor_context/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/contexts/index.ts b/src/plugins/console/public/application/contexts/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/contexts/index.ts rename to src/plugins/console/public/application/contexts/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/contexts/request_context.tsx b/src/plugins/console/public/application/contexts/request_context.tsx similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/contexts/request_context.tsx rename to src/plugins/console/public/application/contexts/request_context.tsx diff --git a/src/legacy/core_plugins/console/public/np_ready/application/contexts/services_context.tsx b/src/plugins/console/public/application/contexts/services_context.tsx similarity index 96% rename from src/legacy/core_plugins/console/public/np_ready/application/contexts/services_context.tsx rename to src/plugins/console/public/application/contexts/services_context.tsx index d7f036e1aecb6..4393cab4adbc5 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/contexts/services_context.tsx +++ b/src/plugins/console/public/application/contexts/services_context.tsx @@ -20,7 +20,7 @@ import React, { createContext, useContext } from 'react'; import { NotificationsSetup } from 'kibana/public'; import { History, Storage, Settings } from '../../services'; -import { ObjectStorageClient } from '../../../../common/types'; +import { ObjectStorageClient } from '../../../common/types'; import { MetricsTracker } from '../../types'; export interface ContextValue { diff --git a/src/legacy/core_plugins/console/public/np_ready/application/factories/index.ts b/src/plugins/console/public/application/factories/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/factories/index.ts rename to src/plugins/console/public/application/factories/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/factories/token_iterator.ts b/src/plugins/console/public/application/factories/token_iterator.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/factories/token_iterator.ts rename to src/plugins/console/public/application/factories/token_iterator.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/index.ts b/src/plugins/console/public/application/hooks/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/index.ts rename to src/plugins/console/public/application/hooks/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_data_init/data_migration.ts b/src/plugins/console/public/application/hooks/use_data_init/data_migration.ts similarity index 95% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_data_init/data_migration.ts rename to src/plugins/console/public/application/hooks/use_data_init/data_migration.ts index 08acd78ba2b8a..67d39c37a2f45 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_data_init/data_migration.ts +++ b/src/plugins/console/public/application/hooks/use_data_init/data_migration.ts @@ -18,7 +18,7 @@ */ import { History } from '../../../services'; -import { ObjectStorageClient } from '../../../../../common/types'; +import { ObjectStorageClient } from '../../../../common/types'; export interface Dependencies { history: History; diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_data_init/index.ts b/src/plugins/console/public/application/hooks/use_data_init/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_data_init/index.ts rename to src/plugins/console/public/application/hooks/use_data_init/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_data_init/use_data_init.ts b/src/plugins/console/public/application/hooks/use_data_init/use_data_init.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_data_init/use_data_init.ts rename to src/plugins/console/public/application/hooks/use_data_init/use_data_init.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_restore_request_from_history/index.ts b/src/plugins/console/public/application/hooks/use_restore_request_from_history/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_restore_request_from_history/index.ts rename to src/plugins/console/public/application/hooks/use_restore_request_from_history/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_restore_request_from_history/restore_request_from_history.ts b/src/plugins/console/public/application/hooks/use_restore_request_from_history/restore_request_from_history.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_restore_request_from_history/restore_request_from_history.ts rename to src/plugins/console/public/application/hooks/use_restore_request_from_history/restore_request_from_history.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_restore_request_from_history/use_restore_request_from_history.ts b/src/plugins/console/public/application/hooks/use_restore_request_from_history/use_restore_request_from_history.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_restore_request_from_history/use_restore_request_from_history.ts rename to src/plugins/console/public/application/hooks/use_restore_request_from_history/use_restore_request_from_history.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_save_current_text_object.ts b/src/plugins/console/public/application/hooks/use_save_current_text_object.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_save_current_text_object.ts rename to src/plugins/console/public/application/hooks/use_save_current_text_object.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_send_current_request_to_es/index.ts b/src/plugins/console/public/application/hooks/use_send_current_request_to_es/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_send_current_request_to_es/index.ts rename to src/plugins/console/public/application/hooks/use_send_current_request_to_es/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/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 similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_send_current_request_to_es/send_request_to_es.ts rename to src/plugins/console/public/application/hooks/use_send_current_request_to_es/send_request_to_es.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_send_current_request_to_es/track.ts b/src/plugins/console/public/application/hooks/use_send_current_request_to_es/track.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_send_current_request_to_es/track.ts rename to src/plugins/console/public/application/hooks/use_send_current_request_to_es/track.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/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 similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_send_current_request_to_es/use_send_current_request_to_es.ts rename to src/plugins/console/public/application/hooks/use_send_current_request_to_es/use_send_current_request_to_es.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/hooks/use_set_input_editor.ts b/src/plugins/console/public/application/hooks/use_set_input_editor.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/hooks/use_set_input_editor.ts rename to src/plugins/console/public/application/hooks/use_set_input_editor.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/index.tsx b/src/plugins/console/public/application/index.tsx similarity index 81% rename from src/legacy/core_plugins/console/public/np_ready/application/index.tsx rename to src/plugins/console/public/application/index.tsx index efd0f2ba86024..1fef52da6f31b 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/index.tsx +++ b/src/plugins/console/public/application/index.tsx @@ -18,27 +18,38 @@ */ import React from 'react'; +import { render, unmountComponentAtNode } from 'react-dom'; import { NotificationsSetup } from 'src/core/public'; import { ServicesContextProvider, EditorContextProvider, RequestContextProvider } from './contexts'; import { Main } from './containers'; import { createStorage, createHistory, createSettings, Settings } from '../services'; import * as localStorageObjectClient from '../lib/local_storage_object_client'; import { createUsageTracker } from '../services/tracker'; +import { UsageCollectionSetup } from '../../../usage_collection/public'; let settingsRef: Settings; export function legacyBackDoorToSettings() { return settingsRef; } -export function boot(deps: { +export interface BootDependencies { docLinkVersion: string; I18nContext: any; notifications: NotificationsSetup; elasticsearchUrl: string; -}) { - const { I18nContext, notifications, docLinkVersion, elasticsearchUrl } = deps; + usageCollection?: UsageCollectionSetup; + element: HTMLElement; +} - const trackUiMetric = createUsageTracker(); +export function renderApp({ + I18nContext, + notifications, + docLinkVersion, + elasticsearchUrl, + usageCollection, + element, +}: BootDependencies) { + const trackUiMetric = createUsageTracker(usageCollection); trackUiMetric.load('opened_app'); const storage = createStorage({ @@ -50,7 +61,7 @@ export function boot(deps: { const objectStorageClient = localStorageObjectClient.create(storage); settingsRef = settings; - return ( + render( - + , + element ); + + return () => unmountComponentAtNode(element); } diff --git a/src/legacy/core_plugins/console/public/np_ready/application/logo.svg b/src/plugins/console/public/application/logo.svg similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/logo.svg rename to src/plugins/console/public/application/logo.svg diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/index.ts b/src/plugins/console/public/application/models/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/index.ts rename to src/plugins/console/public/application/models/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/__tests__/input_tokenization.test.js b/src/plugins/console/public/application/models/legacy_core_editor/__tests__/input_tokenization.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/__tests__/input_tokenization.test.js rename to src/plugins/console/public/application/models/legacy_core_editor/__tests__/input_tokenization.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/__tests__/output_tokenization.test.js b/src/plugins/console/public/application/models/legacy_core_editor/__tests__/output_tokenization.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/__tests__/output_tokenization.test.js rename to src/plugins/console/public/application/models/legacy_core_editor/__tests__/output_tokenization.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/create.ts b/src/plugins/console/public/application/models/legacy_core_editor/create.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/create.ts rename to src/plugins/console/public/application/models/legacy_core_editor/create.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/create_readonly.ts b/src/plugins/console/public/application/models/legacy_core_editor/create_readonly.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/create_readonly.ts rename to src/plugins/console/public/application/models/legacy_core_editor/create_readonly.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/index.ts b/src/plugins/console/public/application/models/legacy_core_editor/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/index.ts rename to src/plugins/console/public/application/models/legacy_core_editor/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts rename to src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.test.mocks.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/legacy_core_editor.ts b/src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/legacy_core_editor.ts rename to src/plugins/console/public/application/models/legacy_core_editor/legacy_core_editor.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/elasticsearch_sql_highlight_rules.ts b/src/plugins/console/public/application/models/legacy_core_editor/mode/elasticsearch_sql_highlight_rules.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/elasticsearch_sql_highlight_rules.ts rename to src/plugins/console/public/application/models/legacy_core_editor/mode/elasticsearch_sql_highlight_rules.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/input.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/input.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/input.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/input.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/input_highlight_rules.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/input_highlight_rules.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/input_highlight_rules.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/input_highlight_rules.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/output.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/output.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/output.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/output.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/output_highlight_rules.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/output_highlight_rules.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/output_highlight_rules.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/output_highlight_rules.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/script.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/script.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/script.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/script.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/script_highlight_rules.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/script_highlight_rules.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/script_highlight_rules.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/script_highlight_rules.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/worker/index.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/index.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/worker/index.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/worker/index.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/worker/worker.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/worker/worker.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/x_json_highlight_rules.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/x_json_highlight_rules.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/mode/x_json_highlight_rules.js rename to src/plugins/console/public/application/models/legacy_core_editor/mode/x_json_highlight_rules.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/smart_resize.ts b/src/plugins/console/public/application/models/legacy_core_editor/smart_resize.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/smart_resize.ts rename to src/plugins/console/public/application/models/legacy_core_editor/smart_resize.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/theme_sense_dark.js b/src/plugins/console/public/application/models/legacy_core_editor/theme_sense_dark.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/legacy_core_editor/theme_sense_dark.js rename to src/plugins/console/public/application/models/legacy_core_editor/theme_sense_dark.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/__tests__/editor_input1.txt b/src/plugins/console/public/application/models/sense_editor/__tests__/editor_input1.txt similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/__tests__/editor_input1.txt rename to src/plugins/console/public/application/models/sense_editor/__tests__/editor_input1.txt diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/__tests__/integration.test.js b/src/plugins/console/public/application/models/sense_editor/__tests__/integration.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/__tests__/integration.test.js rename to src/plugins/console/public/application/models/sense_editor/__tests__/integration.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/__tests__/sense_editor.test.js b/src/plugins/console/public/application/models/sense_editor/__tests__/sense_editor.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/__tests__/sense_editor.test.js rename to src/plugins/console/public/application/models/sense_editor/__tests__/sense_editor.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/create.ts b/src/plugins/console/public/application/models/sense_editor/create.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/create.ts rename to src/plugins/console/public/application/models/sense_editor/create.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/curl.ts b/src/plugins/console/public/application/models/sense_editor/curl.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/curl.ts rename to src/plugins/console/public/application/models/sense_editor/curl.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/index.ts b/src/plugins/console/public/application/models/sense_editor/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/index.ts rename to src/plugins/console/public/application/models/sense_editor/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/sense_editor.test.mocks.ts b/src/plugins/console/public/application/models/sense_editor/sense_editor.test.mocks.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/sense_editor.test.mocks.ts rename to src/plugins/console/public/application/models/sense_editor/sense_editor.test.mocks.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/sense_editor.ts b/src/plugins/console/public/application/models/sense_editor/sense_editor.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/models/sense_editor/sense_editor.ts rename to src/plugins/console/public/application/models/sense_editor/sense_editor.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/application/stores/editor.ts b/src/plugins/console/public/application/stores/editor.ts similarity index 96% rename from src/legacy/core_plugins/console/public/np_ready/application/stores/editor.ts rename to src/plugins/console/public/application/stores/editor.ts index 844eacd9b91a8..73c29e7ff8575 100644 --- a/src/legacy/core_plugins/console/public/np_ready/application/stores/editor.ts +++ b/src/plugins/console/public/application/stores/editor.ts @@ -21,7 +21,7 @@ import { Reducer } from 'react'; import { produce } from 'immer'; import { identity } from 'fp-ts/lib/function'; import { DevToolsSettings } from '../../services'; -import { TextObject } from '../../../../common/text_object'; +import { TextObject } from '../../../common/text_object'; export interface Store { ready: boolean; diff --git a/src/legacy/core_plugins/console/public/np_ready/application/stores/request.ts b/src/plugins/console/public/application/stores/request.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/application/stores/request.ts rename to src/plugins/console/public/application/stores/request.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/index.ts b/src/plugins/console/public/index.ts similarity index 85% rename from src/legacy/core_plugins/console/public/np_ready/index.ts rename to src/plugins/console/public/index.ts index 045420f401e3b..2af9d1d16af02 100644 --- a/src/legacy/core_plugins/console/public/np_ready/index.ts +++ b/src/plugins/console/public/index.ts @@ -17,12 +17,10 @@ * under the License. */ -import { PluginInitializerContext } from 'kibana/public'; - import { ConsoleUIPlugin } from './plugin'; export { ConsoleUIPlugin as Plugin }; -export function plugin(ctx: PluginInitializerContext) { - return new ConsoleUIPlugin(ctx); +export function plugin() { + return new ConsoleUIPlugin(); } diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/ace_token_provider/index.ts b/src/plugins/console/public/lib/ace_token_provider/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/ace_token_provider/index.ts rename to src/plugins/console/public/lib/ace_token_provider/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/ace_token_provider/token_provider.test.ts b/src/plugins/console/public/lib/ace_token_provider/token_provider.test.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/ace_token_provider/token_provider.test.ts rename to src/plugins/console/public/lib/ace_token_provider/token_provider.test.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/ace_token_provider/token_provider.ts b/src/plugins/console/public/lib/ace_token_provider/token_provider.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/ace_token_provider/token_provider.ts rename to src/plugins/console/public/lib/ace_token_provider/token_provider.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/__tests__/url_autocomplete.test.js b/src/plugins/console/public/lib/autocomplete/__tests__/url_autocomplete.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/__tests__/url_autocomplete.test.js rename to src/plugins/console/public/lib/autocomplete/__tests__/url_autocomplete.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/__tests__/url_params.test.js b/src/plugins/console/public/lib/autocomplete/__tests__/url_params.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/__tests__/url_params.test.js rename to src/plugins/console/public/lib/autocomplete/__tests__/url_params.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/autocomplete.ts b/src/plugins/console/public/lib/autocomplete/autocomplete.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/autocomplete.ts rename to src/plugins/console/public/lib/autocomplete/autocomplete.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/body_completer.js b/src/plugins/console/public/lib/autocomplete/body_completer.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/body_completer.js rename to src/plugins/console/public/lib/autocomplete/body_completer.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/accept_endpoint_component.js b/src/plugins/console/public/lib/autocomplete/components/accept_endpoint_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/accept_endpoint_component.js rename to src/plugins/console/public/lib/autocomplete/components/accept_endpoint_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/autocomplete_component.js b/src/plugins/console/public/lib/autocomplete/components/autocomplete_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/autocomplete_component.js rename to src/plugins/console/public/lib/autocomplete/components/autocomplete_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/conditional_proxy.js b/src/plugins/console/public/lib/autocomplete/components/conditional_proxy.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/conditional_proxy.js rename to src/plugins/console/public/lib/autocomplete/components/conditional_proxy.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/constant_component.js b/src/plugins/console/public/lib/autocomplete/components/constant_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/constant_component.js rename to src/plugins/console/public/lib/autocomplete/components/constant_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/field_autocomplete_component.js b/src/plugins/console/public/lib/autocomplete/components/field_autocomplete_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/field_autocomplete_component.js rename to src/plugins/console/public/lib/autocomplete/components/field_autocomplete_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/full_request_component.ts b/src/plugins/console/public/lib/autocomplete/components/full_request_component.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/full_request_component.ts rename to src/plugins/console/public/lib/autocomplete/components/full_request_component.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/global_only_component.js b/src/plugins/console/public/lib/autocomplete/components/global_only_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/global_only_component.js rename to src/plugins/console/public/lib/autocomplete/components/global_only_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/id_autocomplete_component.js b/src/plugins/console/public/lib/autocomplete/components/id_autocomplete_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/id_autocomplete_component.js rename to src/plugins/console/public/lib/autocomplete/components/id_autocomplete_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/index.js b/src/plugins/console/public/lib/autocomplete/components/index.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/index.js rename to src/plugins/console/public/lib/autocomplete/components/index.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/index_autocomplete_component.js b/src/plugins/console/public/lib/autocomplete/components/index_autocomplete_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/index_autocomplete_component.js rename to src/plugins/console/public/lib/autocomplete/components/index_autocomplete_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/list_component.js b/src/plugins/console/public/lib/autocomplete/components/list_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/list_component.js rename to src/plugins/console/public/lib/autocomplete/components/list_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/object_component.js b/src/plugins/console/public/lib/autocomplete/components/object_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/object_component.js rename to src/plugins/console/public/lib/autocomplete/components/object_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/shared_component.js b/src/plugins/console/public/lib/autocomplete/components/shared_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/shared_component.js rename to src/plugins/console/public/lib/autocomplete/components/shared_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/simple_param_component.js b/src/plugins/console/public/lib/autocomplete/components/simple_param_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/simple_param_component.js rename to src/plugins/console/public/lib/autocomplete/components/simple_param_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/template_autocomplete_component.js b/src/plugins/console/public/lib/autocomplete/components/template_autocomplete_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/template_autocomplete_component.js rename to src/plugins/console/public/lib/autocomplete/components/template_autocomplete_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/type_autocomplete_component.js b/src/plugins/console/public/lib/autocomplete/components/type_autocomplete_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/type_autocomplete_component.js rename to src/plugins/console/public/lib/autocomplete/components/type_autocomplete_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/url_pattern_matcher.js b/src/plugins/console/public/lib/autocomplete/components/url_pattern_matcher.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/url_pattern_matcher.js rename to src/plugins/console/public/lib/autocomplete/components/url_pattern_matcher.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/username_autocomplete_component.js b/src/plugins/console/public/lib/autocomplete/components/username_autocomplete_component.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/components/username_autocomplete_component.js rename to src/plugins/console/public/lib/autocomplete/components/username_autocomplete_component.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/engine.js b/src/plugins/console/public/lib/autocomplete/engine.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/engine.js rename to src/plugins/console/public/lib/autocomplete/engine.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/get_endpoint_from_position.ts b/src/plugins/console/public/lib/autocomplete/get_endpoint_from_position.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/get_endpoint_from_position.ts rename to src/plugins/console/public/lib/autocomplete/get_endpoint_from_position.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/url_params.js b/src/plugins/console/public/lib/autocomplete/url_params.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/autocomplete/url_params.js rename to src/plugins/console/public/lib/autocomplete/url_params.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/curl_parsing/__tests__/curl_parsing.test.js b/src/plugins/console/public/lib/curl_parsing/__tests__/curl_parsing.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/curl_parsing/__tests__/curl_parsing.test.js rename to src/plugins/console/public/lib/curl_parsing/__tests__/curl_parsing.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/curl_parsing/__tests__/curl_parsing.txt b/src/plugins/console/public/lib/curl_parsing/__tests__/curl_parsing.txt similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/curl_parsing/__tests__/curl_parsing.txt rename to src/plugins/console/public/lib/curl_parsing/__tests__/curl_parsing.txt diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/curl_parsing/curl.js b/src/plugins/console/public/lib/curl_parsing/curl.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/curl_parsing/curl.js rename to src/plugins/console/public/lib/curl_parsing/curl.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/es/__tests__/content_type.test.js b/src/plugins/console/public/lib/es/__tests__/content_type.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/es/__tests__/content_type.test.js rename to src/plugins/console/public/lib/es/__tests__/content_type.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/es/es.js b/src/plugins/console/public/lib/es/es.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/es/es.js rename to src/plugins/console/public/lib/es/es.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/kb/__tests__/kb.test.js b/src/plugins/console/public/lib/kb/__tests__/kb.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/kb/__tests__/kb.test.js rename to src/plugins/console/public/lib/kb/__tests__/kb.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/kb/api.js b/src/plugins/console/public/lib/kb/api.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/kb/api.js rename to src/plugins/console/public/lib/kb/api.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/kb/index.js b/src/plugins/console/public/lib/kb/index.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/kb/index.js rename to src/plugins/console/public/lib/kb/index.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/kb/kb.js b/src/plugins/console/public/lib/kb/kb.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/kb/kb.js rename to src/plugins/console/public/lib/kb/kb.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/create.ts b/src/plugins/console/public/lib/local_storage_object_client/create.ts similarity index 88% rename from src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/create.ts rename to src/plugins/console/public/lib/local_storage_object_client/create.ts index 36948b9acb962..503387f7b4a41 100644 --- a/src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/create.ts +++ b/src/plugins/console/public/lib/local_storage_object_client/create.ts @@ -18,8 +18,8 @@ */ import { Storage } from '../../services'; -import { ObjectStorageClient } from '../../../../common/types'; -import { TextObject, textObjectTypeName } from '../../../../common/text_object'; +import { ObjectStorageClient } from '../../../common/types'; +import { TextObject, textObjectTypeName } from '../../../common/text_object'; import { LocalObjectStorage } from './local_storage_object_client'; export const create = (storage: Storage): ObjectStorageClient => { diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/index.ts b/src/plugins/console/public/lib/local_storage_object_client/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/index.ts rename to src/plugins/console/public/lib/local_storage_object_client/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/local_storage_object_client.ts b/src/plugins/console/public/lib/local_storage_object_client/local_storage_object_client.ts similarity index 96% rename from src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/local_storage_object_client.ts rename to src/plugins/console/public/lib/local_storage_object_client/local_storage_object_client.ts index 41c88d23b2533..8eac345898f9a 100644 --- a/src/legacy/core_plugins/console/public/np_ready/lib/local_storage_object_client/local_storage_object_client.ts +++ b/src/plugins/console/public/lib/local_storage_object_client/local_storage_object_client.ts @@ -18,7 +18,7 @@ */ import uuid from 'uuid'; -import { ObjectStorage, IdObject } from '../../../../common/types'; +import { ObjectStorage, IdObject } from '../../../common/types'; import { Storage } from '../../services'; export class LocalObjectStorage implements ObjectStorage { diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/mappings/__tests__/mapping.test.js b/src/plugins/console/public/lib/mappings/__tests__/mapping.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/mappings/__tests__/mapping.test.js rename to src/plugins/console/public/lib/mappings/__tests__/mapping.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/mappings/mappings.js b/src/plugins/console/public/lib/mappings/mappings.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/mappings/mappings.js rename to src/plugins/console/public/lib/mappings/mappings.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/row_parser.ts b/src/plugins/console/public/lib/row_parser.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/row_parser.ts rename to src/plugins/console/public/lib/row_parser.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/token_iterator/index.ts b/src/plugins/console/public/lib/token_iterator/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/token_iterator/index.ts rename to src/plugins/console/public/lib/token_iterator/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/token_iterator/token_iterator.test.ts b/src/plugins/console/public/lib/token_iterator/token_iterator.test.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/token_iterator/token_iterator.test.ts rename to src/plugins/console/public/lib/token_iterator/token_iterator.test.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/token_iterator/token_iterator.ts b/src/plugins/console/public/lib/token_iterator/token_iterator.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/token_iterator/token_iterator.ts rename to src/plugins/console/public/lib/token_iterator/token_iterator.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/utils/__tests__/utils.test.js b/src/plugins/console/public/lib/utils/__tests__/utils.test.js similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/utils/__tests__/utils.test.js rename to src/plugins/console/public/lib/utils/__tests__/utils.test.js diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/utils/__tests__/utils_string_collapsing.txt b/src/plugins/console/public/lib/utils/__tests__/utils_string_collapsing.txt similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/utils/__tests__/utils_string_collapsing.txt rename to src/plugins/console/public/lib/utils/__tests__/utils_string_collapsing.txt diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/utils/__tests__/utils_string_expanding.txt b/src/plugins/console/public/lib/utils/__tests__/utils_string_expanding.txt similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/utils/__tests__/utils_string_expanding.txt rename to src/plugins/console/public/lib/utils/__tests__/utils_string_expanding.txt diff --git a/src/legacy/core_plugins/console/public/np_ready/lib/utils/utils.ts b/src/plugins/console/public/lib/utils/utils.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/lib/utils/utils.ts rename to src/plugins/console/public/lib/utils/utils.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/plugin.ts b/src/plugins/console/public/plugin.ts similarity index 58% rename from src/legacy/core_plugins/console/public/np_ready/plugin.ts rename to src/plugins/console/public/plugin.ts index 22351ae95ba87..71a5e150a9f00 100644 --- a/src/legacy/core_plugins/console/public/np_ready/plugin.ts +++ b/src/plugins/console/public/plugin.ts @@ -17,23 +17,21 @@ * under the License. */ -import { render, unmountComponentAtNode } from 'react-dom'; import { i18n } from '@kbn/i18n'; -import { PluginInitializerContext, Plugin, CoreStart, CoreSetup } from 'src/core/public'; -import { XPluginSet } from '../legacy'; +import { CoreSetup, CoreStart, Plugin } from 'kibana/public'; -export class ConsoleUIPlugin implements Plugin { - // @ts-ignore - constructor(private readonly ctx: PluginInitializerContext) {} +import { FeatureCatalogueCategory } from '../../home/public'; - async setup({ notifications }: CoreSetup, pluginSet: XPluginSet) { - const { - __LEGACY: { I18nContext, elasticsearchUrl, category }, - dev_tools, - home, - } = pluginSet; +import { AppSetupUIPluginDependencies } from './types'; +export class ConsoleUIPlugin implements Plugin { + constructor() {} + + async setup( + { notifications, getStartServices }: CoreSetup, + { dev_tools, home, usageCollection }: AppSetupUIPluginDependencies + ) { home.featureCatalogue.register({ id: 'console', title: i18n.translate('console.devToolsTitle', { @@ -45,7 +43,7 @@ export class ConsoleUIPlugin implements Plugin { icon: 'consoleApp', path: '/app/kibana#/dev_tools/console', showOnHomePage: true, - category, + category: FeatureCatalogueCategory.ADMIN, }); dev_tools.register({ @@ -55,20 +53,21 @@ export class ConsoleUIPlugin implements Plugin { defaultMessage: 'Console', }), enableRouting: false, - async mount({ core: { docLinks } }, { element }) { - const { boot } = await import('./application'); - render( - boot({ - docLinkVersion: docLinks.DOC_LINK_VERSION, - I18nContext, - notifications, - elasticsearchUrl, - }), - element - ); - return () => { - unmountComponentAtNode(element); - }; + mount: async ({ core: { docLinks, i18n: i18nDep } }, { element }) => { + const { renderApp } = await import('./application'); + const [{ injectedMetadata }] = await getStartServices(); + const elasticsearchUrl = injectedMetadata.getInjectedVar( + 'elasticsearchUrl', + 'http://localhost:9200' + ) as string; + return renderApp({ + docLinkVersion: docLinks.DOC_LINK_VERSION, + I18nContext: i18nDep.Context, + notifications, + elasticsearchUrl, + usageCollection, + element, + }); }, }); } diff --git a/src/legacy/core_plugins/console/public/np_ready/services/history.ts b/src/plugins/console/public/services/history.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/services/history.ts rename to src/plugins/console/public/services/history.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/services/index.ts b/src/plugins/console/public/services/index.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/services/index.ts rename to src/plugins/console/public/services/index.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/services/settings.ts b/src/plugins/console/public/services/settings.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/services/settings.ts rename to src/plugins/console/public/services/settings.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/services/storage.ts b/src/plugins/console/public/services/storage.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/services/storage.ts rename to src/plugins/console/public/services/storage.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/services/tracker.ts b/src/plugins/console/public/services/tracker.ts similarity index 62% rename from src/legacy/core_plugins/console/public/np_ready/services/tracker.ts rename to src/plugins/console/public/services/tracker.ts index 13d5f875b3c6f..f5abcd145d0f7 100644 --- a/src/legacy/core_plugins/console/public/np_ready/services/tracker.ts +++ b/src/plugins/console/public/services/tracker.ts @@ -17,15 +17,22 @@ * under the License. */ -import { METRIC_TYPE } from '@kbn/analytics'; +import { METRIC_TYPE, UiStatsMetricType } from '@kbn/analytics'; import { MetricsTracker } from '../types'; -import { createUiStatsReporter } from '../../../../ui_metric/public'; +import { UsageCollectionSetup } from '../../../usage_collection/public'; const APP_TRACKER_NAME = 'console'; -export const createUsageTracker = (): MetricsTracker => { - const track = createUiStatsReporter(APP_TRACKER_NAME); + +export const createUsageTracker = (usageCollection?: UsageCollectionSetup): MetricsTracker => { + const track = (type: UiStatsMetricType, name: string) => + usageCollection?.reportUiStats(APP_TRACKER_NAME, type, name); + return { - count: (eventName: string) => track(METRIC_TYPE.COUNT, eventName), - load: (eventName: string) => track(METRIC_TYPE.LOADED, eventName), + count: (eventName: string) => { + track(METRIC_TYPE.COUNT, eventName); + }, + load: (eventName: string) => { + track(METRIC_TYPE.LOADED, eventName); + }, }; }; diff --git a/src/legacy/core_plugins/console/public/np_ready/types/common.ts b/src/plugins/console/public/types/common.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/types/common.ts rename to src/plugins/console/public/types/common.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/types/core_editor.ts b/src/plugins/console/public/types/core_editor.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/types/core_editor.ts rename to src/plugins/console/public/types/core_editor.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/types/index.ts b/src/plugins/console/public/types/index.ts similarity index 95% rename from src/legacy/core_plugins/console/public/np_ready/types/index.ts rename to src/plugins/console/public/types/index.ts index 78c6b6c8f55cc..555a0ea82c523 100644 --- a/src/legacy/core_plugins/console/public/np_ready/types/index.ts +++ b/src/plugins/console/public/types/index.ts @@ -17,6 +17,7 @@ * under the License. */ +export * from './plugin_dependencies'; export * from './core_editor'; export * from './token'; export * from './tokens_provider'; diff --git a/src/plugins/console/public/types/plugin_dependencies.ts b/src/plugins/console/public/types/plugin_dependencies.ts new file mode 100644 index 0000000000000..6bc4ff25ee442 --- /dev/null +++ b/src/plugins/console/public/types/plugin_dependencies.ts @@ -0,0 +1,27 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { HomePublicPluginSetup } from '../../../home/public'; +import { DevToolsSetup } from '../../../dev_tools/public'; +import { UsageCollectionSetup } from '../../../usage_collection/public'; + +export interface AppSetupUIPluginDependencies { + home: HomePublicPluginSetup; + dev_tools: DevToolsSetup; + usageCollection?: UsageCollectionSetup; +} diff --git a/src/legacy/core_plugins/console/public/np_ready/types/token.ts b/src/plugins/console/public/types/token.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/types/token.ts rename to src/plugins/console/public/types/token.ts diff --git a/src/legacy/core_plugins/console/public/np_ready/types/tokens_provider.ts b/src/plugins/console/public/types/tokens_provider.ts similarity index 100% rename from src/legacy/core_plugins/console/public/np_ready/types/tokens_provider.ts rename to src/plugins/console/public/types/tokens_provider.ts diff --git a/src/legacy/core_plugins/console/server/__tests__/elasticsearch_proxy_config.js b/src/plugins/console/server/__tests__/elasticsearch_proxy_config.js similarity index 98% rename from src/legacy/core_plugins/console/server/__tests__/elasticsearch_proxy_config.js rename to src/plugins/console/server/__tests__/elasticsearch_proxy_config.js index ec7d256975b27..df8b49b0a089e 100644 --- a/src/legacy/core_plugins/console/server/__tests__/elasticsearch_proxy_config.js +++ b/src/plugins/console/server/__tests__/elasticsearch_proxy_config.js @@ -19,7 +19,7 @@ import expect from '@kbn/expect'; import moment from 'moment'; -import { getElasticsearchProxyConfig } from '../elasticsearch_proxy_config'; +import { getElasticsearchProxyConfig } from '../lib/elasticsearch_proxy_config'; import https from 'https'; import http from 'http'; diff --git a/src/legacy/core_plugins/console/server/__tests__/proxy_config.js b/src/plugins/console/server/__tests__/proxy_config.js similarity index 99% rename from src/legacy/core_plugins/console/server/__tests__/proxy_config.js rename to src/plugins/console/server/__tests__/proxy_config.js index 2a221aa261167..b0b85e6bb7d06 100644 --- a/src/legacy/core_plugins/console/server/__tests__/proxy_config.js +++ b/src/plugins/console/server/__tests__/proxy_config.js @@ -24,7 +24,7 @@ import sinon from 'sinon'; import https, { Agent as HttpsAgent } from 'https'; import { parse as parseUrl } from 'url'; -import { ProxyConfig } from '../proxy_config'; +import { ProxyConfig } from '../lib/proxy_config'; const matchGoogle = { protocol: 'https', diff --git a/src/legacy/core_plugins/console/server/__tests__/proxy_config_collection.js b/src/plugins/console/server/__tests__/proxy_config_collection.js similarity index 98% rename from src/legacy/core_plugins/console/server/__tests__/proxy_config_collection.js rename to src/plugins/console/server/__tests__/proxy_config_collection.js index 1791ca9865d25..e1bc099ac1e85 100644 --- a/src/legacy/core_plugins/console/server/__tests__/proxy_config_collection.js +++ b/src/plugins/console/server/__tests__/proxy_config_collection.js @@ -24,7 +24,7 @@ import sinon from 'sinon'; import fs from 'fs'; import { Agent as HttpsAgent } from 'https'; -import { ProxyConfigCollection } from '../proxy_config_collection'; +import { ProxyConfigCollection } from '../lib/proxy_config_collection'; describe('ProxyConfigCollection', function() { beforeEach(function() { diff --git a/src/legacy/core_plugins/console/server/__tests__/proxy_route/body.js b/src/plugins/console/server/__tests__/proxy_route/body.test.ts similarity index 63% rename from src/legacy/core_plugins/console/server/__tests__/proxy_route/body.js rename to src/plugins/console/server/__tests__/proxy_route/body.test.ts index 923567769a6b8..252009a8977f3 100644 --- a/src/legacy/core_plugins/console/server/__tests__/proxy_route/body.js +++ b/src/plugins/console/server/__tests__/proxy_route/body.test.ts @@ -16,79 +16,83 @@ * specific language governing permissions and limitations * under the License. */ +import { getProxyRouteHandlerDeps } from './mocks'; -import sinon from 'sinon'; import expect from '@kbn/expect'; -import { Server } from 'hapi'; +import { Readable } from 'stream'; + +import { kibanaResponseFactory } from '../../../../../core/server'; +import { createHandler } from '../../routes/api/console/proxy/create_handler'; +import * as requestModule from '../../lib/proxy_request'; import { createResponseStub } from './stubs'; -import { createProxyRoute } from '../../'; -import * as requestModule from '../../request'; describe('Console Proxy Route', () => { - const sandbox = sinon.createSandbox(); - const teardowns = []; - let request; + let request: any; beforeEach(() => { - request = async (method, path, response) => { - sandbox.stub(requestModule, 'sendRequest').callsFake(createResponseStub(response)); - const server = new Server(); - server.route( - createProxyRoute({ - hosts: ['http://localhost:9200'], - }) - ); + request = (method: string, path: string, response: string) => { + (requestModule.proxyRequest as jest.Mock).mockResolvedValue(createResponseStub(response)); + const handler = createHandler(getProxyRouteHandlerDeps({})); - teardowns.push(() => server.stop()); - - const params = []; - if (path != null) params.push(`path=${path}`); - if (method != null) params.push(`method=${method}`); - return await server.inject({ - method: 'POST', - url: `/api/console/proxy${params.length ? `?${params.join('&')}` : ''}`, - }); + return handler( + {} as any, + { + headers: {}, + query: { method, path }, + } as any, + kibanaResponseFactory + ); }; }); + const readStream = (s: Readable) => + new Promise(resolve => { + let v = ''; + s.on('data', data => { + v += data; + }); + s.on('end', () => resolve(v)); + }); + afterEach(async () => { - sandbox.restore(); - await Promise.all(teardowns.splice(0).map(fn => fn())); + jest.resetAllMocks(); }); describe('response body', () => { describe('GET request', () => { it('returns the exact body', async () => { const { payload } = await request('GET', '/', 'foobar'); - expect(payload).to.be('foobar'); + expect(await readStream(payload)).to.be('foobar'); }); }); describe('POST request', () => { it('returns the exact body', async () => { const { payload } = await request('POST', '/', 'foobar'); - expect(payload).to.be('foobar'); + expect(await readStream(payload)).to.be('foobar'); }); }); describe('PUT request', () => { it('returns the exact body', async () => { const { payload } = await request('PUT', '/', 'foobar'); - expect(payload).to.be('foobar'); + expect(await readStream(payload)).to.be('foobar'); }); }); describe('DELETE request', () => { it('returns the exact body', async () => { const { payload } = await request('DELETE', '/', 'foobar'); - expect(payload).to.be('foobar'); + expect(await readStream(payload)).to.be('foobar'); }); }); describe('HEAD request', () => { it('returns the status code and text', async () => { const { payload } = await request('HEAD', '/'); + expect(typeof payload).to.be('string'); expect(payload).to.be('200 - OK'); }); describe('mixed casing', () => { it('returns the status code and text', async () => { const { payload } = await request('HeAd', '/'); + expect(typeof payload).to.be('string'); expect(payload).to.be('200 - OK'); }); }); diff --git a/src/plugins/console/server/__tests__/proxy_route/headers.test.ts b/src/plugins/console/server/__tests__/proxy_route/headers.test.ts new file mode 100644 index 0000000000000..8a779715ac823 --- /dev/null +++ b/src/plugins/console/server/__tests__/proxy_route/headers.test.ts @@ -0,0 +1,89 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +jest.mock('../../../../../core/server/http/router/request', () => ({ + ensureRawRequest: jest.fn(), +})); + +import { kibanaResponseFactory } from '../../../../../core/server'; + +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { ensureRawRequest } from '../../../../../core/server/http/router/request'; + +import { getProxyRouteHandlerDeps } from './mocks'; + +import expect from '@kbn/expect'; +import * as requestModule from '../../lib/proxy_request'; + +import { createHandler } from '../../routes/api/console/proxy/create_handler'; + +import { createResponseStub } from './stubs'; + +describe('Console Proxy Route', () => { + let handler: ReturnType; + + beforeEach(() => { + (requestModule.proxyRequest as jest.Mock).mockResolvedValue(createResponseStub('')); + handler = createHandler(getProxyRouteHandlerDeps({})); + }); + + afterEach(async () => { + jest.resetAllMocks(); + }); + + describe('headers', () => { + it('forwards the remote header info', async () => { + (ensureRawRequest as jest.Mock).mockReturnValue({ + // This mocks the shape of the hapi request object, will probably change + info: { + remoteAddress: '0.0.0.0', + remotePort: '1234', + host: 'test', + }, + server: { + info: { + protocol: 'http', + }, + }, + }); + + await handler( + {} as any, + { + headers: {}, + query: { + method: 'POST', + path: '/api/console/proxy?method=GET&path=/', + }, + } as any, + kibanaResponseFactory + ); + + expect((requestModule.proxyRequest as jest.Mock).mock.calls.length).to.be(1); + const [[{ headers }]] = (requestModule.proxyRequest as jest.Mock).mock.calls; + expect(headers).to.have.property('x-forwarded-for'); + expect(headers['x-forwarded-for']).to.be('0.0.0.0'); + expect(headers).to.have.property('x-forwarded-port'); + expect(headers['x-forwarded-port']).to.be('1234'); + expect(headers).to.have.property('x-forwarded-proto'); + expect(headers['x-forwarded-proto']).to.be('http'); + expect(headers).to.have.property('x-forwarded-host'); + expect(headers['x-forwarded-host']).to.be('test'); + }); + }); +}); diff --git a/src/plugins/console/server/__tests__/proxy_route/mocks.ts b/src/plugins/console/server/__tests__/proxy_route/mocks.ts new file mode 100644 index 0000000000000..74bd43fe52146 --- /dev/null +++ b/src/plugins/console/server/__tests__/proxy_route/mocks.ts @@ -0,0 +1,44 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +jest.mock('../../lib/proxy_request', () => ({ + proxyRequest: jest.fn(), +})); + +import { duration } from 'moment'; +import { ProxyConfigCollection } from '../../lib'; +import { CreateHandlerDependencies } from '../../routes/api/console/proxy/create_handler'; +import { coreMock } from '../../../../../core/server/mocks'; + +export const getProxyRouteHandlerDeps = ({ + proxyConfigCollection = new ProxyConfigCollection([]), + pathFilters = [/.*/], + readLegacyESConfig = () => ({ + requestTimeout: duration(30000), + customHeaders: {}, + requestHeadersWhitelist: [], + hosts: ['http://localhost:9200'], + }), + log = coreMock.createPluginInitializerContext().logger.get(), +}: Partial): CreateHandlerDependencies => ({ + proxyConfigCollection, + pathFilters, + readLegacyESConfig, + log, +}); diff --git a/src/plugins/console/server/__tests__/proxy_route/params.test.ts b/src/plugins/console/server/__tests__/proxy_route/params.test.ts new file mode 100644 index 0000000000000..1ab9c3ae789cc --- /dev/null +++ b/src/plugins/console/server/__tests__/proxy_route/params.test.ts @@ -0,0 +1,87 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { kibanaResponseFactory } from '../../../../../core/server'; +import { getProxyRouteHandlerDeps } from './mocks'; +import { createResponseStub } from './stubs'; +import * as requestModule from '../../lib/proxy_request'; +import expect from '@kbn/expect'; + +import { createHandler } from '../../routes/api/console/proxy/create_handler'; + +describe('Console Proxy Route', () => { + let handler: ReturnType; + + afterEach(() => { + jest.resetAllMocks(); + }); + + describe('params', () => { + describe('pathFilters', () => { + describe('no matches', () => { + it('rejects with 403', async () => { + handler = createHandler( + getProxyRouteHandlerDeps({ pathFilters: [/^\/foo\//, /^\/bar\//] }) + ); + + const { status } = await handler( + {} as any, + { query: { method: 'POST', path: '/baz/id' } } as any, + kibanaResponseFactory + ); + + expect(status).to.be(403); + }); + }); + describe('one match', () => { + it('allows the request', async () => { + handler = createHandler( + getProxyRouteHandlerDeps({ pathFilters: [/^\/foo\//, /^\/bar\//] }) + ); + + (requestModule.proxyRequest as jest.Mock).mockResolvedValue(createResponseStub('foo')); + + const { status } = await handler( + {} as any, + { headers: {}, query: { method: 'POST', path: '/foo/id' } } as any, + kibanaResponseFactory + ); + + expect(status).to.be(200); + expect((requestModule.proxyRequest as jest.Mock).mock.calls.length).to.be(1); + }); + }); + describe('all match', () => { + it('allows the request', async () => { + handler = createHandler(getProxyRouteHandlerDeps({ pathFilters: [/^\/foo\//] })); + + (requestModule.proxyRequest as jest.Mock).mockResolvedValue(createResponseStub('foo')); + + const { status } = await handler( + {} as any, + { headers: {}, query: { method: 'GET', path: '/foo/id' } } as any, + kibanaResponseFactory + ); + + expect(status).to.be(200); + expect((requestModule.proxyRequest as jest.Mock).mock.calls.length).to.be(1); + }); + }); + }); + }); +}); diff --git a/src/plugins/console/server/__tests__/proxy_route/query_string.test.ts b/src/plugins/console/server/__tests__/proxy_route/query_string.test.ts new file mode 100644 index 0000000000000..028022db1096d --- /dev/null +++ b/src/plugins/console/server/__tests__/proxy_route/query_string.test.ts @@ -0,0 +1,76 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { kibanaResponseFactory } from '../../../../../core/server'; +import { getProxyRouteHandlerDeps } from './mocks'; +import { createResponseStub } from './stubs'; +import * as requestModule from '../../lib/proxy_request'; + +import expect from '@kbn/expect'; + +import { createHandler } from '../../routes/api/console/proxy/create_handler'; + +describe('Console Proxy Route', () => { + let request: any; + beforeEach(() => { + (requestModule.proxyRequest as jest.Mock).mockResolvedValue(createResponseStub('foo')); + + request = async (method: string, path: string) => { + const handler = createHandler(getProxyRouteHandlerDeps({})); + + return handler( + {} as any, + { headers: {}, query: { method, path } } as any, + kibanaResponseFactory + ); + }; + }); + + afterEach(async () => { + jest.resetAllMocks(); + }); + + describe('query string', () => { + describe('path', () => { + describe('contains full url', () => { + it('treats the url as a path', async () => { + await request('GET', 'http://evil.com/test'); + expect((requestModule.proxyRequest as jest.Mock).mock.calls.length).to.be(1); + const [[args]] = (requestModule.proxyRequest as jest.Mock).mock.calls; + expect(args.uri.href).to.be('http://localhost:9200/http://evil.com/test?pretty=true'); + }); + }); + describe('starts with a slash', () => { + it('combines well with the base url', async () => { + await request('GET', '/index/id'); + expect((requestModule.proxyRequest as jest.Mock).mock.calls.length).to.be(1); + const [[args]] = (requestModule.proxyRequest as jest.Mock).mock.calls; + expect(args.uri.href).to.be('http://localhost:9200/index/id?pretty=true'); + }); + }); + describe(`doesn't start with a slash`, () => { + it('combines well with the base url', async () => { + await request('GET', 'index/id'); + expect((requestModule.proxyRequest as jest.Mock).mock.calls.length).to.be(1); + const [[args]] = (requestModule.proxyRequest as jest.Mock).mock.calls; + expect(args.uri.href).to.be('http://localhost:9200/index/id?pretty=true'); + }); + }); + }); + }); +}); diff --git a/src/plugins/console/server/__tests__/proxy_route/route_validation.test.ts b/src/plugins/console/server/__tests__/proxy_route/route_validation.test.ts new file mode 100644 index 0000000000000..403ef9737ae42 --- /dev/null +++ b/src/plugins/console/server/__tests__/proxy_route/route_validation.test.ts @@ -0,0 +1,52 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { routeValidationConfig } from '../../routes/api/console/proxy/validation_config'; + +const { query } = routeValidationConfig; + +describe('Proxy route validation', () => { + describe('query', () => { + describe('allows', () => { + it('known http verb method and path value', () => { + expect(query.validate({ method: 'GET', path: 'test' })); + }); + it('mixed case http verbs', () => { + expect(query.validate({ method: 'hEaD', path: 'test' })); + }); + }); + describe('throws for', () => { + it('empty query method value', () => { + expect(() => { + query.validate({ method: '', path: 'test' }); + }).toThrow('Method must be one of'); + }); + it('unknown method value', () => { + expect(() => { + query.validate({ method: 'abc', path: 'test' }); + }).toThrow('Method must be one of'); + }); + it('empty path value', () => { + expect(() => { + query.validate({ method: 'GET', path: '' }); + }).toThrow('Expected non-empty string'); + }); + }); + }); +}); diff --git a/src/legacy/core_plugins/console/server/__tests__/proxy_route/stubs.js b/src/plugins/console/server/__tests__/proxy_route/stubs.ts similarity index 65% rename from src/legacy/core_plugins/console/server/__tests__/proxy_route/stubs.js rename to src/plugins/console/server/__tests__/proxy_route/stubs.ts index 18ad277c0bf6b..12ad9cbe26e9c 100644 --- a/src/legacy/core_plugins/console/server/__tests__/proxy_route/stubs.js +++ b/src/plugins/console/server/__tests__/proxy_route/stubs.ts @@ -16,27 +16,25 @@ * specific language governing permissions and limitations * under the License. */ - +import { IncomingMessage } from 'http'; import { Readable } from 'stream'; -export function createResponseStub(response) { - return async () => { - const resp = new Readable({ - read() { - if (response) { - this.push(response); - } - this.push(null); - }, - }); - - resp.statusCode = 200; - resp.statusMessage = 'OK'; - resp.headers = { - 'content-type': 'text/plain', - 'content-length': String(response ? response.length : 0), - }; +export function createResponseStub(response: any) { + const resp: any = new Readable({ + read() { + if (response) { + this.push(response); + } + this.push(null); + }, + }); - return resp; + resp.statusCode = 200; + resp.statusMessage = 'OK'; + resp.headers = { + 'content-type': 'text/plain', + 'content-length': String(response ? response.length : 0), }; + + return resp as IncomingMessage; } diff --git a/src/legacy/core_plugins/console/server/__tests__/set_headers.js b/src/plugins/console/server/__tests__/set_headers.js similarity index 97% rename from src/legacy/core_plugins/console/server/__tests__/set_headers.js rename to src/plugins/console/server/__tests__/set_headers.js index 3cab23a05884f..1f349cbbb571e 100644 --- a/src/legacy/core_plugins/console/server/__tests__/set_headers.js +++ b/src/plugins/console/server/__tests__/set_headers.js @@ -18,7 +18,7 @@ */ import expect from '@kbn/expect'; -import { setHeaders } from '../set_headers'; +import { setHeaders } from '../lib'; describe('#set_headers', function() { it('throws if not given an object as the first argument', function() { diff --git a/src/legacy/core_plugins/console/server/__tests__/wildcard_matcher.js b/src/plugins/console/server/__tests__/wildcard_matcher.js similarity index 98% rename from src/legacy/core_plugins/console/server/__tests__/wildcard_matcher.js rename to src/plugins/console/server/__tests__/wildcard_matcher.js index ef0588973ab29..ccf68f3c16ca3 100644 --- a/src/legacy/core_plugins/console/server/__tests__/wildcard_matcher.js +++ b/src/plugins/console/server/__tests__/wildcard_matcher.js @@ -18,7 +18,7 @@ */ /* eslint-env mocha */ -import { WildcardMatcher } from '../wildcard_matcher'; +import { WildcardMatcher } from '../lib/wildcard_matcher'; function should(candidate, ...constructorArgs) { if (!new WildcardMatcher(...constructorArgs).match(candidate)) { diff --git a/src/plugins/console/server/config.ts b/src/plugins/console/server/config.ts new file mode 100644 index 0000000000000..ebd4b37bb41b2 --- /dev/null +++ b/src/plugins/console/server/config.ts @@ -0,0 +1,55 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; + +export type ConfigType = TypeOf; + +export const config = schema.object( + { + enabled: schema.boolean({ defaultValue: true }), + proxyFilter: schema.arrayOf(schema.string(), { defaultValue: ['.*'] }), + ssl: schema.object({ verify: schema.boolean({ defaultValue: false }) }, {}), + + // This does not actually work, track this issue: https://github.com/elastic/kibana/issues/55576 + proxyConfig: schema.arrayOf( + schema.object({ + match: schema.object({ + protocol: schema.string({ defaultValue: '*' }), + host: schema.string({ defaultValue: '*' }), + port: schema.string({ defaultValue: '*' }), + path: schema.string({ defaultValue: '*' }), + }), + + timeout: schema.number(), + ssl: schema.object( + { + verify: schema.boolean(), + ca: schema.arrayOf(schema.string()), + cert: schema.string(), + key: schema.string(), + }, + { defaultValue: undefined } + ), + }), + { defaultValue: [] } + ), + }, + { defaultValue: undefined } +); diff --git a/src/plugins/console/server/index.ts b/src/plugins/console/server/index.ts new file mode 100644 index 0000000000000..b603deee12e23 --- /dev/null +++ b/src/plugins/console/server/index.ts @@ -0,0 +1,31 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { PluginConfigDescriptor, PluginInitializerContext } from 'kibana/server'; + +import { ConfigType, config as configSchema } from './config'; +import { ConsoleServerPlugin } from './plugin'; + +export { ConsoleSetup } from './types'; + +export const plugin = (ctx: PluginInitializerContext) => new ConsoleServerPlugin(ctx); + +export const config: PluginConfigDescriptor = { + deprecations: ({ unused }) => [unused('ssl')], + schema: configSchema, +}; diff --git a/src/legacy/core_plugins/console/server/elasticsearch_proxy_config.ts b/src/plugins/console/server/lib/elasticsearch_proxy_config.ts similarity index 94% rename from src/legacy/core_plugins/console/server/elasticsearch_proxy_config.ts rename to src/plugins/console/server/lib/elasticsearch_proxy_config.ts index 5f44a524e9cc8..901d726ac51d8 100644 --- a/src/legacy/core_plugins/console/server/elasticsearch_proxy_config.ts +++ b/src/plugins/console/server/lib/elasticsearch_proxy_config.ts @@ -21,6 +21,7 @@ import _ from 'lodash'; import http from 'http'; import https from 'https'; import url from 'url'; +import { Duration } from 'moment'; const createAgent = (legacyConfig: any) => { const target = url.parse(_.head(legacyConfig.hosts)); @@ -58,7 +59,7 @@ const createAgent = (legacyConfig: any) => { return new https.Agent(agentOptions); }; -export const getElasticsearchProxyConfig = (legacyConfig: any) => { +export const getElasticsearchProxyConfig = (legacyConfig: { requestTimeout: Duration }) => { return { timeout: legacyConfig.requestTimeout.asMilliseconds(), agent: createAgent(legacyConfig), diff --git a/src/legacy/core_plugins/console/server/index.js b/src/plugins/console/server/lib/index.ts similarity index 80% rename from src/legacy/core_plugins/console/server/index.js rename to src/plugins/console/server/lib/index.ts index 15a8a5baf79dc..98004768f880b 100644 --- a/src/legacy/core_plugins/console/server/index.js +++ b/src/plugins/console/server/lib/index.ts @@ -17,6 +17,9 @@ * under the License. */ +export { ProxyConfig } from './proxy_config'; export { ProxyConfigCollection } from './proxy_config_collection'; +export { proxyRequest } from './proxy_request'; export { getElasticsearchProxyConfig } from './elasticsearch_proxy_config'; -export { createProxyRoute } from './proxy_route'; +export { setHeaders } from './set_headers'; +export { addProcessorDefinition, addExtensionSpecFilePath } from './spec_definitions'; diff --git a/src/legacy/core_plugins/console/server/proxy_config.js b/src/plugins/console/server/lib/proxy_config.ts similarity index 80% rename from src/legacy/core_plugins/console/server/proxy_config.js rename to src/plugins/console/server/lib/proxy_config.ts index b8c1b11f9a0d3..5adb9c58f784e 100644 --- a/src/legacy/core_plugins/console/server/proxy_config.js +++ b/src/plugins/console/server/lib/proxy_config.ts @@ -19,12 +19,27 @@ import { values } from 'lodash'; import { format as formatUrl } from 'url'; -import { Agent as HttpsAgent } from 'https'; +import { Agent as HttpsAgent, AgentOptions } from 'https'; import { WildcardMatcher } from './wildcard_matcher'; export class ProxyConfig { - constructor(config) { + // @ts-ignore + private id: string; + private matchers: { + protocol: WildcardMatcher; + host: WildcardMatcher; + port: WildcardMatcher; + path: WildcardMatcher; + }; + + private readonly timeout: number; + + private readonly sslAgent?: HttpsAgent; + + private verifySsl: any; + + constructor(config: { match: any; timeout: number }) { config = { ...config, }; @@ -57,11 +72,11 @@ export class ProxyConfig { this.sslAgent = this._makeSslAgent(config); } - _makeSslAgent(config) { + _makeSslAgent(config: any) { const ssl = config.ssl || {}; this.verifySsl = ssl.verify; - const sslAgentOpts = { + const sslAgentOpts: AgentOptions = { ca: ssl.ca, cert: ssl.cert, key: ssl.key, @@ -73,7 +88,12 @@ export class ProxyConfig { } } - getForParsedUri({ protocol, hostname, port, pathname }) { + getForParsedUri({ + protocol, + hostname, + port, + pathname, + }: Record<'protocol' | 'hostname' | 'port' | 'pathname', string>) { let match = this.matchers.protocol.match(protocol.slice(0, -1)); match = match && this.matchers.host.match(hostname); match = match && this.matchers.port.match(port); diff --git a/src/legacy/core_plugins/console/server/proxy_config_collection.js b/src/plugins/console/server/lib/proxy_config_collection.ts similarity index 83% rename from src/legacy/core_plugins/console/server/proxy_config_collection.js rename to src/plugins/console/server/lib/proxy_config_collection.ts index 79bc057aaaf7f..5d0b02fed5b18 100644 --- a/src/legacy/core_plugins/console/server/proxy_config_collection.js +++ b/src/plugins/console/server/lib/proxy_config_collection.ts @@ -18,18 +18,24 @@ */ import { defaultsDeep } from 'lodash'; +import { parse as parseUrl } from 'url'; import { ProxyConfig } from './proxy_config'; -import { parse as parseUrl } from 'url'; export class ProxyConfigCollection { - constructor(configs = []) { + private configs: ProxyConfig[]; + + constructor(configs: Array<{ match: any; timeout: number }> = []) { this.configs = configs.map(settings => new ProxyConfig(settings)); } - configForUri(uri) { + hasConfig() { + return Boolean(this.configs.length); + } + + configForUri(uri: string): object { const parsedUri = parseUrl(uri); - const settings = this.configs.map(config => config.getForParsedUri(parsedUri)); + const settings = this.configs.map(config => config.getForParsedUri(parsedUri as any)); return defaultsDeep({}, ...settings); } } diff --git a/src/legacy/core_plugins/console/server/request.test.ts b/src/plugins/console/server/lib/proxy_request.test.ts similarity index 96% rename from src/legacy/core_plugins/console/server/request.test.ts rename to src/plugins/console/server/lib/proxy_request.test.ts index 2cbde5b3b39b8..0285daef7d725 100644 --- a/src/legacy/core_plugins/console/server/request.test.ts +++ b/src/plugins/console/server/lib/proxy_request.test.ts @@ -18,7 +18,7 @@ */ import http, { ClientRequest } from 'http'; import * as sinon from 'sinon'; -import { sendRequest } from './request'; +import { proxyRequest } from './proxy_request'; import { URL } from 'url'; import { fail } from 'assert'; @@ -46,7 +46,7 @@ describe(`Console's send request`, () => { it('correctly implements timeout and abort mechanism', async () => { try { - await sendRequest({ + await proxyRequest({ agent: null as any, headers: {}, method: 'get', diff --git a/src/legacy/core_plugins/console/server/request.ts b/src/plugins/console/server/lib/proxy_request.ts similarity index 99% rename from src/legacy/core_plugins/console/server/request.ts rename to src/plugins/console/server/lib/proxy_request.ts index 0f6b78b484adf..ed02b23d77f6a 100644 --- a/src/legacy/core_plugins/console/server/request.ts +++ b/src/plugins/console/server/lib/proxy_request.ts @@ -37,7 +37,7 @@ interface Args { // We use a modified version of Hapi's Wreck because Hapi, Axios, and Superagent don't support GET requests // with bodies, but ES APIs do. Similarly with DELETE requests with bodies. Another library, `request` // diverged too much from current behaviour. -export const sendRequest = ({ +export const proxyRequest = ({ method, headers, agent, diff --git a/src/legacy/core_plugins/console/server/set_headers.js b/src/plugins/console/server/lib/set_headers.ts similarity index 94% rename from src/legacy/core_plugins/console/server/set_headers.js rename to src/plugins/console/server/lib/set_headers.ts index 5ea4c214dc42e..ee0be40312a4d 100644 --- a/src/legacy/core_plugins/console/server/set_headers.js +++ b/src/plugins/console/server/lib/set_headers.ts @@ -19,7 +19,7 @@ import { isPlainObject } from 'lodash'; -export function setHeaders(originalHeaders, newHeaders) { +export function setHeaders(originalHeaders: object, newHeaders: object) { if (!isPlainObject(originalHeaders)) { throw new Error( `Expected originalHeaders to be an object, but ${typeof originalHeaders} given` diff --git a/src/legacy/core_plugins/console/server/api_server/api.js b/src/plugins/console/server/lib/spec_definitions/api.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/api.js rename to src/plugins/console/server/lib/spec_definitions/api.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0.js b/src/plugins/console/server/lib/spec_definitions/es_6_0.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/aggregations.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/aggregations.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/aggregations.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/aggregations.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/aliases.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/aliases.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/aliases.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/aliases.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/document.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/document.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/document.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/document.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/filter.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/filter.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/filter.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/filter.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/globals.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/globals.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/globals.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/globals.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/ingest.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/ingest.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/ingest.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/ingest.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/mappings.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/mappings.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/mappings.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/mappings.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/query/dsl.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/query/dsl.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/query/dsl.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/query/dsl.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/query/index.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/query/index.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/query/index.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/query/index.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/query/templates.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/query/templates.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/query/templates.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/query/templates.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/reindex.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/reindex.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/reindex.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/reindex.js diff --git a/src/legacy/core_plugins/console/server/api_server/es_6_0/search.js b/src/plugins/console/server/lib/spec_definitions/es_6_0/search.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/es_6_0/search.js rename to src/plugins/console/server/lib/spec_definitions/es_6_0/search.js diff --git a/src/plugins/console/server/lib/spec_definitions/index.d.ts b/src/plugins/console/server/lib/spec_definitions/index.d.ts new file mode 100644 index 0000000000000..0a79d3fb386f1 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/index.d.ts @@ -0,0 +1,24 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export declare function addProcessorDefinition(...args: any[]): any; + +export declare function resolveApi(senseVersion: string, apis: string[]): object; + +export declare function addExtensionSpecFilePath(...args: any[]): any; diff --git a/src/plugins/console/server/lib/spec_definitions/index.js b/src/plugins/console/server/lib/spec_definitions/index.js new file mode 100644 index 0000000000000..3fe1913d5a193 --- /dev/null +++ b/src/plugins/console/server/lib/spec_definitions/index.js @@ -0,0 +1,24 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { addProcessorDefinition } from './es_6_0/ingest'; + +export { addExtensionSpecFilePath } from './spec'; + +export { resolveApi } from './server'; diff --git a/src/legacy/core_plugins/console/server/api_server/server.js b/src/plugins/console/server/lib/spec_definitions/server.js similarity index 91% rename from src/legacy/core_plugins/console/server/api_server/server.js rename to src/plugins/console/server/lib/spec_definitions/server.js index 48ed73cb3611d..dd700bf019507 100644 --- a/src/legacy/core_plugins/console/server/api_server/server.js +++ b/src/plugins/console/server/lib/spec_definitions/server.js @@ -21,7 +21,7 @@ import _ from 'lodash'; const KNOWN_APIS = ['es_6_0']; -export function resolveApi(senseVersion, apis, h) { +export function resolveApi(senseVersion, apis) { const result = {}; _.each(apis, function(name) { { @@ -33,5 +33,5 @@ export function resolveApi(senseVersion, apis, h) { } }); - return h.response(result).type('application/json'); + return result; } diff --git a/src/legacy/core_plugins/console/server/api_server/server.test.js b/src/plugins/console/server/lib/spec_definitions/server.test.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/server.test.js rename to src/plugins/console/server/lib/spec_definitions/server.test.js diff --git a/src/legacy/core_plugins/console/server/api_server/spec/.eslintrc b/src/plugins/console/server/lib/spec_definitions/spec/.eslintrc similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/.eslintrc rename to src/plugins/console/server/lib/spec_definitions/spec/.eslintrc diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/_common.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/_common.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/_common.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/_common.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/bulk.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/bulk.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/bulk.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/bulk.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.aliases.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.aliases.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.aliases.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.aliases.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.allocation.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.allocation.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.allocation.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.allocation.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.count.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.count.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.count.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.count.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.fielddata.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.fielddata.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.fielddata.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.fielddata.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.health.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.health.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.health.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.health.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.help.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.help.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.help.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.help.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.indices.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.indices.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.indices.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.indices.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.master.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.master.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.master.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.master.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.nodeattrs.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.nodeattrs.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.nodeattrs.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.nodeattrs.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.nodes.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.nodes.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.nodes.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.nodes.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.pending_tasks.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.pending_tasks.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.pending_tasks.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.pending_tasks.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.plugins.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.plugins.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.plugins.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.plugins.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.recovery.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.recovery.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.recovery.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.recovery.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.repositories.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.repositories.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.repositories.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.repositories.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.segments.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.segments.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.segments.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.segments.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.shards.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.shards.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.shards.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.shards.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.snapshots.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.snapshots.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.snapshots.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.snapshots.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.tasks.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.tasks.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.tasks.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.tasks.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.templates.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.templates.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.templates.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.templates.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cat.thread_pool.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cat.thread_pool.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cat.thread_pool.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cat.thread_pool.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/clear_scroll.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/clear_scroll.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/clear_scroll.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/clear_scroll.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.allocation_explain.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.allocation_explain.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.allocation_explain.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.allocation_explain.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.get_settings.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.get_settings.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.get_settings.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.get_settings.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.health.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.health.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.health.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.health.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.pending_tasks.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.pending_tasks.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.pending_tasks.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.pending_tasks.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.put_settings.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.put_settings.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.put_settings.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.put_settings.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.remote_info.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.remote_info.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.remote_info.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.remote_info.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.reroute.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.reroute.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.reroute.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.reroute.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.state.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.state.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.state.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.state.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.stats.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.stats.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/cluster.stats.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/cluster.stats.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/count.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/count.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/count.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/count.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/create.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/create.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/create.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/create.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/delete.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/delete.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/delete.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/delete.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/delete_by_query.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/delete_by_query.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/delete_by_query.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/delete_by_query.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/delete_by_query_rethrottle.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/delete_by_query_rethrottle.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/delete_by_query_rethrottle.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/delete_by_query_rethrottle.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/delete_script.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/delete_script.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/delete_script.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/delete_script.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/exists.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/exists.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/exists.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/exists.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/exists_source.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/exists_source.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/exists_source.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/exists_source.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/explain.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/explain.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/explain.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/explain.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/field_caps.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/field_caps.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/field_caps.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/field_caps.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/get.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/get.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/get.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/get.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/get_script.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/get_script.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/get_script.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/get_script.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/get_script_context.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/get_script_context.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/get_script_context.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/get_script_context.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/get_script_languages.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/get_script_languages.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/get_script_languages.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/get_script_languages.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/get_source.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/get_source.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/get_source.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/get_source.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/index.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/index.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/index.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/index.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.analyze.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.analyze.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.analyze.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.analyze.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.clear_cache.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.clear_cache.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.clear_cache.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.clear_cache.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.clone.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.clone.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.clone.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.clone.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.close.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.close.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.close.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.close.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.create.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.create.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.create.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.create.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.delete.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.delete.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.delete.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.delete.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.delete_alias.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.delete_alias.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.delete_alias.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.delete_alias.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.delete_template.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.delete_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.delete_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.delete_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists_alias.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists_alias.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists_alias.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists_alias.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists_template.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists_type.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists_type.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.exists_type.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.exists_type.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.flush.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.flush.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.flush.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.flush.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.flush_synced.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.flush_synced.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.flush_synced.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.flush_synced.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.forcemerge.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.forcemerge.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.forcemerge.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.forcemerge.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_alias.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_alias.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_alias.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_alias.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_field_mapping.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_field_mapping.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_field_mapping.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_field_mapping.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_mapping.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_mapping.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_mapping.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_mapping.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_settings.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_settings.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_settings.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_settings.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_template.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_upgrade.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_upgrade.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.get_upgrade.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.get_upgrade.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.open.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.open.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.open.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.open.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_alias.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_alias.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_alias.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_alias.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_mapping.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_mapping.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_mapping.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_mapping.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_settings.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_settings.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_settings.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_settings.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_template.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.put_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.put_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.recovery.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.recovery.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.recovery.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.recovery.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.refresh.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.refresh.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.refresh.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.refresh.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.rollover.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.rollover.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.rollover.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.rollover.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.segments.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.segments.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.segments.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.segments.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.shard_stores.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.shard_stores.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.shard_stores.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.shard_stores.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.shrink.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.shrink.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.shrink.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.shrink.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.split.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.split.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.split.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.split.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.stats.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.stats.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.stats.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.stats.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.update_aliases.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.update_aliases.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.update_aliases.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.update_aliases.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.upgrade.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.upgrade.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.upgrade.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.upgrade.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/indices.validate_query.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/indices.validate_query.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/indices.validate_query.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/indices.validate_query.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/info.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/info.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/info.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/info.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.delete_pipeline.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.delete_pipeline.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.delete_pipeline.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.delete_pipeline.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.get_pipeline.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.get_pipeline.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.get_pipeline.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.get_pipeline.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.processor_grok.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.processor_grok.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.processor_grok.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.processor_grok.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.put_pipeline.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.put_pipeline.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.put_pipeline.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.put_pipeline.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.simulate.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.simulate.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/ingest.simulate.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/ingest.simulate.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/mget.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/mget.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/mget.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/mget.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/msearch.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/msearch.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/msearch.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/msearch.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/msearch_template.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/msearch_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/msearch_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/msearch_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/mtermvectors.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/mtermvectors.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/mtermvectors.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/mtermvectors.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.hot_threads.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.hot_threads.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.hot_threads.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.hot_threads.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.info.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.info.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.info.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.info.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.reload_secure_settings.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.reload_secure_settings.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.reload_secure_settings.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.reload_secure_settings.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.stats.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.stats.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.stats.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.stats.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.usage.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.usage.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/nodes.usage.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/nodes.usage.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/ping.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/ping.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/ping.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/ping.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/put_script.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/put_script.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/put_script.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/put_script.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/rank_eval.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/rank_eval.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/rank_eval.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/rank_eval.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/reindex.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/reindex.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/reindex.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/reindex.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/reindex_rethrottle.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/reindex_rethrottle.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/reindex_rethrottle.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/reindex_rethrottle.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/render_search_template.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/render_search_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/render_search_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/render_search_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/scripts_painless_execute.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/scripts_painless_execute.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/scripts_painless_execute.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/scripts_painless_execute.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/scroll.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/scroll.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/scroll.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/scroll.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/search.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/search.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/search.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/search.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/search_shards.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/search_shards.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/search_shards.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/search_shards.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/search_template.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/search_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/search_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/search_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.cleanup_repository.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.cleanup_repository.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.cleanup_repository.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.cleanup_repository.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.create.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.create.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.create.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.create.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.create_repository.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.create_repository.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.create_repository.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.create_repository.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.delete.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.delete.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.delete.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.delete.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.delete_repository.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.delete_repository.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.delete_repository.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.delete_repository.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.get.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.get.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.get.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.get.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.get_repository.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.get_repository.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.get_repository.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.get_repository.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.restore.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.restore.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.restore.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.restore.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.status.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.status.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.status.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.status.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.verify_repository.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.verify_repository.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/snapshot.verify_repository.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/snapshot.verify_repository.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/tasks.cancel.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/tasks.cancel.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/tasks.cancel.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/tasks.cancel.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/tasks.get.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/tasks.get.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/tasks.get.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/tasks.get.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/tasks.list.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/tasks.list.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/tasks.list.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/tasks.list.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/termvectors.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/termvectors.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/termvectors.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/termvectors.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/update.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/update.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/update.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/update.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/update_by_query.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/update_by_query.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/update_by_query.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/update_by_query.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/generated/update_by_query_rethrottle.json b/src/plugins/console/server/lib/spec_definitions/spec/generated/update_by_query_rethrottle.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/generated/update_by_query_rethrottle.json rename to src/plugins/console/server/lib/spec_definitions/spec/generated/update_by_query_rethrottle.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/index.js b/src/plugins/console/server/lib/spec_definitions/spec/index.js similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/index.js rename to src/plugins/console/server/lib/spec_definitions/spec/index.js diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/clear_scroll.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/clear_scroll.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/clear_scroll.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/clear_scroll.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/cluster.health.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/cluster.health.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/cluster.health.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/cluster.health.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/cluster.put_settings.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/cluster.put_settings.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/cluster.put_settings.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/cluster.put_settings.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/cluster.reroute.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/cluster.reroute.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/cluster.reroute.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/cluster.reroute.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/count.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/count.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/count.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/count.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.analyze.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.analyze.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.analyze.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.analyze.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.clone.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.clone.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.clone.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.clone.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.create.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.create.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.create.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.create.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.delete_template.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.delete_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.delete_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.delete_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.exists_template.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.exists_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.exists_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.exists_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.get_field_mapping.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.get_field_mapping.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.get_field_mapping.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.get_field_mapping.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.get_mapping.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.get_mapping.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.get_mapping.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.get_mapping.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.get_template.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.get_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.get_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.get_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.put_alias.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.put_alias.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.put_alias.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.put_alias.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.put_settings.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.put_settings.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.put_settings.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.put_settings.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.put_template.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.put_template.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.put_template.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.put_template.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.rollover.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.rollover.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.rollover.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.rollover.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.update_aliases.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.update_aliases.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.update_aliases.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.update_aliases.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.validate_query.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.validate_query.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/indices.validate_query.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/indices.validate_query.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/snapshot.create.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/snapshot.create.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/snapshot.create.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/snapshot.create.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/snapshot.create_repository.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/snapshot.create_repository.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/snapshot.create_repository.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/snapshot.create_repository.json diff --git a/src/legacy/core_plugins/console/server/api_server/spec/overrides/snapshot.restore.json b/src/plugins/console/server/lib/spec_definitions/spec/overrides/snapshot.restore.json similarity index 100% rename from src/legacy/core_plugins/console/server/api_server/spec/overrides/snapshot.restore.json rename to src/plugins/console/server/lib/spec_definitions/spec/overrides/snapshot.restore.json diff --git a/src/legacy/core_plugins/console/server/wildcard_matcher.js b/src/plugins/console/server/lib/wildcard_matcher.ts similarity index 81% rename from src/legacy/core_plugins/console/server/wildcard_matcher.js rename to src/plugins/console/server/lib/wildcard_matcher.ts index b99fba9295e51..128ad19172c75 100644 --- a/src/legacy/core_plugins/console/server/wildcard_matcher.js +++ b/src/plugins/console/server/lib/wildcard_matcher.ts @@ -17,12 +17,14 @@ * under the License. */ -import { Minimatch } from 'minimatch'; +import { Minimatch, IMinimatch } from 'minimatch'; export class WildcardMatcher { - constructor(wildcardPattern, emptyVal) { - this.emptyVal = emptyVal; - this.pattern = String(wildcardPattern || '*'); + pattern: string; + matcher: IMinimatch; + + constructor(private readonly wildcardPattern: string, private readonly emptyVal?: string) { + this.pattern = String(this.wildcardPattern || '*'); this.matcher = new Minimatch(this.pattern, { noglobstar: true, dot: true, @@ -32,7 +34,7 @@ export class WildcardMatcher { }); } - match(candidate) { + match(candidate: string) { const empty = !candidate || candidate === this.emptyVal; if (empty && this.pattern === '*') { return true; diff --git a/src/plugins/console/server/plugin.ts b/src/plugins/console/server/plugin.ts new file mode 100644 index 0000000000000..c8ef84aee3b61 --- /dev/null +++ b/src/plugins/console/server/plugin.ts @@ -0,0 +1,81 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { first } from 'rxjs/operators'; +import { CoreSetup, Logger, Plugin, PluginInitializerContext } from 'kibana/server'; + +import { readLegacyEsConfig } from '../../../legacy/core_plugins/console_legacy'; + +import { ProxyConfigCollection, addExtensionSpecFilePath, addProcessorDefinition } from './lib'; +import { ConfigType } from './config'; +import { registerProxyRoute } from './routes/api/console/proxy'; +import { registerSpecDefinitionsRoute } from './routes/api/console/spec_definitions'; +import { ESConfigForProxy, ConsoleSetup } from './types'; + +export class ConsoleServerPlugin implements Plugin { + log: Logger; + + constructor(private readonly ctx: PluginInitializerContext) { + this.log = this.ctx.logger.get(); + } + + async setup({ http, capabilities, getStartServices }: CoreSetup) { + capabilities.registerProvider(() => ({ + dev_tools: { + show: true, + save: true, + }, + })); + + const config = await this.ctx.config + .create() + .pipe(first()) + .toPromise(); + + const { elasticsearch } = await this.ctx.config.legacy.globalConfig$.pipe(first()).toPromise(); + + const proxyPathFilters = config.proxyFilter.map((str: string) => new RegExp(str)); + + const router = http.createRouter(); + + registerProxyRoute({ + log: this.log, + proxyConfigCollection: new ProxyConfigCollection(config.proxyConfig), + readLegacyESConfig: (): ESConfigForProxy => { + const legacyConfig = readLegacyEsConfig(); + return { + ...elasticsearch, + hosts: legacyConfig.hosts, + requestHeadersWhitelist: legacyConfig.requestHeadersWhitelist, + customHeaders: legacyConfig.customHeaders, + }; + }, + pathFilters: proxyPathFilters, + router, + }); + + registerSpecDefinitionsRoute({ router }); + + return { + addExtensionSpecFilePath, + addProcessorDefinition, + }; + } + + start() {} +} diff --git a/src/plugins/console/server/routes/api/console/proxy/create_handler.ts b/src/plugins/console/server/routes/api/console/proxy/create_handler.ts new file mode 100644 index 0000000000000..50a9fcf03c209 --- /dev/null +++ b/src/plugins/console/server/routes/api/console/proxy/create_handler.ts @@ -0,0 +1,217 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Agent, IncomingMessage } from 'http'; +import * as url from 'url'; +import { pick, trimLeft, trimRight } from 'lodash'; + +import { KibanaRequest, Logger, RequestHandler } from 'kibana/server'; + +import { ESConfigForProxy } from '../../../../types'; +import { + getElasticsearchProxyConfig, + ProxyConfigCollection, + proxyRequest, + setHeaders, +} from '../../../../lib'; + +import { Body, Query } from './validation_config'; + +// TODO: find a better way to get information from the request like remoteAddress and remotePort +// for forwarding. +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { ensureRawRequest } from '../../../../../../../core/server/http/router'; + +export interface CreateHandlerDependencies { + log: Logger; + readLegacyESConfig: () => ESConfigForProxy; + pathFilters: RegExp[]; + proxyConfigCollection: ProxyConfigCollection; +} + +function toURL(base: string, path: string) { + const urlResult = new url.URL(`${trimRight(base, '/')}/${trimLeft(path, '/')}`); + // Appending pretty here to have Elasticsearch do the JSON formatting, as doing + // in JS can lead to data loss (7.0 will get munged into 7, thus losing indication of + // measurement precision) + if (!urlResult.searchParams.get('pretty')) { + urlResult.searchParams.append('pretty', 'true'); + } + return urlResult; +} + +function filterHeaders(originalHeaders: object, headersToKeep: string[]): object { + const normalizeHeader = function(header: any) { + if (!header) { + return ''; + } + header = header.toString(); + return header.trim().toLowerCase(); + }; + + // Normalize list of headers we want to allow in upstream request + const headersToKeepNormalized = headersToKeep.map(normalizeHeader); + + return pick(originalHeaders, headersToKeepNormalized); +} + +function getRequestConfig( + headers: object, + esConfig: ESConfigForProxy, + proxyConfigCollection: ProxyConfigCollection, + uri: string +): { agent: Agent; timeout: number; headers: object; rejectUnauthorized?: boolean } { + const filteredHeaders = filterHeaders(headers, esConfig.requestHeadersWhitelist); + const newHeaders = setHeaders(filteredHeaders, esConfig.customHeaders); + + if (proxyConfigCollection.hasConfig()) { + return { + ...proxyConfigCollection.configForUri(uri), + headers: newHeaders, + } as any; + } + + return { + ...getElasticsearchProxyConfig(esConfig), + headers: newHeaders, + }; +} + +function getProxyHeaders(req: KibanaRequest) { + const headers = Object.create(null); + + // Scope this proto-unsafe functionality to where it is being used. + function extendCommaList(obj: Record, property: string, value: any) { + obj[property] = (obj[property] ? obj[property] + ',' : '') + value; + } + + const _req = ensureRawRequest(req); + + if (_req?.info?.remotePort && _req?.info?.remoteAddress) { + // see https://git.io/vytQ7 + extendCommaList(headers, 'x-forwarded-for', _req.info.remoteAddress); + extendCommaList(headers, 'x-forwarded-port', _req.info.remotePort); + extendCommaList(headers, 'x-forwarded-proto', _req.server.info.protocol); + extendCommaList(headers, 'x-forwarded-host', _req.info.host); + } + + const contentType = req.headers['content-type']; + if (contentType) { + headers['content-type'] = contentType; + } + return headers; +} + +export const createHandler = ({ + log, + readLegacyESConfig, + pathFilters, + proxyConfigCollection, +}: CreateHandlerDependencies): RequestHandler => async ( + ctx, + request, + response +) => { + const { body, query } = request; + const { path, method } = query; + + if (!pathFilters.some(re => re.test(path))) { + return response.forbidden({ + body: `Error connecting to '${path}':\n\nUnable to send requests to that path.`, + headers: { + 'Content-Type': 'text/plain', + }, + }); + } + + const legacyConfig = readLegacyESConfig(); + const { hosts } = legacyConfig; + let esIncomingMessage: IncomingMessage; + + for (let idx = 0; idx < hosts.length; ++idx) { + const host = hosts[idx]; + try { + const uri = toURL(host, path); + + // Because this can technically be provided by a settings-defined proxy config, we need to + // preserve these property names to maintain BWC. + const { timeout, agent, headers, rejectUnauthorized } = getRequestConfig( + request.headers, + legacyConfig, + proxyConfigCollection, + uri.toString() + ); + + const requestHeaders = { + ...headers, + ...getProxyHeaders(request), + }; + + esIncomingMessage = await proxyRequest({ + method: method.toLowerCase() as any, + headers: requestHeaders, + uri, + timeout, + payload: body, + rejectUnauthorized, + agent, + }); + + break; + } catch (e) { + log.error(e); + if (e.code !== 'ECONNREFUSED') { + return response.internalError(e); + } + if (idx === hosts.length - 1) { + log.warn(`Could not connect to any configured ES node [${hosts.join(', ')}]`); + return response.customError({ + statusCode: 502, + body: e, + }); + } + // Otherwise, try the next host... + } + } + + const { + statusCode, + statusMessage, + headers: { warning }, + } = esIncomingMessage!; + + if (method.toUpperCase() !== 'HEAD') { + return response.custom({ + statusCode: statusCode!, + body: esIncomingMessage!, + headers: { + warning: warning || '', + }, + }); + } + + return response.custom({ + statusCode: statusCode!, + body: `${statusCode} - ${statusMessage}`, + headers: { + warning: warning || '', + 'Content-Type': 'text/plain', + }, + }); +}; diff --git a/src/plugins/console/server/routes/api/console/proxy/index.ts b/src/plugins/console/server/routes/api/console/proxy/index.ts new file mode 100644 index 0000000000000..5f7df1d7cf66b --- /dev/null +++ b/src/plugins/console/server/routes/api/console/proxy/index.ts @@ -0,0 +1,44 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { IRouter } from 'kibana/server'; +import { routeValidationConfig } from './validation_config'; +import { createHandler, CreateHandlerDependencies } from './create_handler'; + +export const registerProxyRoute = ( + deps: { + router: IRouter; + } & CreateHandlerDependencies +) => { + const { router, ...handlerDeps } = deps; + router.post( + { + path: '/api/console/proxy', + options: { + tags: ['access:console'], + body: { + output: 'stream', + parse: false, + }, + }, + validate: routeValidationConfig, + }, + createHandler(handlerDeps) + ); +}; diff --git a/src/plugins/console/server/routes/api/console/proxy/validation_config.ts b/src/plugins/console/server/routes/api/console/proxy/validation_config.ts new file mode 100644 index 0000000000000..f2372e9ee80d0 --- /dev/null +++ b/src/plugins/console/server/routes/api/console/proxy/validation_config.ts @@ -0,0 +1,44 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { schema, TypeOf } from '@kbn/config-schema'; + +export type Query = TypeOf; +export type Body = TypeOf; + +const acceptedHttpVerb = schema.string({ + validate: method => { + return ['HEAD', 'GET', 'POST', 'PUT', 'DELETE'].some( + verb => verb.toLowerCase() === method.toLowerCase() + ) + ? undefined + : `Method must be one of, case insensitive ['HEAD', 'GET', 'POST', 'PUT', 'DELETE']. Received '${method}'.`; + }, +}); + +const nonEmptyString = schema.string({ + validate: s => (s === '' ? 'Expected non-empty string' : undefined), +}); + +export const routeValidationConfig = { + query: schema.object({ + method: acceptedHttpVerb, + path: nonEmptyString, + }), + body: schema.stream(), +}; diff --git a/src/plugins/console/server/routes/api/console/spec_definitions/index.ts b/src/plugins/console/server/routes/api/console/spec_definitions/index.ts new file mode 100644 index 0000000000000..e2ece37f407ac --- /dev/null +++ b/src/plugins/console/server/routes/api/console/spec_definitions/index.ts @@ -0,0 +1,48 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { schema, TypeOf } from '@kbn/config-schema'; +import { IRouter, RequestHandler } from 'kibana/server'; +import { resolveApi } from '../../../../lib/spec_definitions'; + +export const registerSpecDefinitionsRoute = ({ router }: { router: IRouter }) => { + const handler: RequestHandler> = async ( + ctx, + request, + response + ) => { + const { sense_version: version, apis } = request.query; + + return response.ok({ + body: resolveApi(version, apis.split(',')), + headers: { + 'Content-Type': 'application/json', + }, + }); + }; + + const validate = { + query: schema.object({ + sense_version: schema.string({ defaultValue: '' }), + apis: schema.string(), + }), + }; + + router.get({ path: '/api/console/api_server', validate }, handler); + router.post({ path: '/api/console/api_server', validate }, handler); +}; diff --git a/src/plugins/console/server/types.ts b/src/plugins/console/server/types.ts new file mode 100644 index 0000000000000..60ce56ad39fcd --- /dev/null +++ b/src/plugins/console/server/types.ts @@ -0,0 +1,34 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Duration } from 'moment'; +import { ConsoleServerPlugin } from './plugin'; + +/** @public */ +export type ConsoleSetup = ReturnType extends Promise + ? U + : ReturnType; + +/** @internal */ +export interface ESConfigForProxy { + hosts: string[]; + requestHeadersWhitelist: string[]; + customHeaders: Record; + requestTimeout: Duration; +} diff --git a/x-pack/index.js b/x-pack/index.js index 83a7b5540334f..9ab6e2ee322d9 100644 --- a/x-pack/index.js +++ b/x-pack/index.js @@ -22,7 +22,6 @@ import { maps } from './legacy/plugins/maps'; import { licenseManagement } from './legacy/plugins/license_management'; import { indexManagement } from './legacy/plugins/index_management'; import { indexLifecycleManagement } from './legacy/plugins/index_lifecycle_management'; -import { consoleExtensions } from './legacy/plugins/console_extensions'; import { spaces } from './legacy/plugins/spaces'; import { kueryAutocompleteInitializer } from './legacy/plugins/kuery_autocomplete'; import { canvas } from './legacy/plugins/canvas'; @@ -65,7 +64,6 @@ module.exports = function(kibana) { canvas(kibana), licenseManagement(kibana), indexManagement(kibana), - consoleExtensions(kibana), indexLifecycleManagement(kibana), kueryAutocompleteInitializer(kibana), infra(kibana), diff --git a/x-pack/legacy/plugins/console_extensions/index.js b/x-pack/legacy/plugins/console_extensions/index.js deleted file mode 100644 index fd1b48f0fd6b1..0000000000000 --- a/x-pack/legacy/plugins/console_extensions/index.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { join } from 'path'; -import { processors } from './spec/ingest'; - -export function consoleExtensions(kibana) { - return new kibana.Plugin({ - id: 'console_extensions', - require: ['kibana', 'console'], - isEnabled(config) { - return ( - config.get('console_extensions.enabled') && - config.has('console.enabled') && - config.get('console.enabled') - ); - }, - - config(Joi) { - return Joi.object({ - enabled: Joi.boolean().default(true), - }).default(); - }, - - init: server => { - if ( - server.plugins.console && - server.plugins.console.addExtensionSpecFilePath && - server.plugins.console.addProcessorDefinition - ) { - const { addExtensionSpecFilePath, addProcessorDefinition } = server.plugins.console; - - addExtensionSpecFilePath(join(__dirname, 'spec/')); - - processors.forEach(processor => addProcessorDefinition(processor)); - } else { - console.warn( - 'Missing server.plugins.console.addExtensionSpecFilePath extension point.', - 'Cannot add xpack APIs to autocomplete.' - ); - } - }, - }); -} diff --git a/x-pack/plugins/console_extensions/kibana.json b/x-pack/plugins/console_extensions/kibana.json new file mode 100644 index 0000000000000..9411523d3f6dd --- /dev/null +++ b/x-pack/plugins/console_extensions/kibana.json @@ -0,0 +1,8 @@ +{ + "id": "consoleExtensions", + "version": "1.0.0", + "kibanaVersion": "kibana", + "requiredPlugins": ["console"], + "server": true, + "ui": false +} diff --git a/x-pack/plugins/console_extensions/server/config.ts b/x-pack/plugins/console_extensions/server/config.ts new file mode 100644 index 0000000000000..c429e0fce13fa --- /dev/null +++ b/x-pack/plugins/console_extensions/server/config.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { schema, TypeOf } from '@kbn/config-schema'; + +export type ConfigType = TypeOf; + +export const config = schema.object({ + enabled: schema.boolean({ defaultValue: true }), +}); diff --git a/x-pack/plugins/console_extensions/server/index.ts b/x-pack/plugins/console_extensions/server/index.ts new file mode 100644 index 0000000000000..7fc16d4507da9 --- /dev/null +++ b/x-pack/plugins/console_extensions/server/index.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { PluginInitializerContext, PluginConfigDescriptor } from 'kibana/server'; + +import { config as configSchema, ConfigType } from './config'; +import { ConsoleExtensionsServerPlugin } from './plugin'; + +export const plugin = (ctx: PluginInitializerContext) => new ConsoleExtensionsServerPlugin(ctx); + +export const config: PluginConfigDescriptor = { + schema: configSchema, +}; diff --git a/x-pack/plugins/console_extensions/server/plugin.ts b/x-pack/plugins/console_extensions/server/plugin.ts new file mode 100644 index 0000000000000..f4c41aa0a0ad5 --- /dev/null +++ b/x-pack/plugins/console_extensions/server/plugin.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { join } from 'path'; +import { CoreSetup, Logger, Plugin, PluginInitializerContext } from 'kibana/server'; + +import { ConsoleSetup } from '../../../../src/plugins/console/server'; + +import { processors } from './spec/ingest/index'; + +interface SetupDependencies { + console: ConsoleSetup; +} + +export class ConsoleExtensionsServerPlugin implements Plugin { + log: Logger; + constructor(private readonly ctx: PluginInitializerContext) { + this.log = this.ctx.logger.get(); + } + + setup( + core: CoreSetup, + { console: { addProcessorDefinition, addExtensionSpecFilePath } }: SetupDependencies + ) { + addExtensionSpecFilePath(join(__dirname, 'spec/')); + processors.forEach(processor => addProcessorDefinition(processor)); + this.log.debug('Installed console autocomplete extensions.'); + } + start() {} +} diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.delete_auto_follow_pattern.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.delete_auto_follow_pattern.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.delete_auto_follow_pattern.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.delete_auto_follow_pattern.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.follow.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.follow.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.follow.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.follow.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.follow_info.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.follow_info.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.follow_info.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.follow_info.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.follow_stats.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.follow_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.follow_stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.follow_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.forget_follower.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.forget_follower.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.forget_follower.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.forget_follower.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.get_auto_follow_pattern.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.get_auto_follow_pattern.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.get_auto_follow_pattern.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.get_auto_follow_pattern.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.pause_auto_follow_pattern.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.pause_auto_follow_pattern.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.pause_auto_follow_pattern.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.pause_auto_follow_pattern.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.pause_follow.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.pause_follow.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.pause_follow.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.pause_follow.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.put_auto_follow_pattern.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.put_auto_follow_pattern.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.put_auto_follow_pattern.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.put_auto_follow_pattern.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.resume_auto_follow_pattern.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.resume_auto_follow_pattern.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.resume_auto_follow_pattern.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.resume_auto_follow_pattern.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.resume_follow.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.resume_follow.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.resume_follow.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.resume_follow.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.stats.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ccr.unfollow.json b/x-pack/plugins/console_extensions/server/spec/generated/ccr.unfollow.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ccr.unfollow.json rename to x-pack/plugins/console_extensions/server/spec/generated/ccr.unfollow.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/enrich.delete_policy.json b/x-pack/plugins/console_extensions/server/spec/generated/enrich.delete_policy.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/enrich.delete_policy.json rename to x-pack/plugins/console_extensions/server/spec/generated/enrich.delete_policy.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/enrich.execute_policy.json b/x-pack/plugins/console_extensions/server/spec/generated/enrich.execute_policy.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/enrich.execute_policy.json rename to x-pack/plugins/console_extensions/server/spec/generated/enrich.execute_policy.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/enrich.get_policy.json b/x-pack/plugins/console_extensions/server/spec/generated/enrich.get_policy.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/enrich.get_policy.json rename to x-pack/plugins/console_extensions/server/spec/generated/enrich.get_policy.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/enrich.put_policy.json b/x-pack/plugins/console_extensions/server/spec/generated/enrich.put_policy.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/enrich.put_policy.json rename to x-pack/plugins/console_extensions/server/spec/generated/enrich.put_policy.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/enrich.stats.json b/x-pack/plugins/console_extensions/server/spec/generated/enrich.stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/enrich.stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/enrich.stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/graph.explore.json b/x-pack/plugins/console_extensions/server/spec/generated/graph.explore.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/graph.explore.json rename to x-pack/plugins/console_extensions/server/spec/generated/graph.explore.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.delete_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.delete_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.delete_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.delete_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.explain_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.explain_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.explain_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.explain_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.get_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.get_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.get_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.get_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.get_status.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.get_status.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.get_status.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.get_status.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.move_to_step.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.move_to_step.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.move_to_step.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.move_to_step.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.put_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.put_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.put_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.put_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.remove_policy.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.remove_policy.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.remove_policy.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.remove_policy.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.retry.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.retry.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.retry.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.retry.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.set_policy.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.set_policy.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.set_policy.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.set_policy.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.start.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.start.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.start.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.start.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ilm.stop.json b/x-pack/plugins/console_extensions/server/spec/generated/ilm.stop.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ilm.stop.json rename to x-pack/plugins/console_extensions/server/spec/generated/ilm.stop.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/indices.freeze.json b/x-pack/plugins/console_extensions/server/spec/generated/indices.freeze.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/indices.freeze.json rename to x-pack/plugins/console_extensions/server/spec/generated/indices.freeze.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/indices.reload_search_analyzers.json b/x-pack/plugins/console_extensions/server/spec/generated/indices.reload_search_analyzers.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/indices.reload_search_analyzers.json rename to x-pack/plugins/console_extensions/server/spec/generated/indices.reload_search_analyzers.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/indices.unfreeze.json b/x-pack/plugins/console_extensions/server/spec/generated/indices.unfreeze.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/indices.unfreeze.json rename to x-pack/plugins/console_extensions/server/spec/generated/indices.unfreeze.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/license.delete.json b/x-pack/plugins/console_extensions/server/spec/generated/license.delete.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/license.delete.json rename to x-pack/plugins/console_extensions/server/spec/generated/license.delete.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/license.get.json b/x-pack/plugins/console_extensions/server/spec/generated/license.get.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/license.get.json rename to x-pack/plugins/console_extensions/server/spec/generated/license.get.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/license.get_basic_status.json b/x-pack/plugins/console_extensions/server/spec/generated/license.get_basic_status.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/license.get_basic_status.json rename to x-pack/plugins/console_extensions/server/spec/generated/license.get_basic_status.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/license.get_trial_status.json b/x-pack/plugins/console_extensions/server/spec/generated/license.get_trial_status.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/license.get_trial_status.json rename to x-pack/plugins/console_extensions/server/spec/generated/license.get_trial_status.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/license.post.json b/x-pack/plugins/console_extensions/server/spec/generated/license.post.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/license.post.json rename to x-pack/plugins/console_extensions/server/spec/generated/license.post.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/license.post_start_basic.json b/x-pack/plugins/console_extensions/server/spec/generated/license.post_start_basic.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/license.post_start_basic.json rename to x-pack/plugins/console_extensions/server/spec/generated/license.post_start_basic.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/license.post_start_trial.json b/x-pack/plugins/console_extensions/server/spec/generated/license.post_start_trial.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/license.post_start_trial.json rename to x-pack/plugins/console_extensions/server/spec/generated/license.post_start_trial.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/migration.deprecations.json b/x-pack/plugins/console_extensions/server/spec/generated/migration.deprecations.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/migration.deprecations.json rename to x-pack/plugins/console_extensions/server/spec/generated/migration.deprecations.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/migration.get_assistance.json b/x-pack/plugins/console_extensions/server/spec/generated/migration.get_assistance.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/migration.get_assistance.json rename to x-pack/plugins/console_extensions/server/spec/generated/migration.get_assistance.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/migration.upgrade.json b/x-pack/plugins/console_extensions/server/spec/generated/migration.upgrade.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/migration.upgrade.json rename to x-pack/plugins/console_extensions/server/spec/generated/migration.upgrade.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.close_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.close_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.close_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.close_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_calendar.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_calendar.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_calendar.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_calendar.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_calendar_event.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_calendar_event.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_calendar_event.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_calendar_event.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_calendar_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_calendar_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_calendar_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_calendar_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_datafeed.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_expired_data.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_expired_data.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_expired_data.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_expired_data.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_filter.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_filter.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_filter.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_filter.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_forecast.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_forecast.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_forecast.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_forecast.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_model_snapshot.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_model_snapshot.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_model_snapshot.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_model_snapshot.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_trained_model.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.delete_trained_model.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.delete_trained_model.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.delete_trained_model.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.estimate_memory_usage.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.estimate_memory_usage.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.estimate_memory_usage.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.estimate_memory_usage.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.evaluate_data_frame.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.evaluate_data_frame.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.evaluate_data_frame.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.evaluate_data_frame.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.explain_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.explain_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.explain_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.explain_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.find_file_structure.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.find_file_structure.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.find_file_structure.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.find_file_structure.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.flush_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.flush_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.flush_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.flush_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.forecast.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.forecast.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.forecast.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.forecast.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_buckets.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_buckets.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_buckets.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_buckets.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_calendar_events.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_calendar_events.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_calendar_events.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_calendar_events.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_calendars.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_calendars.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_calendars.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_calendars.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_categories.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_categories.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_categories.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_categories.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_data_frame_analytics_stats.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_data_frame_analytics_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_data_frame_analytics_stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_data_frame_analytics_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_datafeed_stats.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_datafeed_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_datafeed_stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_datafeed_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_datafeeds.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_datafeeds.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_datafeeds.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_datafeeds.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_filters.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_filters.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_filters.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_filters.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_influencers.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_influencers.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_influencers.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_influencers.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_job_stats.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_job_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_job_stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_job_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_jobs.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_jobs.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_jobs.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_jobs.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_model_snapshots.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_model_snapshots.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_model_snapshots.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_model_snapshots.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_overall_buckets.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_overall_buckets.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_overall_buckets.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_overall_buckets.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_records.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_records.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_records.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_records.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_trained_models.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_trained_models.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_trained_models.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_trained_models.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_trained_models_stats.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.get_trained_models_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.get_trained_models_stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.get_trained_models_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.info.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.info.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.info.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.info.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.open_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.open_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.open_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.open_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.post_calendar_events.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.post_calendar_events.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.post_calendar_events.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.post_calendar_events.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.post_data.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.post_data.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.post_data.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.post_data.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.preview_datafeed.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.preview_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.preview_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.preview_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_calendar.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.put_calendar.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_calendar.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.put_calendar.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_calendar_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.put_calendar_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_calendar_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.put_calendar_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.put_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.put_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_datafeed.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.put_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.put_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_filter.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.put_filter.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_filter.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.put_filter.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.put_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.put_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_trained_model.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.put_trained_model.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.put_trained_model.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.put_trained_model.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.revert_model_snapshot.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.revert_model_snapshot.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.revert_model_snapshot.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.revert_model_snapshot.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.set_upgrade_mode.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.set_upgrade_mode.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.set_upgrade_mode.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.set_upgrade_mode.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.start_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.start_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.start_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.start_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.start_datafeed.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.start_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.start_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.start_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.stop_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.stop_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.stop_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.stop_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.stop_datafeed.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.stop_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.stop_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.stop_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_datafeed.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.update_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.update_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_filter.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.update_filter.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_filter.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.update_filter.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_job.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.update_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.update_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_model_snapshot.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.update_model_snapshot.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.update_model_snapshot.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.update_model_snapshot.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.upgrade.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.upgrade.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.upgrade.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.upgrade.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.validate.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.validate.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.validate.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.validate.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ml.validate_detector.json b/x-pack/plugins/console_extensions/server/spec/generated/ml.validate_detector.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ml.validate_detector.json rename to x-pack/plugins/console_extensions/server/spec/generated/ml.validate_detector.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/monitoring.bulk.json b/x-pack/plugins/console_extensions/server/spec/generated/monitoring.bulk.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/monitoring.bulk.json rename to x-pack/plugins/console_extensions/server/spec/generated/monitoring.bulk.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.delete_job.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.delete_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.delete_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.delete_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.get_jobs.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.get_jobs.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.get_jobs.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.get_jobs.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.get_rollup_caps.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.get_rollup_caps.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.get_rollup_caps.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.get_rollup_caps.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.get_rollup_index_caps.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.get_rollup_index_caps.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.get_rollup_index_caps.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.get_rollup_index_caps.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.put_job.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.put_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.put_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.put_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.rollup_search.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.rollup_search.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.rollup_search.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.rollup_search.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.start_job.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.start_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.start_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.start_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/rollup.stop_job.json b/x-pack/plugins/console_extensions/server/spec/generated/rollup.stop_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/rollup.stop_job.json rename to x-pack/plugins/console_extensions/server/spec/generated/rollup.stop_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.authenticate.json b/x-pack/plugins/console_extensions/server/spec/generated/security.authenticate.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.authenticate.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.authenticate.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.change_password.json b/x-pack/plugins/console_extensions/server/spec/generated/security.change_password.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.change_password.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.change_password.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.clear_cached_realms.json b/x-pack/plugins/console_extensions/server/spec/generated/security.clear_cached_realms.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.clear_cached_realms.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.clear_cached_realms.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.clear_cached_roles.json b/x-pack/plugins/console_extensions/server/spec/generated/security.clear_cached_roles.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.clear_cached_roles.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.clear_cached_roles.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.create_api_key.json b/x-pack/plugins/console_extensions/server/spec/generated/security.create_api_key.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.create_api_key.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.create_api_key.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_privileges.json b/x-pack/plugins/console_extensions/server/spec/generated/security.delete_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_privileges.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.delete_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_role.json b/x-pack/plugins/console_extensions/server/spec/generated/security.delete_role.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_role.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.delete_role.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_role_mapping.json b/x-pack/plugins/console_extensions/server/spec/generated/security.delete_role_mapping.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_role_mapping.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.delete_role_mapping.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_user.json b/x-pack/plugins/console_extensions/server/spec/generated/security.delete_user.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.delete_user.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.delete_user.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.disable_user.json b/x-pack/plugins/console_extensions/server/spec/generated/security.disable_user.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.disable_user.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.disable_user.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.enable_user.json b/x-pack/plugins/console_extensions/server/spec/generated/security.enable_user.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.enable_user.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.enable_user.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_api_key.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_api_key.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_api_key.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_api_key.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_builtin_privileges.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_builtin_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_builtin_privileges.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_builtin_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_privileges.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_privileges.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_role.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_role.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_role.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_role.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_role_mapping.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_role_mapping.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_role_mapping.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_role_mapping.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_token.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_token.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_token.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_token.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_user.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_user.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_user.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_user.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.get_user_privileges.json b/x-pack/plugins/console_extensions/server/spec/generated/security.get_user_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.get_user_privileges.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.get_user_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.has_privileges.json b/x-pack/plugins/console_extensions/server/spec/generated/security.has_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.has_privileges.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.has_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.invalidate_api_key.json b/x-pack/plugins/console_extensions/server/spec/generated/security.invalidate_api_key.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.invalidate_api_key.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.invalidate_api_key.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.invalidate_token.json b/x-pack/plugins/console_extensions/server/spec/generated/security.invalidate_token.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.invalidate_token.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.invalidate_token.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.put_privileges.json b/x-pack/plugins/console_extensions/server/spec/generated/security.put_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.put_privileges.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.put_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.put_role.json b/x-pack/plugins/console_extensions/server/spec/generated/security.put_role.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.put_role.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.put_role.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.put_role_mapping.json b/x-pack/plugins/console_extensions/server/spec/generated/security.put_role_mapping.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.put_role_mapping.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.put_role_mapping.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/security.put_user.json b/x-pack/plugins/console_extensions/server/spec/generated/security.put_user.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/security.put_user.json rename to x-pack/plugins/console_extensions/server/spec/generated/security.put_user.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.delete_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.delete_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.delete_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.delete_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.execute_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.execute_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.execute_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.execute_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.execute_retention.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.execute_retention.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.execute_retention.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.execute_retention.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.get_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.get_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.get_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.get_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.get_stats.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.get_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.get_stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.get_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.get_status.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.get_status.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.get_status.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.get_status.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.put_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.put_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.put_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.put_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.start.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.start.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.start.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.start.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/slm.stop.json b/x-pack/plugins/console_extensions/server/spec/generated/slm.stop.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/slm.stop.json rename to x-pack/plugins/console_extensions/server/spec/generated/slm.stop.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/sql.clear_cursor.json b/x-pack/plugins/console_extensions/server/spec/generated/sql.clear_cursor.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/sql.clear_cursor.json rename to x-pack/plugins/console_extensions/server/spec/generated/sql.clear_cursor.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/sql.query.json b/x-pack/plugins/console_extensions/server/spec/generated/sql.query.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/sql.query.json rename to x-pack/plugins/console_extensions/server/spec/generated/sql.query.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/sql.translate.json b/x-pack/plugins/console_extensions/server/spec/generated/sql.translate.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/sql.translate.json rename to x-pack/plugins/console_extensions/server/spec/generated/sql.translate.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/ssl.certificates.json b/x-pack/plugins/console_extensions/server/spec/generated/ssl.certificates.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/ssl.certificates.json rename to x-pack/plugins/console_extensions/server/spec/generated/ssl.certificates.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.delete_transform.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.delete_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.delete_transform.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.delete_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.get_transform.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.get_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.get_transform.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.get_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.get_transform_stats.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.get_transform_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.get_transform_stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.get_transform_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.preview_transform.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.preview_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.preview_transform.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.preview_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.put_transform.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.put_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.put_transform.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.put_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.start_transform.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.start_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.start_transform.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.start_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.stop_transform.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.stop_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.stop_transform.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.stop_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/transform.update_transform.json b/x-pack/plugins/console_extensions/server/spec/generated/transform.update_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/transform.update_transform.json rename to x-pack/plugins/console_extensions/server/spec/generated/transform.update_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.ack_watch.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.ack_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.ack_watch.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.ack_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.activate_watch.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.activate_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.activate_watch.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.activate_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.deactivate_watch.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.deactivate_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.deactivate_watch.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.deactivate_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.delete_watch.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.delete_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.delete_watch.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.delete_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.execute_watch.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.execute_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.execute_watch.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.execute_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.get_watch.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.get_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.get_watch.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.get_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.put_watch.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.put_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.put_watch.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.put_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.start.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.start.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.start.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.start.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.stats.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.stats.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/watcher.stop.json b/x-pack/plugins/console_extensions/server/spec/generated/watcher.stop.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/watcher.stop.json rename to x-pack/plugins/console_extensions/server/spec/generated/watcher.stop.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/xpack.info.json b/x-pack/plugins/console_extensions/server/spec/generated/xpack.info.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/xpack.info.json rename to x-pack/plugins/console_extensions/server/spec/generated/xpack.info.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/xpack.ssl.certificates.json b/x-pack/plugins/console_extensions/server/spec/generated/xpack.ssl.certificates.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/xpack.ssl.certificates.json rename to x-pack/plugins/console_extensions/server/spec/generated/xpack.ssl.certificates.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/generated/xpack.usage.json b/x-pack/plugins/console_extensions/server/spec/generated/xpack.usage.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/generated/xpack.usage.json rename to x-pack/plugins/console_extensions/server/spec/generated/xpack.usage.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/ingest/index.js b/x-pack/plugins/console_extensions/server/spec/ingest/index.ts similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/ingest/index.js rename to x-pack/plugins/console_extensions/server/spec/ingest/index.ts diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.follow.json b/x-pack/plugins/console_extensions/server/spec/overrides/ccr.follow.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.follow.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ccr.follow.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.forget_follower.json b/x-pack/plugins/console_extensions/server/spec/overrides/ccr.forget_follower.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.forget_follower.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ccr.forget_follower.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.put_auto_follow_pattern.json b/x-pack/plugins/console_extensions/server/spec/overrides/ccr.put_auto_follow_pattern.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.put_auto_follow_pattern.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ccr.put_auto_follow_pattern.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.resume_follow.json b/x-pack/plugins/console_extensions/server/spec/overrides/ccr.resume_follow.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ccr.resume_follow.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ccr.resume_follow.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/enrich.put_policy.json b/x-pack/plugins/console_extensions/server/spec/overrides/enrich.put_policy.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/enrich.put_policy.json rename to x-pack/plugins/console_extensions/server/spec/overrides/enrich.put_policy.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ilm.move_to_step.json b/x-pack/plugins/console_extensions/server/spec/overrides/ilm.move_to_step.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ilm.move_to_step.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ilm.move_to_step.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ilm.put_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/overrides/ilm.put_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ilm.put_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ilm.put_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.estimate_memory_usage.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.estimate_memory_usage.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.estimate_memory_usage.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.estimate_memory_usage.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.evaluate_data_frame.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.evaluate_data_frame.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.evaluate_data_frame.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.evaluate_data_frame.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.explain_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.explain_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.explain_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.explain_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_buckets.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_buckets.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_buckets.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_buckets.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_calendar_events.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_calendar_events.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_calendar_events.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_calendar_events.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_calendars.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_calendars.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_calendars.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_calendars.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_categories.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_categories.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_categories.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_categories.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_influencers.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_influencers.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_influencers.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_influencers.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_model_snapshots.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_model_snapshots.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_model_snapshots.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_model_snapshots.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_overall_buckets.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_overall_buckets.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_overall_buckets.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_overall_buckets.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_records.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.get_records.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.get_records.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.get_records.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.post_calendar_events.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.post_calendar_events.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.post_calendar_events.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.post_calendar_events.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_calendar.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.put_calendar.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_calendar.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.put_calendar.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_data_frame_analytics.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.put_data_frame_analytics.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_data_frame_analytics.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.put_data_frame_analytics.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_datafeed.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.put_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.put_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_job.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.put_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_job.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.put_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_trained_model.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.put_trained_model.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.put_trained_model.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.put_trained_model.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.revert_model_snapshot.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.revert_model_snapshot.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.revert_model_snapshot.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.revert_model_snapshot.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.update_datafeed.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.update_datafeed.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.update_datafeed.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.update_datafeed.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.update_job.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.update_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.update_job.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.update_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/ml.update_model_snapshot.json b/x-pack/plugins/console_extensions/server/spec/overrides/ml.update_model_snapshot.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/ml.update_model_snapshot.json rename to x-pack/plugins/console_extensions/server/spec/overrides/ml.update_model_snapshot.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.authenticate.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.authenticate.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.authenticate.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.authenticate.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.change_password.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.change_password.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.change_password.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.change_password.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.create_api_key.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.create_api_key.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.create_api_key.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.create_api_key.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.delete_privileges.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.delete_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.delete_privileges.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.delete_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.get_token.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.get_token.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.get_token.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.get_token.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.has_privileges.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.has_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.has_privileges.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.has_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.invalidate_api_key.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.invalidate_api_key.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.invalidate_api_key.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.invalidate_api_key.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.invalidate_token.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.invalidate_token.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.invalidate_token.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.invalidate_token.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_privileges.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.put_privileges.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_privileges.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.put_privileges.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_role.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.put_role.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_role.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.put_role.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_role_mapping.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.put_role_mapping.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_role_mapping.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.put_role_mapping.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_user.json b/x-pack/plugins/console_extensions/server/spec/overrides/security.put_user.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/security.put_user.json rename to x-pack/plugins/console_extensions/server/spec/overrides/security.put_user.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/slm.put_lifecycle.json b/x-pack/plugins/console_extensions/server/spec/overrides/slm.put_lifecycle.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/slm.put_lifecycle.json rename to x-pack/plugins/console_extensions/server/spec/overrides/slm.put_lifecycle.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/slm.start.json b/x-pack/plugins/console_extensions/server/spec/overrides/slm.start.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/slm.start.json rename to x-pack/plugins/console_extensions/server/spec/overrides/slm.start.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/slm.stop.json b/x-pack/plugins/console_extensions/server/spec/overrides/slm.stop.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/slm.stop.json rename to x-pack/plugins/console_extensions/server/spec/overrides/slm.stop.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/sql.query.json b/x-pack/plugins/console_extensions/server/spec/overrides/sql.query.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/sql.query.json rename to x-pack/plugins/console_extensions/server/spec/overrides/sql.query.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/transform.get_transform_stats.json b/x-pack/plugins/console_extensions/server/spec/overrides/transform.get_transform_stats.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/transform.get_transform_stats.json rename to x-pack/plugins/console_extensions/server/spec/overrides/transform.get_transform_stats.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/transform.preview_transform.json b/x-pack/plugins/console_extensions/server/spec/overrides/transform.preview_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/transform.preview_transform.json rename to x-pack/plugins/console_extensions/server/spec/overrides/transform.preview_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/transform.put_transform.json b/x-pack/plugins/console_extensions/server/spec/overrides/transform.put_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/transform.put_transform.json rename to x-pack/plugins/console_extensions/server/spec/overrides/transform.put_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/transform.stop_transform.json b/x-pack/plugins/console_extensions/server/spec/overrides/transform.stop_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/transform.stop_transform.json rename to x-pack/plugins/console_extensions/server/spec/overrides/transform.stop_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/transform.update_transform.json b/x-pack/plugins/console_extensions/server/spec/overrides/transform.update_transform.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/transform.update_transform.json rename to x-pack/plugins/console_extensions/server/spec/overrides/transform.update_transform.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.graph.explore.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.graph.explore.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.graph.explore.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.graph.explore.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.info.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.info.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.info.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.info.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.license.post.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.license.post.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.license.post.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.license.post.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.rollup.delete_job.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.rollup.delete_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.rollup.delete_job.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.rollup.delete_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.rollup.put_job.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.rollup.put_job.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.rollup.put_job.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.rollup.put_job.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.rollup.rollup_search.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.rollup.rollup_search.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.rollup.rollup_search.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.rollup.rollup_search.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.authenticate.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.authenticate.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.authenticate.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.authenticate.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.change_password.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.change_password.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.change_password.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.change_password.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.get_token.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.get_token.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.get_token.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.get_token.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.invalidate_token.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.invalidate_token.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.invalidate_token.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.invalidate_token.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.put_role.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.put_role.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.put_role.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.put_role.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.put_role_mapping.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.put_role_mapping.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.put_role_mapping.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.put_role_mapping.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.put_user.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.put_user.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.security.put_user.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.security.put_user.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.watcher.execute_watch.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.watcher.execute_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.watcher.execute_watch.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.watcher.execute_watch.json diff --git a/x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.watcher.put_watch.json b/x-pack/plugins/console_extensions/server/spec/overrides/xpack.watcher.put_watch.json similarity index 100% rename from x-pack/legacy/plugins/console_extensions/spec/overrides/xpack.watcher.put_watch.json rename to x-pack/plugins/console_extensions/server/spec/overrides/xpack.watcher.put_watch.json From 395e7b6907fc68a47a1396e0ccc40510814e34a1 Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Thu, 30 Jan 2020 11:09:12 +0100 Subject: [PATCH 68/72] =?UTF-8?q?[Bugfix][State=20Management]=20'state:sto?= =?UTF-8?q?reInSessionStorage'=20doesn=E2=80=99t=20take=20effect=20for=20d?= =?UTF-8?q?ashboard=20without=20full=20page=20reload=20(#56284)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * bugfix: 'state:storeInSessionStorage' doesn’t take effect for dashboard without full page reload * add test “changing 'state:storeInSessionStorage' also takes effect without full page reload” --- .../public/dashboard/np_ready/application.ts | 5 +--- .../dashboard/np_ready/dashboard_app.tsx | 8 +++++- .../np_ready/dashboard_app_controller.tsx | 9 ++++++- .../public/dashboard/np_ready/legacy_app.js | 17 ++++++++++--- .../kibana/public/dashboard/plugin.ts | 11 +------- .../apps/management/_kibana_settings.js | 25 ++++++++++++------- 6 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts index d9c0579638047..1a0a99311d06b 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts @@ -19,7 +19,6 @@ import { EuiConfirmModal, EuiIcon } from '@elastic/eui'; import angular, { IModule } from 'angular'; -import { History } from 'history'; import { i18nDirective, i18nFilter, I18nProvider } from '@kbn/i18n/angular'; import { AppMountContext, @@ -28,7 +27,7 @@ import { LegacyCoreStart, SavedObjectsClientContract, } from 'kibana/public'; -import { IKbnUrlStateStorage, Storage } from '../../../../../../plugins/kibana_utils/public'; +import { Storage } from '../../../../../../plugins/kibana_utils/public'; import { configureAppAngularModule, confirmModalFactory, @@ -66,8 +65,6 @@ export interface RenderDeps { embeddables: IEmbeddableStart; localStorage: Storage; share: SharePluginStart; - history: History; - kbnUrlStateStorage: IKbnUrlStateStorage; } let angularModuleInstance: IModule | null = null; diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx index 367db6644ff57..a48c165116304 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx @@ -19,6 +19,7 @@ import moment from 'moment'; import { Subscription } from 'rxjs'; +import { History } from 'history'; import { IInjector } from '../legacy_imports'; @@ -35,6 +36,7 @@ import { import { DashboardAppController } from './dashboard_app_controller'; import { RenderDeps } from './application'; +import { IKbnUrlStateStorage } from '../../../../../../plugins/kibana_utils/public/'; export interface DashboardAppScope extends ng.IScope { dash: SavedObjectDashboard; @@ -96,7 +98,9 @@ export function initDashboardAppDirective(app: any, deps: RenderDeps) { $route: any, $routeParams: { id?: string; - } + }, + kbnUrlStateStorage: IKbnUrlStateStorage, + history: History ) => new DashboardAppController({ $route, @@ -105,6 +109,8 @@ export function initDashboardAppDirective(app: any, deps: RenderDeps) { config, confirmModal, indexPatterns: deps.npDataStart.indexPatterns, + kbnUrlStateStorage, + history, ...deps, }), }; diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx index e85054cd7fb34..a8eec9c2504a7 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx @@ -24,6 +24,7 @@ import angular from 'angular'; import { Subscription } from 'rxjs'; import { map } from 'rxjs/operators'; +import { History } from 'history'; import { DashboardEmptyScreen, DashboardEmptyScreenProps } from './dashboard_empty_screen'; import { @@ -77,7 +78,11 @@ import { SavedObjectFinderProps, SavedObjectFinderUi, } from '../../../../../../plugins/kibana_react/public'; -import { removeQueryParam, unhashUrl } from '../../../../../../plugins/kibana_utils/public'; +import { + IKbnUrlStateStorage, + removeQueryParam, + unhashUrl, +} from '../../../../../../plugins/kibana_utils/public'; export interface DashboardAppControllerDependencies extends RenderDeps { $scope: DashboardAppScope; @@ -87,6 +92,8 @@ export interface DashboardAppControllerDependencies extends RenderDeps { dashboardConfig: any; config: any; confirmModal: ConfirmModalFn; + history: History; + kbnUrlStateStorage: IKbnUrlStateStorage; } export class DashboardAppController { diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js index 7ba404d52d9a6..2121b51ea78d8 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js @@ -21,11 +21,13 @@ import { i18n } from '@kbn/i18n'; import dashboardTemplate from './dashboard_app.html'; import dashboardListingTemplate from './listing/dashboard_listing_ng_wrapper.html'; +import { createHashHistory } from 'history'; import { ensureDefaultIndexPattern } from '../legacy_imports'; import { initDashboardAppDirective } from './dashboard_app'; import { createDashboardEditUrl, DashboardConstants } from './dashboard_constants'; import { + createKbnUrlStateStorage, InvalidJSONProperty, SavedObjectNotFound, } from '../../../../../../plugins/kibana_utils/public'; @@ -62,6 +64,14 @@ export function initDashboardApp(app, deps) { stateManagementConfigProvider.disable(); }); + app.factory('history', () => createHashHistory()); + app.factory('kbnUrlStateStorage', history => + createKbnUrlStateStorage({ + history, + useHash: deps.uiSettings.get('state:storeInSessionStorage'), + }) + ); + app.config(function($routeProvider) { const defaults = { reloadOnSearch: false, @@ -87,7 +97,7 @@ export function initDashboardApp(app, deps) { .when(DashboardConstants.LANDING_PAGE_PATH, { ...defaults, template: dashboardListingTemplate, - controller($injector, $location, $scope) { + controller($injector, $location, $scope, kbnUrlStateStorage) { const service = deps.savedDashboards; const kbnUrl = $injector.get('kbnUrl'); const dashboardConfig = deps.dashboardConfig; @@ -95,7 +105,7 @@ export function initDashboardApp(app, deps) { // syncs `_g` portion of url with query services const { stop: stopSyncingGlobalStateWithUrl } = syncQuery( deps.npDataStart.query, - deps.kbnUrlStateStorage + kbnUrlStateStorage ); $scope.listingLimit = deps.uiSettings.get('savedObjects:listingLimit'); @@ -189,7 +199,7 @@ export function initDashboardApp(app, deps) { template: dashboardTemplate, controller: createNewDashboardCtrl, resolve: { - dash: function($rootScope, $route, redirectWhenMissing, kbnUrl) { + dash: function($rootScope, $route, redirectWhenMissing, kbnUrl, history) { const id = $route.current.params.id; return ensureDefaultIndexPattern(deps.core, deps.npDataStart, $rootScope, kbnUrl) @@ -216,7 +226,6 @@ export function initDashboardApp(app, deps) { // See https://github.com/elastic/kibana/issues/10951 for more context. if (error instanceof SavedObjectNotFound && id === 'create') { // Note preserve querystring part is necessary so the state is preserved through the redirect. - const history = deps.history; history.replace({ ...history.location, // preserve query, pathname: DashboardConstants.CREATE_NEW_DASHBOARD_URL, diff --git a/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts b/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts index 732fbd525ae37..ca4b18a37504c 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts @@ -25,13 +25,12 @@ import { Plugin, SavedObjectsClientContract, } from 'kibana/public'; -import { createHashHistory } from 'history'; import { i18n } from '@kbn/i18n'; import { RenderDeps } from './np_ready/application'; import { DataStart } from '../../../data/public'; import { DataPublicPluginStart as NpDataStart } from '../../../../../plugins/data/public'; import { IEmbeddableStart } from '../../../../../plugins/embeddable/public'; -import { createKbnUrlStateStorage, Storage } from '../../../../../plugins/kibana_utils/public'; +import { Storage } from '../../../../../plugins/kibana_utils/public'; import { NavigationPublicPluginStart as NavigationStart } from '../../../../../plugins/navigation/public'; import { DashboardConstants } from './np_ready/dashboard_constants'; import { @@ -97,12 +96,6 @@ export class DashboardPlugin implements Plugin { overlays: contextCore.overlays, }); - const history = createHashHistory(); - const kbnUrlStateStorage = createKbnUrlStateStorage({ - history, - useHash: core.uiSettings.get('state:storeInSessionStorage'), - }); - const deps: RenderDeps = { core: contextCore as LegacyCoreStart, ...angularDependencies, @@ -118,8 +111,6 @@ export class DashboardPlugin implements Plugin { embeddables, dashboardCapabilities: contextCore.application.capabilities.dashboard, localStorage: new Storage(localStorage), - history, - kbnUrlStateStorage, }; const { renderApp } = await import('./np_ready/application'); return renderApp(params.element, params.appBasePath, deps); diff --git a/test/functional/apps/management/_kibana_settings.js b/test/functional/apps/management/_kibana_settings.js index 2dc5c395a605f..c99368ba4e859 100644 --- a/test/functional/apps/management/_kibana_settings.js +++ b/test/functional/apps/management/_kibana_settings.js @@ -22,7 +22,7 @@ import expect from '@kbn/expect'; export default function({ getService, getPageObjects }) { const kibanaServer = getService('kibanaServer'); const browser = getService('browser'); - const PageObjects = getPageObjects(['settings', 'common', 'dashboard', 'timePicker']); + const PageObjects = getPageObjects(['settings', 'common', 'dashboard', 'timePicker', 'header']); describe('kibana settings', function describeIndexTests() { before(async function() { @@ -94,14 +94,21 @@ export default function({ getService, getPageObjects }) { expect(appState.length).to.be.lessThan(20); }); - after( - 'navigate to settings page and turn state:storeInSessionStorage back to false', - async () => { - await PageObjects.settings.navigateTo(); - await PageObjects.settings.clickKibanaSettings(); - await PageObjects.settings.toggleAdvancedSettingCheckbox('state:storeInSessionStorage'); - } - ); + it("changing 'state:storeInSessionStorage' also takes effect without full page reload", async () => { + await PageObjects.dashboard.preserveCrossAppState(); + await PageObjects.header.clickStackManagement(); + await PageObjects.settings.clickKibanaSettings(); + await PageObjects.settings.toggleAdvancedSettingCheckbox('state:storeInSessionStorage'); + await PageObjects.header.clickDashboard(); + const currentUrl = await browser.getCurrentUrl(); + const urlPieces = currentUrl.match(/(.*)?_g=(.*)&_a=(.*)/); + const globalState = urlPieces[2]; + const appState = urlPieces[3]; + // We don't have to be exact, just need to ensure it's greater than when the hashed variation is being used, + // which is less than 20 characters. + expect(globalState.length).to.be.greaterThan(20); + expect(appState.length).to.be.greaterThan(20); + }); }); after(async function() { From 3e2e783a8de4d537fcaca1898d05d247f27df2e8 Mon Sep 17 00:00:00 2001 From: Daniil Suleiman <31325372+sulemanof@users.noreply.github.com> Date: Thu, 30 Jan 2020 13:50:49 +0300 Subject: [PATCH 69/72] [Vis: Default Editor] Fix advanced params rendering (#56295) * Fix advanced params rendering * Use EuiSpacer for margin --- .../__snapshots__/agg_params.test.tsx.snap | 58 +++++++++---------- .../public/components/agg_params.tsx | 7 ++- 2 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg_params.test.tsx.snap b/src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg_params.test.tsx.snap index 1275a52eead57..028d0b8016693 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg_params.test.tsx.snap +++ b/src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg_params.test.tsx.snap @@ -38,39 +38,33 @@ exports[`DefaultEditorAggParams component should init with the default set of pa setAggParamValue={[MockFunction]} showValidation={false} /> - + - - - + - - + } + formIsTouched={false} + key="jsonundefined" + onChangeParamsState={[Function]} + setAggParamValue={[MockFunction]} + showValidation={false} + /> + `; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.tsx b/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.tsx index 0d83860a1475a..47e98f175ab73 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.tsx +++ b/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.tsx @@ -18,7 +18,7 @@ */ import React, { useCallback, useReducer, useEffect, useMemo } from 'react'; -import { EuiForm, EuiAccordion, EuiSpacer, EuiFormRow } from '@elastic/eui'; +import { EuiForm, EuiAccordion, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import useUnmount from 'react-use/lib/useUnmount'; @@ -219,7 +219,8 @@ function DefaultEditorAggParams({ })} {params.advanced.length ? ( - + <> + - + ) : null} ); From a8622cfcd8d190686998c4cbaee36bb3f66099d3 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 30 Jan 2020 12:10:30 +0100 Subject: [PATCH 70/72] [Uptime] Use dynamic index pattern in Uptime (#55446) * Using auto attribute field and fixed title * added constant * refactor index pattern state * fixed type * PR feedback * resolve conflcits Co-authored-by: Elastic Machine --- .../filter_group/filter_group_container.tsx | 93 +++++++++++++++++++ .../public/components/connected/index.ts | 3 + .../kuerybar/kuery_bar_container.tsx | 21 +++++ .../connected/pages/overview_container.ts | 14 +++ ...w_page_parsing_error_callout.test.tsx.snap | 10 ++ .../functional/filter_group/filter_group.tsx | 92 ++---------------- .../functional/filter_group/index.ts | 2 +- .../public/components/functional/index.ts | 3 +- .../kuery_bar/{index.tsx => kuery_bar.tsx} | 19 ++-- .../overview_page_parsing_error_callout.tsx | 1 + .../plugins/uptime/public/hooks/index.ts | 2 +- .../public/hooks/update_kuery_string.ts | 65 +++++++++++++ .../uptime/public/hooks/use_index_pattern.ts | 21 ----- .../to_static_index_pattern.test.ts.snap | 19 ---- .../__tests__/to_static_index_pattern.test.ts | 19 ---- .../helper/combine_filters_and_user_search.ts | 3 + .../plugins/uptime/public/lib/helper/index.ts | 1 - .../lib/helper/to_static_index_pattern.ts | 11 --- .../plugins/uptime/public/pages/index.ts | 2 +- .../plugins/uptime/public/pages/overview.tsx | 81 ++++------------ .../legacy/plugins/uptime/public/routes.tsx | 2 +- .../uptime/public/state/actions/index.ts | 1 + .../public/state/actions/index_patternts.ts | 12 +++ .../plugins/uptime/public/state/api/index.ts | 1 + .../uptime/public/state/api/index_pattern.ts | 21 +++++ .../uptime/public/state/effects/index.ts | 2 + .../public/state/effects/index_pattern.ts | 17 ++++ .../uptime/public/state/reducers/index.ts | 2 + .../public/state/reducers/index_pattern.ts | 41 ++++++++ .../state/selectors/__tests__/index.test.ts | 5 + .../uptime/public/state/selectors/index.ts | 4 + .../lib/adapters/framework/adapter_types.ts | 14 --- .../uptime/server/lib/adapters/index.ts | 2 +- .../heartbeat_index_pattern.json | 13 --- .../kibana_saved_objects_adapter.ts | 25 ----- .../lib/adapters/saved_objects/types.ts | 11 --- .../index.ts | 3 +- .../stub_index_pattern/stub_index_pattern.ts | 54 +++++++++++ .../uptime/server/lib/compose/kibana.ts | 4 +- .../legacy/plugins/uptime/server/lib/lib.ts | 4 +- .../index_pattern/get_index_pattern.ts | 4 +- 41 files changed, 420 insertions(+), 304 deletions(-) create mode 100644 x-pack/legacy/plugins/uptime/public/components/connected/filter_group/filter_group_container.tsx create mode 100644 x-pack/legacy/plugins/uptime/public/components/connected/kuerybar/kuery_bar_container.tsx create mode 100644 x-pack/legacy/plugins/uptime/public/components/connected/pages/overview_container.ts rename x-pack/legacy/plugins/uptime/public/components/functional/kuery_bar/{index.tsx => kuery_bar.tsx} (91%) create mode 100644 x-pack/legacy/plugins/uptime/public/hooks/update_kuery_string.ts delete mode 100644 x-pack/legacy/plugins/uptime/public/hooks/use_index_pattern.ts delete mode 100644 x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/__snapshots__/to_static_index_pattern.test.ts.snap delete mode 100644 x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/to_static_index_pattern.test.ts delete mode 100644 x-pack/legacy/plugins/uptime/public/lib/helper/to_static_index_pattern.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/actions/index_patternts.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/api/index_pattern.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/effects/index_pattern.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/reducers/index_pattern.ts delete mode 100644 x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/heartbeat_index_pattern.json delete mode 100644 x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/kibana_saved_objects_adapter.ts delete mode 100644 x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/types.ts rename x-pack/legacy/plugins/uptime/server/lib/adapters/{saved_objects => stub_index_pattern}/index.ts (67%) create mode 100644 x-pack/legacy/plugins/uptime/server/lib/adapters/stub_index_pattern/stub_index_pattern.ts diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/filter_group/filter_group_container.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/filter_group/filter_group_container.tsx new file mode 100644 index 0000000000000..2d1c21d1c997d --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/connected/filter_group/filter_group_container.tsx @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useEffect } from 'react'; +import { connect } from 'react-redux'; +import { useUrlParams } from '../../../hooks'; +import { parseFiltersMap } from '../../functional/filter_group/parse_filter_map'; +import { AppState } from '../../../state'; +import { fetchOverviewFilters, GetOverviewFiltersPayload } from '../../../state/actions'; +import { FilterGroupComponent } from '../../functional/filter_group'; +import { OverviewFilters } from '../../../../common/runtime_types/overview_filters'; + +interface OwnProps { + esFilters?: string; +} + +interface StoreProps { + esKuery: string; + lastRefresh: number; + loading: boolean; + overviewFilters: OverviewFilters; +} + +interface DispatchProps { + loadFilterGroup: typeof fetchOverviewFilters; +} + +type Props = OwnProps & StoreProps & DispatchProps; + +export const Container: React.FC = ({ + esKuery, + esFilters, + loading, + loadFilterGroup, + overviewFilters, +}: Props) => { + const [getUrlParams, updateUrl] = useUrlParams(); + + const { dateRangeStart, dateRangeEnd, statusFilter, filters: urlFilters } = getUrlParams(); + + useEffect(() => { + const filterSelections = parseFiltersMap(urlFilters); + loadFilterGroup({ + dateRangeStart, + dateRangeEnd, + locations: filterSelections.locations ?? [], + ports: filterSelections.ports ?? [], + schemes: filterSelections.schemes ?? [], + search: esKuery, + statusFilter, + tags: filterSelections.tags ?? [], + }); + }, [dateRangeStart, dateRangeEnd, esKuery, esFilters, statusFilter, urlFilters, loadFilterGroup]); + + // update filters in the URL from filter group + const onFilterUpdate = (filtersKuery: string) => { + if (urlFilters !== filtersKuery) { + updateUrl({ filters: filtersKuery, pagination: '' }); + } + }; + + return ( + + ); +}; + +const mapStateToProps = ({ + overviewFilters: { loading, filters }, + ui: { esKuery, lastRefresh }, +}: AppState): StoreProps => ({ + esKuery, + overviewFilters: filters, + lastRefresh, + loading, +}); + +const mapDispatchToProps = (dispatch: any): DispatchProps => ({ + loadFilterGroup: (payload: GetOverviewFiltersPayload) => dispatch(fetchOverviewFilters(payload)), +}); + +export const FilterGroup = connect( + // @ts-ignore connect is expecting null | undefined for some reason + mapStateToProps, + mapDispatchToProps +)(Container); diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/index.ts b/x-pack/legacy/plugins/uptime/public/components/connected/index.ts index f9f6aa263ed27..5bb0d1ae8468f 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/index.ts +++ b/x-pack/legacy/plugins/uptime/public/components/connected/index.ts @@ -5,3 +5,6 @@ */ export { PingHistogram } from './charts/ping_histogram'; +export { KueryBar } from './kuerybar/kuery_bar_container'; +export { OverviewPage } from './pages/overview_container'; +export { FilterGroup } from './filter_group/filter_group_container'; diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/kuerybar/kuery_bar_container.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/kuerybar/kuery_bar_container.tsx new file mode 100644 index 0000000000000..d0f160b2c5540 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/connected/kuerybar/kuery_bar_container.tsx @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { connect } from 'react-redux'; +import { AppState } from '../../../state'; +import { selectIndexPattern } from '../../../state/selectors'; +import { getIndexPattern } from '../../../state/actions'; +import { KueryBarComponent } from '../../functional'; + +const mapStateToProps = (state: AppState) => ({ indexPattern: selectIndexPattern(state) }); + +const mapDispatchToProps = (dispatch: any) => ({ + loadIndexPattern: () => { + dispatch(getIndexPattern({})); + }, +}); + +export const KueryBar = connect(mapStateToProps, mapDispatchToProps)(KueryBarComponent); diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/pages/overview_container.ts b/x-pack/legacy/plugins/uptime/public/components/connected/pages/overview_container.ts new file mode 100644 index 0000000000000..406fab8f5bf01 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/connected/pages/overview_container.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { connect } from 'react-redux'; +import { OverviewPageComponent } from '../../../pages/overview'; +import { selectIndexPattern } from '../../../state/selectors'; +import { AppState } from '../../../state'; + +const mapStateToProps = (state: AppState) => ({ indexPattern: selectIndexPattern(state) }); + +export const OverviewPage = connect(mapStateToProps)(OverviewPageComponent); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/__tests__/__snapshots__/overview_page_parsing_error_callout.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/components/functional/__tests__/__snapshots__/overview_page_parsing_error_callout.test.tsx.snap index 4b9c169b3d9b3..653b739145f30 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/__tests__/__snapshots__/overview_page_parsing_error_callout.test.tsx.snap +++ b/x-pack/legacy/plugins/uptime/public/components/functional/__tests__/__snapshots__/overview_page_parsing_error_callout.test.tsx.snap @@ -4,6 +4,11 @@ exports[`OverviewPageParsingErrorCallout renders without errors when a valid err

    @@ -26,6 +31,11 @@ exports[`OverviewPageParsingErrorCallout renders without errors when an error wi

    diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/filter_group.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/filter_group.tsx index 351302fb38356..ff73554c8f07c 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/filter_group.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/filter_group.tsx @@ -4,44 +4,21 @@ * you may not use this file except in compliance with the Elastic License. */ +import React from 'react'; import { EuiFilterGroup } from '@elastic/eui'; -import React, { useEffect } from 'react'; import { i18n } from '@kbn/i18n'; -import { connect } from 'react-redux'; import { FilterPopoverProps, FilterPopover } from './filter_popover'; import { FilterStatusButton } from './filter_status_button'; -import { OverviewFilters } from '../../../../common/runtime_types'; -import { fetchOverviewFilters, GetOverviewFiltersPayload } from '../../../state/actions'; -import { AppState } from '../../../state'; -import { useUrlParams } from '../../../hooks'; -import { parseFiltersMap } from './parse_filter_map'; +import { OverviewFilters } from '../../../../common/runtime_types/overview_filters'; -interface OwnProps { - currentFilter: any; - onFilterUpdate: any; - dateRangeStart: string; - dateRangeEnd: string; - filters?: string; - statusFilter?: string; -} - -interface StoreProps { - esKuery: string; - lastRefresh: number; +interface PresentationalComponentProps { loading: boolean; overviewFilters: OverviewFilters; + currentFilter: string; + onFilterUpdate: (filtersKuery: string) => void; } -interface DispatchProps { - loadFilterGroup: typeof fetchOverviewFilters; -} - -type Props = OwnProps & StoreProps & DispatchProps; - -type PresentationalComponentProps = Pick & - Pick; - -export const PresentationalComponent: React.FC = ({ +export const FilterGroupComponent: React.FC = ({ currentFilter, overviewFilters, loading, @@ -151,60 +128,3 @@ export const PresentationalComponent: React.FC = ( ); }; - -export const Container: React.FC = ({ - currentFilter, - esKuery, - filters, - loading, - loadFilterGroup, - dateRangeStart, - dateRangeEnd, - overviewFilters, - statusFilter, - onFilterUpdate, -}: Props) => { - const [getUrlParams] = useUrlParams(); - const { filters: urlFilters } = getUrlParams(); - useEffect(() => { - const filterSelections = parseFiltersMap(urlFilters); - loadFilterGroup({ - dateRangeStart, - dateRangeEnd, - locations: filterSelections.locations ?? [], - ports: filterSelections.ports ?? [], - schemes: filterSelections.schemes ?? [], - search: esKuery, - statusFilter, - tags: filterSelections.tags ?? [], - }); - }, [dateRangeStart, dateRangeEnd, esKuery, filters, statusFilter, urlFilters, loadFilterGroup]); - return ( - - ); -}; - -const mapStateToProps = ({ - overviewFilters: { loading, filters }, - ui: { esKuery, lastRefresh }, -}: AppState): StoreProps => ({ - esKuery, - overviewFilters: filters, - lastRefresh, - loading, -}); - -const mapDispatchToProps = (dispatch: any): DispatchProps => ({ - loadFilterGroup: (payload: GetOverviewFiltersPayload) => dispatch(fetchOverviewFilters(payload)), -}); - -export const FilterGroup = connect( - // @ts-ignore connect is expecting null | undefined for some reason - mapStateToProps, - mapDispatchToProps -)(Container); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/index.ts b/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/index.ts index 285972fb34eaa..2aae026144d8f 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/index.ts +++ b/x-pack/legacy/plugins/uptime/public/components/functional/filter_group/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { FilterGroup } from './filter_group'; +export { FilterGroupComponent } from './filter_group'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/index.ts b/x-pack/legacy/plugins/uptime/public/components/functional/index.ts index b9f0014322062..6af17cfd67c46 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/index.ts +++ b/x-pack/legacy/plugins/uptime/public/components/functional/index.ts @@ -7,9 +7,8 @@ export { DonutChart } from './charts/donut_chart'; export { EmptyState } from './empty_state'; export { MonitorStatusBar } from './monitor_status_details'; -export { FilterGroup } from './filter_group'; export { IntegrationLink } from './integration_link'; -export { KueryBar } from './kuery_bar'; +export { KueryBarComponent } from './kuery_bar/kuery_bar'; export { MonitorCharts } from './monitor_charts'; export { MonitorList } from './monitor_list'; export { OverviewPageParsingErrorCallout } from './overview_page_parsing_error_callout'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/kuery_bar/index.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/kuery_bar/kuery_bar.tsx similarity index 91% rename from x-pack/legacy/plugins/uptime/public/components/functional/kuery_bar/index.tsx rename to x-pack/legacy/plugins/uptime/public/components/functional/kuery_bar/kuery_bar.tsx index 679106f7e19b4..63c8885fe5864 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/kuery_bar/index.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/kuery_bar/kuery_bar.tsx @@ -11,14 +11,12 @@ import styled from 'styled-components'; import { FormattedMessage } from '@kbn/i18n/react'; import { Typeahead } from './typeahead'; import { useUrlParams } from '../../../hooks'; -import { toStaticIndexPattern } from '../../../lib/helper'; import { esKuery, IIndexPattern, autocomplete, DataPublicPluginStart, } from '../../../../../../../../src/plugins/data/public'; -import { useIndexPattern } from '../../../hooks'; const Container = styled.div` margin-bottom: 10px; @@ -36,20 +34,29 @@ function convertKueryToEsQuery(kuery: string, indexPattern: IIndexPattern) { interface Props { autocomplete: DataPublicPluginStart['autocomplete']; + loadIndexPattern: any; + indexPattern: any; } -export function KueryBar({ autocomplete: autocompleteService }: Props) { +export function KueryBarComponent({ + autocomplete: autocompleteService, + loadIndexPattern, + indexPattern, +}: Props) { + useEffect(() => { + if (!indexPattern) { + loadIndexPattern(); + } + }, [indexPattern, loadIndexPattern]); + const [state, setState] = useState({ suggestions: [], isLoadingIndexPattern: true, }); - const [indexPattern, setIndexPattern] = useState(undefined); const [isLoadingIndexPattern, setIsLoadingIndexPattern] = useState(true); const [isLoadingSuggestions, setIsLoadingSuggestions] = useState(false); let currentRequestCheck: string; - useIndexPattern((result: any) => setIndexPattern(toStaticIndexPattern(result))); - useEffect(() => { if (indexPattern !== undefined) { setIsLoadingIndexPattern(false); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/overview_page_parsing_error_callout.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/overview_page_parsing_error_callout.tsx index 3d38ce42dd1f0..b71a4f2f8646a 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/overview_page_parsing_error_callout.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/overview_page_parsing_error_callout.tsx @@ -26,6 +26,7 @@ export const OverviewPageParsingErrorCallout = ({ })} color="danger" iconType="alert" + style={{ width: '100%' }} >

    { + // Update EsQuery in Redux to be used in FilterGroup + const searchDSL: string = filterQueryString + ? JSON.stringify( + esKuery.toElasticsearchQuery(esKuery.fromKueryExpression(filterQueryString), indexPattern) + ) + : ''; + store.dispatch(setEsKueryString(searchDSL)); +}; + +const getKueryString = (urlFilters: string): string => { + let kueryString = ''; + // We are using try/catch here because this is user entered value + // and JSON.parse and stringifyKueries can have hard time parsing + // all possible scenarios, we can safely ignore if we can't parse them + try { + if (urlFilters !== '') { + const filterMap = new Map>(JSON.parse(urlFilters)); + kueryString = stringifyKueries(filterMap); + } + } catch { + kueryString = ''; + } + return kueryString; +}; + +export const useUpdateKueryString = ( + indexPattern: IIndexPattern, + filterQueryString = '', + urlFilters: string +): [string?, Error?] => { + const kueryString = getKueryString(urlFilters); + + const combinedFilterString = combineFiltersAndUserSearch(filterQueryString, kueryString); + + let esFilters: string | undefined; + // this try catch is necessary to evaluate user input in kuery bar, + // this error will be actually shown in UI for user to see + try { + if ((filterQueryString || urlFilters) && indexPattern) { + const ast = esKuery.fromKueryExpression(combinedFilterString); + + const elasticsearchQuery = esKuery.toElasticsearchQuery(ast, indexPattern); + + esFilters = JSON.stringify(elasticsearchQuery); + + updateEsQueryForFilterGroup(filterQueryString, indexPattern); + } + return [esFilters]; + } catch (err) { + return [urlFilters, err]; + } +}; diff --git a/x-pack/legacy/plugins/uptime/public/hooks/use_index_pattern.ts b/x-pack/legacy/plugins/uptime/public/hooks/use_index_pattern.ts deleted file mode 100644 index f2b586b27dba6..0000000000000 --- a/x-pack/legacy/plugins/uptime/public/hooks/use_index_pattern.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { useEffect, Dispatch } from 'react'; -import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; - -export const useIndexPattern = (setIndexPattern: Dispatch) => { - const core = useKibana(); - useEffect(() => { - const fetch = core.services.http?.fetch; - async function getIndexPattern() { - if (!fetch) throw new Error('Http core services are not defined'); - setIndexPattern(await fetch('/api/uptime/index_pattern', { method: 'GET' })); - } - getIndexPattern(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [core.services.http]); -}; diff --git a/x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/__snapshots__/to_static_index_pattern.test.ts.snap b/x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/__snapshots__/to_static_index_pattern.test.ts.snap deleted file mode 100644 index bc02e1054b6f7..0000000000000 --- a/x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/__snapshots__/to_static_index_pattern.test.ts.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`toStaticIndexPattern provides the required fields 1`] = ` -Object { - "attributes": Object { - "fields": "[{\\"name\\":\\"@timestamp\\",\\"type\\":\\"date\\",\\"scripted\\":false,\\"searchable\\":true}]", - }, - "fields": Array [ - Object { - "name": "@timestamp", - "scripted": false, - "searchable": true, - "type": "date", - }, - ], - "id": "foo", - "title": "foo", -} -`; diff --git a/x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/to_static_index_pattern.test.ts b/x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/to_static_index_pattern.test.ts deleted file mode 100644 index c8015a678c726..0000000000000 --- a/x-pack/legacy/plugins/uptime/public/lib/helper/__tests__/to_static_index_pattern.test.ts +++ /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; - * you may not use this file except in compliance with the Elastic License. - */ - -import { toStaticIndexPattern } from '../to_static_index_pattern'; - -describe('toStaticIndexPattern', () => { - it('provides the required fields', () => { - const pattern = { - attributes: { - fields: '[{"name":"@timestamp","type":"date","scripted":false,"searchable":true}]', - }, - id: 'foo', - }; - expect(toStaticIndexPattern(pattern)).toMatchSnapshot(); - }); -}); diff --git a/x-pack/legacy/plugins/uptime/public/lib/helper/combine_filters_and_user_search.ts b/x-pack/legacy/plugins/uptime/public/lib/helper/combine_filters_and_user_search.ts index f3dfbb7d3b529..45aff24f0449e 100644 --- a/x-pack/legacy/plugins/uptime/public/lib/helper/combine_filters_and_user_search.ts +++ b/x-pack/legacy/plugins/uptime/public/lib/helper/combine_filters_and_user_search.ts @@ -5,6 +5,9 @@ */ export const combineFiltersAndUserSearch = (filters: string, search: string) => { + if (!filters && !search) { + return ''; + } if (!filters) return search; if (!search) return filters; return `(${filters}) and (${search})`; diff --git a/x-pack/legacy/plugins/uptime/public/lib/helper/index.ts b/x-pack/legacy/plugins/uptime/public/lib/helper/index.ts index ced06ce7a1d7b..ef191ce32e532 100644 --- a/x-pack/legacy/plugins/uptime/public/lib/helper/index.ts +++ b/x-pack/legacy/plugins/uptime/public/lib/helper/index.ts @@ -12,5 +12,4 @@ export { getChartDateLabel } from './charts'; export { parameterizeValues } from './parameterize_values'; export { seriesHasDownValues } from './series_has_down_values'; export { stringifyKueries } from './stringify_kueries'; -export { toStaticIndexPattern } from './to_static_index_pattern'; export { UptimeUrlParams, getSupportedUrlParams } from './url_params'; diff --git a/x-pack/legacy/plugins/uptime/public/lib/helper/to_static_index_pattern.ts b/x-pack/legacy/plugins/uptime/public/lib/helper/to_static_index_pattern.ts deleted file mode 100644 index b8a12c1e578e3..0000000000000 --- a/x-pack/legacy/plugins/uptime/public/lib/helper/to_static_index_pattern.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export const toStaticIndexPattern = (indexPattern: any) => ({ - ...indexPattern, - fields: JSON.parse(indexPattern.attributes.fields), - title: indexPattern.id, -}); diff --git a/x-pack/legacy/plugins/uptime/public/pages/index.ts b/x-pack/legacy/plugins/uptime/public/pages/index.ts index a96be42eb0dee..17f083ca023ed 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/index.ts +++ b/x-pack/legacy/plugins/uptime/public/pages/index.ts @@ -5,6 +5,6 @@ */ export { MonitorPage } from './monitor'; -export { OverviewPage } from './overview'; export { NotFoundPage } from './not_found'; export { PageHeader } from './page_header'; +export { OverviewPage } from '../components/connected/'; diff --git a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx index b9c2284edb0cf..0f6195c5f4c66 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx @@ -5,30 +5,28 @@ */ import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; -import React, { Fragment, useContext, useState } from 'react'; +import React, { useContext } from 'react'; import styled from 'styled-components'; import { EmptyState, - FilterGroup, - KueryBar, MonitorList, OverviewPageParsingErrorCallout, StatusPanel, } from '../components/functional'; import { UMUpdateBreadcrumbs } from '../lib/lib'; -import { useIndexPattern, useUrlParams, useUptimeTelemetry, UptimePage } from '../hooks'; +import { useUrlParams, useUptimeTelemetry, UptimePage } from '../hooks'; import { stringifyUrlParams } from '../lib/helper/stringify_url_params'; import { useTrackPageview } from '../../../infra/public'; -import { combineFiltersAndUserSearch, stringifyKueries, toStaticIndexPattern } from '../lib/helper'; -import { store } from '../state'; -import { setEsKueryString } from '../state/actions'; import { PageHeader } from './page_header'; -import { esKuery, DataPublicPluginStart } from '../../../../../../src/plugins/data/public'; -import { UptimeThemeContext } from '../contexts/uptime_theme_context'; +import { DataPublicPluginStart, IIndexPattern } from '../../../../../../src/plugins/data/public'; +import { UptimeThemeContext } from '../contexts'; +import { FilterGroup, KueryBar } from '../components/connected'; +import { useUpdateKueryString } from '../hooks'; interface OverviewPageProps { autocomplete: DataPublicPluginStart['autocomplete']; setBreadcrumbs: UMUpdateBreadcrumbs; + indexPattern: IIndexPattern; } type Props = OverviewPageProps; @@ -42,72 +40,37 @@ const EuiFlexItemStyled = styled(EuiFlexItem)` } `; -export const OverviewPage = ({ autocomplete, setBreadcrumbs }: Props) => { +export const OverviewPageComponent = ({ autocomplete, setBreadcrumbs, indexPattern }: Props) => { const { colors } = useContext(UptimeThemeContext); - const [getUrlParams, updateUrl] = useUrlParams(); + const [getUrlParams] = useUrlParams(); const { absoluteDateRangeStart, absoluteDateRangeEnd, ...params } = getUrlParams(); const { dateRangeStart, dateRangeEnd, - search, pagination, statusFilter, + search, filters: urlFilters, } = params; - const [indexPattern, setIndexPattern] = useState(undefined); + useUptimeTelemetry(UptimePage.Overview); - useIndexPattern(setIndexPattern); useTrackPageview({ app: 'uptime', path: 'overview' }); useTrackPageview({ app: 'uptime', path: 'overview', delay: 15000 }); - let error: any; - let kueryString: string = ''; - try { - if (urlFilters !== '') { - const filterMap = new Map>(JSON.parse(urlFilters)); - kueryString = stringifyKueries(filterMap); - } - } catch { - kueryString = ''; - } - - const filterQueryString = search || ''; - let filters: any | undefined; - try { - if (filterQueryString || urlFilters) { - if (indexPattern) { - const staticIndexPattern = toStaticIndexPattern(indexPattern); - const combinedFilterString = combineFiltersAndUserSearch(filterQueryString, kueryString); - const ast = esKuery.fromKueryExpression(combinedFilterString); - const elasticsearchQuery = esKuery.toElasticsearchQuery(ast, staticIndexPattern); - filters = JSON.stringify(elasticsearchQuery); - const searchDSL: string = filterQueryString - ? JSON.stringify( - esKuery.toElasticsearchQuery( - esKuery.fromKueryExpression(filterQueryString), - staticIndexPattern - ) - ) - : ''; - store.dispatch(setEsKueryString(searchDSL)); - } - } - } catch (e) { - error = e; - } + const [esFilters, error] = useUpdateKueryString(indexPattern, search, urlFilters); const sharedProps = { dateRangeStart, dateRangeEnd, - filters, statusFilter, + filters: esFilters, }; const linkParameters = stringifyUrlParams(params, true); return ( - + <> @@ -115,15 +78,7 @@ export const OverviewPage = ({ autocomplete, setBreadcrumbs }: Props) => { - { - if (urlFilters !== filtersKuery) { - updateUrl({ filters: filtersKuery, pagination: '' }); - } - }} - /> + {error && } @@ -133,7 +88,7 @@ export const OverviewPage = ({ autocomplete, setBreadcrumbs }: Props) => { absoluteDateRangeEnd={absoluteDateRangeEnd} dateRangeStart={dateRangeStart} dateRangeEnd={dateRangeEnd} - filters={filters} + filters={esFilters} statusFilter={statusFilter} /> @@ -141,7 +96,7 @@ export const OverviewPage = ({ autocomplete, setBreadcrumbs }: Props) => { absoluteStartDate={absoluteDateRangeStart} absoluteEndDate={absoluteDateRangeEnd} dangerColor={colors.danger} - hasActiveFilters={!!filters} + hasActiveFilters={!!esFilters} implementsCustomErrorState={true} linkParameters={linkParameters} successColor={colors.success} @@ -151,6 +106,6 @@ export const OverviewPage = ({ autocomplete, setBreadcrumbs }: Props) => { }} /> - + ); }; diff --git a/x-pack/legacy/plugins/uptime/public/routes.tsx b/x-pack/legacy/plugins/uptime/public/routes.tsx index 07bba5163922e..c318a82ab7f19 100644 --- a/x-pack/legacy/plugins/uptime/public/routes.tsx +++ b/x-pack/legacy/plugins/uptime/public/routes.tsx @@ -6,7 +6,7 @@ import React, { FC } from 'react'; import { Route, Switch } from 'react-router-dom'; -import { MonitorPage, OverviewPage, NotFoundPage } from './pages'; +import { MonitorPage, NotFoundPage, OverviewPage } from './pages'; import { DataPublicPluginStart } from '../../../../../src/plugins/data/public'; import { UMUpdateBreadcrumbs } from './lib/lib'; diff --git a/x-pack/legacy/plugins/uptime/public/state/actions/index.ts b/x-pack/legacy/plugins/uptime/public/state/actions/index.ts index 6758006914ab8..df707584bd844 100644 --- a/x-pack/legacy/plugins/uptime/public/state/actions/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/actions/index.ts @@ -8,4 +8,5 @@ export * from './overview_filters'; export * from './snapshot'; export * from './ui'; export * from './monitor_status'; +export * from './index_patternts'; export * from './ping'; diff --git a/x-pack/legacy/plugins/uptime/public/state/actions/index_patternts.ts b/x-pack/legacy/plugins/uptime/public/state/actions/index_patternts.ts new file mode 100644 index 0000000000000..f52dac805a199 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/actions/index_patternts.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { createAction } from 'redux-actions'; +import { QueryParams } from './types'; + +export const getIndexPattern = createAction('GET_INDEX_PATTERN'); +export const getIndexPatternSuccess = createAction('GET_INDEX_PATTERN_SUCCESS'); +export const getIndexPatternFail = createAction('GET_INDEX_PATTERN_FAIL'); diff --git a/x-pack/legacy/plugins/uptime/public/state/api/index.ts b/x-pack/legacy/plugins/uptime/public/state/api/index.ts index be79317dc97c2..2d20638832335 100644 --- a/x-pack/legacy/plugins/uptime/public/state/api/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/api/index.ts @@ -8,4 +8,5 @@ export * from './monitor'; export * from './overview_filters'; export * from './snapshot'; export * from './monitor_status'; +export * from './index_pattern'; export * from './ping'; diff --git a/x-pack/legacy/plugins/uptime/public/state/api/index_pattern.ts b/x-pack/legacy/plugins/uptime/public/state/api/index_pattern.ts new file mode 100644 index 0000000000000..2669376d728ab --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/api/index_pattern.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { getApiPath } from '../../lib/helper'; + +interface APIParams { + basePath: string; +} + +export const fetchIndexPattern = async ({ basePath }: APIParams) => { + const url = getApiPath(`/api/uptime/index_pattern`, basePath); + + const response = await fetch(url); + if (!response.ok) { + throw new Error(response.statusText); + } + return await response.json(); +}; diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts index 21d4f7a66ad67..f809454cefb39 100644 --- a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts @@ -9,6 +9,7 @@ import { fetchMonitorDetailsEffect } from './monitor'; import { fetchOverviewFiltersEffect } from './overview_filters'; import { fetchSnapshotCountEffect } from './snapshot'; import { fetchMonitorStatusEffect } from './monitor_status'; +import { fetchIndexPatternEffect } from './index_pattern'; import { fetchPingHistogramEffect } from './ping'; export function* rootEffect() { @@ -16,5 +17,6 @@ export function* rootEffect() { yield fork(fetchSnapshotCountEffect); yield fork(fetchOverviewFiltersEffect); yield fork(fetchMonitorStatusEffect); + yield fork(fetchIndexPatternEffect); yield fork(fetchPingHistogramEffect); } diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/index_pattern.ts b/x-pack/legacy/plugins/uptime/public/state/effects/index_pattern.ts new file mode 100644 index 0000000000000..a6f9256d5ccd9 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/effects/index_pattern.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { takeLatest } from 'redux-saga/effects'; +import { getIndexPattern, getIndexPatternSuccess, getIndexPatternFail } from '../actions'; +import { fetchIndexPattern } from '../api'; +import { fetchEffectFactory } from './fetch_effect'; + +export function* fetchIndexPatternEffect() { + yield takeLatest( + getIndexPattern, + fetchEffectFactory(fetchIndexPattern, getIndexPatternSuccess, getIndexPatternFail) + ); +} diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts index c80ada4f63182..842cb1e937108 100644 --- a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts @@ -10,6 +10,7 @@ import { overviewFiltersReducer } from './overview_filters'; import { snapshotReducer } from './snapshot'; import { uiReducer } from './ui'; import { monitorStatusReducer } from './monitor_status'; +import { indexPatternReducer } from './index_pattern'; import { pingReducer } from './ping'; export const rootReducer = combineReducers({ @@ -18,5 +19,6 @@ export const rootReducer = combineReducers({ snapshot: snapshotReducer, ui: uiReducer, monitorStatus: monitorStatusReducer, + indexPattern: indexPatternReducer, ping: pingReducer, }); diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/index_pattern.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/index_pattern.ts new file mode 100644 index 0000000000000..dff043f81b95c --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/index_pattern.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { handleActions, Action } from 'redux-actions'; +import { getIndexPattern, getIndexPatternSuccess, getIndexPatternFail } from '../actions'; + +export interface IndexPatternState { + index_pattern: any; + errors: any[]; + loading: boolean; +} + +const initialState: IndexPatternState = { + index_pattern: null, + loading: false, + errors: [], +}; + +export const indexPatternReducer = handleActions( + { + [String(getIndexPattern)]: state => ({ + ...state, + loading: true, + }), + + [String(getIndexPatternSuccess)]: (state, action: Action) => ({ + ...state, + loading: false, + index_pattern: { ...action.payload }, + }), + + [String(getIndexPatternFail)]: (state, action: Action) => ({ + ...state, + errors: [...state.errors, action.payload], + loading: false, + }), + }, + initialState +); diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts index 5e3bf95d81292..2e27431a5ff14 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts @@ -45,6 +45,11 @@ describe('state selectors', () => { monitor: null, loading: false, }, + indexPattern: { + index_pattern: null, + loading: false, + errors: [], + }, ping: { pingHistogram: null, loading: false, diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts index 0066241dcc217..fe6a7a1b7eade 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts @@ -29,6 +29,10 @@ export const selectMonitorStatus = (state: AppState) => { return state.monitorStatus.status; }; +export const selectIndexPattern = ({ indexPattern }: AppState) => { + return indexPattern.index_pattern; +}; + export const selectPingHistogram = ({ ping, ui }: AppState) => { return { data: ping.pingHistogram, loading: ping.loading, lastRefresh: ui.lastRefresh }; }; diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/framework/adapter_types.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/framework/adapter_types.ts index 2f72081a70988..fb2052bb4c87f 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/framework/adapter_types.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/framework/adapter_types.ts @@ -8,26 +8,12 @@ import { GraphQLSchema } from 'graphql'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; import { SavedObjectsLegacyService, - RequestHandler, IRouter, CallAPIOptions, SavedObjectsClientContract, } from 'src/core/server'; -import { ObjectType } from '@kbn/config-schema'; import { UMKibanaRoute } from '../../../rest_api'; -export interface UMFrameworkRouteOptions< - P extends ObjectType, - Q extends ObjectType, - B extends ObjectType -> { - path: string; - method: string; - handler: RequestHandler; - config?: any; - validate: any; -} - type APICaller = ( endpoint: string, clientParams: Record, diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/index.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/index.ts index f5ff3b8c62ba9..fbef70f106dd8 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/index.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/index.ts @@ -8,5 +8,5 @@ export * from './framework'; export * from './monitor_states'; export * from './monitors'; export * from './pings'; -export * from './saved_objects'; +export * from './stub_index_pattern'; export * from './telemetry'; diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/heartbeat_index_pattern.json b/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/heartbeat_index_pattern.json deleted file mode 100644 index 444c7510c6a6d..0000000000000 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/heartbeat_index_pattern.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "attributes": { - "fields": "[{\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"esTypes\":[\"_type\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"agent.ephemeral_id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"agent.hostname\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"agent.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"agent.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"agent.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"agent.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.address\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.continent_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.region_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.geo.region_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.user.email\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.user.full_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.user.group.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.user.group.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.user.hash\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.user.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"client.user.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.account.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.availability_zone\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.image.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.instance.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.instance.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.machine.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.project.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.provider\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"cloud.region\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"container.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"container.image.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"container.image.tag\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"container.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"container.runtime\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.address\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.continent_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.region_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.geo.region_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.user.email\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.user.full_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.user.group.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.user.group.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.user.hash\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.user.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"destination.user.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ecs.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"error.code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"error.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"error.message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"error.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.action\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.category\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.created\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.dataset\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.duration\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.end\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.hash\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.kind\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.module\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.original\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.outcome\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.risk_score\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.risk_score_norm\",\"type\":\"number\",\"esTypes\":[\"float\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.severity\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.start\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.timezone\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"event.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.ctime\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.device\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.extension\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.gid\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.group\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.inode\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.mode\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.mtime\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.owner\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.path\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.size\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.target_path\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"file.uid\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.continent_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.region_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.region_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"group.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"group.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.architecture\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.containerized\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.continent_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.region_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.geo.region_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.hostname\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.build\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.codename\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.family\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.full\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.kernel\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.platform\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.os.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.user.email\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.user.full_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.user.group.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.user.group.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.user.hash\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.user.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host.user.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.request.body.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.request.body.content\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.request.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.request.method\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.request.referrer\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.response.body.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.response.body.content\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.response.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.response.status_code\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.rtt.content.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.rtt.response_header.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.rtt.total.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.rtt.validate.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.rtt.validate_body.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.rtt.write_request.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"http.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"icmp.requests\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"icmp.rtt.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"jolokia.agent.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"jolokia.agent.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"jolokia.secured\",\"type\":\"boolean\",\"esTypes\":[\"boolean\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"jolokia.server.product\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"jolokia.server.vendor\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"jolokia.server.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"jolokia.url\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.container.image\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.container.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.deployment.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.namespace\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.node.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.pod.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.pod.uid\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.replicaset.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"kubernetes.statefulset.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"log.level\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"log.original\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"message\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"monitor.check_group\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"monitor.duration.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"monitor.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"monitor.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"monitor.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"monitor.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.application\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.community_id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.direction\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.forwarded_ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.iana_number\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.protocol\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.transport\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"network.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.continent_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.region_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.geo.region_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.hostname\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.os.family\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.os.full\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.os.kernel\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.os.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.os.platform\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.os.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.serial_number\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.vendor\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"observer.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"organization.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"organization.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"os.family\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"os.full\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"os.kernel\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"os.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"os.platform\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"os.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.args\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.executable\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.pid\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.ppid\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.start\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.thread.id\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.title\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"process.working_directory\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"related.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"resolve.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"resolve.rtt.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.address\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.continent_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.region_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.geo.region_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.user.email\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.user.full_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.user.group.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.user.group.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.user.hash\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.user.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"server.user.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"service.ephemeral_id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"service.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"service.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"service.state\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"service.type\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"service.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"socks5.rtt.connect.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.address\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.city_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.continent_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.country_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.country_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.location\",\"type\":\"geo_point\",\"esTypes\":[\"geo_point\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.region_iso_code\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.geo.region_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.ip\",\"type\":\"ip\",\"esTypes\":[\"ip\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.mac\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.user.email\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.user.full_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.user.group.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.user.group.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.user.hash\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.user.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"source.user.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"summary.down\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"summary.up\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tags\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tcp.rtt.connect.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tcp.rtt.validate.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"timeseries.instance\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.certificate_not_valid_after\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.certificate_not_valid_before\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tls.rtt.handshake.us\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.domain\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.fragment\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.full\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.original\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.password\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.path\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.query\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.scheme\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url.username\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user.email\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user.full_name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user.group.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user.group.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user.hash\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user.id\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.device.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.original\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.os.family\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.os.full\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.os.kernel\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.os.name\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.os.platform\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.os.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"user_agent.version\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true}]", - "timeFieldName": "@timestamp", - "title": "heartbeat-8*" - }, - "id": "heartbeat-8*", - "migrationVersion": { "index-pattern": "6.5.0" }, - "references": [], - "type": "index-pattern", - "updated_at": "2019-08-20T17:45:34.286Z", - "version": "1" -} diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/kibana_saved_objects_adapter.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/kibana_saved_objects_adapter.ts deleted file mode 100644 index 7628c5bac0660..0000000000000 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/kibana_saved_objects_adapter.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { UMSavedObjectsAdapter } from './types'; -import uptimeIndexPattern from './heartbeat_index_pattern.json'; - -export const savedObjectsAdapter: UMSavedObjectsAdapter = { - getUptimeIndexPattern: async client => { - try { - return await client.get('index-pattern', uptimeIndexPattern.id); - } catch (error) { - return await client.create( - 'index-pattern', - { - ...uptimeIndexPattern.attributes, - title: 'UptimeIndexPattern', - }, - { id: uptimeIndexPattern.id, overwrite: false } - ); - } - }, -}; diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/types.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/types.ts deleted file mode 100644 index 0fef1e1428e97..0000000000000 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/types.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { UMSavedObjectsQueryFn } from '../framework'; - -export interface UMSavedObjectsAdapter { - getUptimeIndexPattern: UMSavedObjectsQueryFn; -} diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/index.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/stub_index_pattern/index.ts similarity index 67% rename from x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/index.ts rename to x-pack/legacy/plugins/uptime/server/lib/adapters/stub_index_pattern/index.ts index bd86daba1bcb6..4ef6e3fa8a6bd 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/adapters/saved_objects/index.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/stub_index_pattern/index.ts @@ -4,5 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { savedObjectsAdapter } from './kibana_saved_objects_adapter'; -export { UMSavedObjectsAdapter } from './types'; +export { StubIndexPatternAdapter, stubIndexPatternAdapter } from './stub_index_pattern'; diff --git a/x-pack/legacy/plugins/uptime/server/lib/adapters/stub_index_pattern/stub_index_pattern.ts b/x-pack/legacy/plugins/uptime/server/lib/adapters/stub_index_pattern/stub_index_pattern.ts new file mode 100644 index 0000000000000..49ec86af25040 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/server/lib/adapters/stub_index_pattern/stub_index_pattern.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { APICaller } from 'kibana/server'; +import { + IndexPatternsFetcher, + IIndexPattern, +} from '../../../../../../../../src/plugins/data/server'; +import { INDEX_NAMES } from '../../../../common/constants'; +import { UMElasticsearchQueryFn } from '../framework'; + +export interface StubIndexPatternAdapter { + getUptimeIndexPattern: UMElasticsearchQueryFn; +} + +export const stubIndexPatternAdapter: StubIndexPatternAdapter = { + getUptimeIndexPattern: async callES => { + const indexPatternsFetcher = new IndexPatternsFetcher((...rest: Parameters) => + callES(...rest) + ); + + // Since `getDynamicIndexPattern` is called in setup_request (and thus by every endpoint) + // and since `getFieldsForWildcard` will throw if the specified indices don't exist, + // we have to catch errors here to avoid all endpoints returning 500 for users without APM data + // (would be a bad first time experience) + try { + const fields = await indexPatternsFetcher.getFieldsForWildcard({ + pattern: INDEX_NAMES.HEARTBEAT, + }); + + const indexPattern: IIndexPattern = { + fields, + title: INDEX_NAMES.HEARTBEAT, + }; + + return indexPattern; + } catch (e) { + const notExists = e.output?.statusCode === 404; + if (notExists) { + // eslint-disable-next-line no-console + console.error( + `Could not get dynamic index pattern because indices "${INDEX_NAMES.HEARTBEAT}" don't exist` + ); + return; + } + + // re-throw + throw e; + } + }, +}; diff --git a/x-pack/legacy/plugins/uptime/server/lib/compose/kibana.ts b/x-pack/legacy/plugins/uptime/server/lib/compose/kibana.ts index cc11bf90da5f3..b44a890de3819 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/compose/kibana.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/compose/kibana.ts @@ -10,7 +10,7 @@ import { elasticsearchPingsAdapter } from '../adapters/pings'; import { licenseCheck } from '../domains'; import { UMDomainLibs, UMServerLibs } from '../lib'; import { elasticsearchMonitorStatesAdapter } from '../adapters/monitor_states'; -import { savedObjectsAdapter } from '../adapters/saved_objects'; +import { stubIndexPatternAdapter } from '../adapters/stub_index_pattern'; import { UptimeCorePlugins, UptimeCoreSetup } from '../adapters/framework'; export function compose(server: UptimeCoreSetup, plugins: UptimeCorePlugins): UMServerLibs { @@ -21,7 +21,7 @@ export function compose(server: UptimeCoreSetup, plugins: UptimeCorePlugins): UM monitors: elasticsearchMonitorsAdapter, monitorStates: elasticsearchMonitorStatesAdapter, pings: elasticsearchPingsAdapter, - savedObjects: savedObjectsAdapter, + stubIndexPattern: stubIndexPatternAdapter, }; return { diff --git a/x-pack/legacy/plugins/uptime/server/lib/lib.ts b/x-pack/legacy/plugins/uptime/server/lib/lib.ts index da87c3ebfe301..e5ab9940d482d 100644 --- a/x-pack/legacy/plugins/uptime/server/lib/lib.ts +++ b/x-pack/legacy/plugins/uptime/server/lib/lib.ts @@ -9,7 +9,7 @@ import { UMMonitorsAdapter, UMMonitorStatesAdapter, UMPingsAdapter, - UMSavedObjectsAdapter, + StubIndexPatternAdapter, } from './adapters'; import { UMLicenseCheck } from './domains'; @@ -18,7 +18,7 @@ export interface UMDomainLibs { monitors: UMMonitorsAdapter; monitorStates: UMMonitorStatesAdapter; pings: UMPingsAdapter; - savedObjects: UMSavedObjectsAdapter; + stubIndexPattern: StubIndexPatternAdapter; } export interface UMServerLibs extends UMDomainLibs { diff --git a/x-pack/legacy/plugins/uptime/server/rest_api/index_pattern/get_index_pattern.ts b/x-pack/legacy/plugins/uptime/server/rest_api/index_pattern/get_index_pattern.ts index f061307807a42..cee8eaf3f9cae 100644 --- a/x-pack/legacy/plugins/uptime/server/rest_api/index_pattern/get_index_pattern.ts +++ b/x-pack/legacy/plugins/uptime/server/rest_api/index_pattern/get_index_pattern.ts @@ -14,11 +14,11 @@ export const createGetIndexPatternRoute: UMRestApiRouteFactory = (libs: UMServer options: { tags: ['access:uptime'], }, - handler: async ({ savedObjectsClient: client }, _context, _request, response): Promise => { + handler: async ({ callES }, _context, _request, response): Promise => { try { return response.ok({ body: { - ...(await libs.savedObjects.getUptimeIndexPattern(client, undefined)), + ...(await libs.stubIndexPattern.getUptimeIndexPattern(callES)), }, }); } catch (e) { From fb334ef56662e56ea0e9b68331914eccc5e96afe Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Thu, 30 Jan 2020 08:26:16 -0500 Subject: [PATCH 71/72] [ML] New Platform server shim: update calendar routes to use new platform router (#56264) * migrate calendar routes to NP * add proper types for calendars and events * set actual client in constructor so isLegacy is not stored * remove unnecessary comments * fix calendar schema for missing calendar_id and event_id properties --- ...alendar_manager.js => calendar_manager.ts} | 88 ++++++---- .../{event_manager.js => event_manager.ts} | 39 +++-- .../models/calendar/{index.js => index.ts} | 2 +- .../ml/server/models/job_service/groups.js | 2 +- .../ml/server/models/job_service/jobs.js | 2 +- .../server/new_platform/calendars_schema.ts | 25 +++ .../plugins/ml/server/new_platform/plugin.ts | 2 - .../plugins/ml/server/routes/calendars.js | 110 ------------- .../plugins/ml/server/routes/calendars.ts | 155 ++++++++++++++++++ 9 files changed, 268 insertions(+), 157 deletions(-) rename x-pack/legacy/plugins/ml/server/models/calendar/{calendar_manager.js => calendar_manager.ts} (53%) rename x-pack/legacy/plugins/ml/server/models/calendar/{event_manager.js => event_manager.ts} (51%) rename x-pack/legacy/plugins/ml/server/models/calendar/{index.js => index.ts} (75%) create mode 100644 x-pack/legacy/plugins/ml/server/new_platform/calendars_schema.ts delete mode 100644 x-pack/legacy/plugins/ml/server/routes/calendars.js create mode 100644 x-pack/legacy/plugins/ml/server/routes/calendars.ts diff --git a/x-pack/legacy/plugins/ml/server/models/calendar/calendar_manager.js b/x-pack/legacy/plugins/ml/server/models/calendar/calendar_manager.ts similarity index 53% rename from x-pack/legacy/plugins/ml/server/models/calendar/calendar_manager.js rename to x-pack/legacy/plugins/ml/server/models/calendar/calendar_manager.ts index e74a81e92420f..2487943b5efc0 100644 --- a/x-pack/legacy/plugins/ml/server/models/calendar/calendar_manager.js +++ b/x-pack/legacy/plugins/ml/server/models/calendar/calendar_manager.ts @@ -4,23 +4,44 @@ * you may not use this file except in compliance with the Elastic License. */ -import _ from 'lodash'; +import { difference } from 'lodash'; import Boom from 'boom'; -import { EventManager } from './event_manager'; +import { EventManager, CalendarEvent } from './event_manager'; + +interface BasicCalendar { + job_ids: string[]; + description?: string; + events: CalendarEvent[]; +} + +export interface Calendar extends BasicCalendar { + calendar_id: string; +} + +export interface FormCalendar extends BasicCalendar { + calendarId: string; +} export class CalendarManager { - constructor(callWithRequest) { - this.callWithRequest = callWithRequest; - this.eventManager = new EventManager(callWithRequest); + private _client: any; + private _eventManager: any; + + constructor(isLegacy: boolean, client: any) { + const actualClient = isLegacy === true ? client : client.ml!.mlClient.callAsCurrentUser; + this._client = actualClient; + this._eventManager = new EventManager(actualClient); } - async getCalendar(calendarId) { + async getCalendar(calendarId: string) { try { - const resp = await this.callWithRequest('ml.calendars', { calendarId }); + const resp = await this._client('ml.calendars', { + calendarId, + }); + const calendars = resp.calendars; if (calendars.length) { const calendar = calendars[0]; - calendar.events = await this.eventManager.getCalendarEvents(calendarId); + calendar.events = await this._eventManager.getCalendarEvents(calendarId); return calendar; } else { throw Boom.notFound(`Calendar with the id "${calendarId}" not found`); @@ -32,9 +53,10 @@ export class CalendarManager { async getAllCalendars() { try { - const calendarsResp = await this.callWithRequest('ml.calendars'); - const events = await this.eventManager.getAllEvents(); - const calendars = calendarsResp.calendars; + const calendarsResp = await this._client('ml.calendars'); + + const events: CalendarEvent[] = await this._eventManager.getAllEvents(); + const calendars: Calendar[] = calendarsResp.calendars; calendars.forEach(cal => (cal.events = [])); // loop events and combine with related calendars @@ -55,24 +77,28 @@ export class CalendarManager { * @param calendarIds * @returns {Promise<*>} */ - async getCalendarsByIds(calendarIds) { + async getCalendarsByIds(calendarIds: string) { try { - const calendars = await this.getAllCalendars(); + const calendars: Calendar[] = await this.getAllCalendars(); return calendars.filter(calendar => calendarIds.includes(calendar.calendar_id)); } catch (error) { throw Boom.badRequest(error); } } - async newCalendar(calendar) { + async newCalendar(calendar: FormCalendar) { const calendarId = calendar.calendarId; const events = calendar.events; delete calendar.calendarId; delete calendar.events; try { - await this.callWithRequest('ml.addCalendar', { calendarId, body: calendar }); + await this._client('ml.addCalendar', { + calendarId, + body: calendar, + }); + if (events.length) { - await this.eventManager.addEvents(calendarId, events); + await this._eventManager.addEvents(calendarId, events); } // return the newly created calendar @@ -82,38 +108,38 @@ export class CalendarManager { } } - async updateCalendar(calendarId, calendar) { - const origCalendar = await this.getCalendar(calendarId); + async updateCalendar(calendarId: string, calendar: Calendar) { + const origCalendar: Calendar = await this.getCalendar(calendarId); try { // update job_ids - const jobsToAdd = _.difference(calendar.job_ids, origCalendar.job_ids); - const jobsToRemove = _.difference(origCalendar.job_ids, calendar.job_ids); + const jobsToAdd = difference(calendar.job_ids, origCalendar.job_ids); + const jobsToRemove = difference(origCalendar.job_ids, calendar.job_ids); // workout the differences between the original events list and the new one // if an event has no event_id, it must be new const eventsToAdd = calendar.events.filter( - event => origCalendar.events.find(e => this.eventManager.isEqual(e, event)) === undefined + event => origCalendar.events.find(e => this._eventManager.isEqual(e, event)) === undefined ); // if an event in the original calendar cannot be found, it must have been deleted - const eventsToRemove = origCalendar.events.filter( - event => calendar.events.find(e => this.eventManager.isEqual(e, event)) === undefined + const eventsToRemove: CalendarEvent[] = origCalendar.events.filter( + event => calendar.events.find(e => this._eventManager.isEqual(e, event)) === undefined ); // note, both of the loops below could be removed if the add and delete endpoints // allowed multiple job_ids - //add all new jobs + // add all new jobs if (jobsToAdd.length) { - await this.callWithRequest('ml.addJobToCalendar', { + await this._client('ml.addJobToCalendar', { calendarId, jobId: jobsToAdd.join(','), }); } - //remove all removed jobs + // remove all removed jobs if (jobsToRemove.length) { - await this.callWithRequest('ml.removeJobFromCalendar', { + await this._client('ml.removeJobFromCalendar', { calendarId, jobId: jobsToRemove.join(','), }); @@ -121,13 +147,13 @@ export class CalendarManager { // add all new events if (eventsToAdd.length !== 0) { - await this.eventManager.addEvents(calendarId, eventsToAdd); + await this._eventManager.addEvents(calendarId, eventsToAdd); } // remove all removed events await Promise.all( eventsToRemove.map(async event => { - await this.eventManager.deleteEvent(calendarId, event.event_id); + await this._eventManager.deleteEvent(calendarId, event.event_id); }) ); } catch (error) { @@ -138,7 +164,7 @@ export class CalendarManager { return await this.getCalendar(calendarId); } - async deleteCalendar(calendarId) { - return this.callWithRequest('ml.deleteCalendar', { calendarId }); + async deleteCalendar(calendarId: string) { + return this._client('ml.deleteCalendar', { calendarId }); } } diff --git a/x-pack/legacy/plugins/ml/server/models/calendar/event_manager.js b/x-pack/legacy/plugins/ml/server/models/calendar/event_manager.ts similarity index 51% rename from x-pack/legacy/plugins/ml/server/models/calendar/event_manager.js rename to x-pack/legacy/plugins/ml/server/models/calendar/event_manager.ts index 8bdb5dcf4a3e3..19f2eda466179 100644 --- a/x-pack/legacy/plugins/ml/server/models/calendar/event_manager.js +++ b/x-pack/legacy/plugins/ml/server/models/calendar/event_manager.ts @@ -6,14 +6,24 @@ import Boom from 'boom'; +export interface CalendarEvent { + calendar_id?: string; + event_id?: string; + description: string; + start_time: number; + end_time: number; +} + export class EventManager { - constructor(callWithRequest) { - this.callWithRequest = callWithRequest; + private _client: any; + constructor(client: any) { + this._client = client; } - async getCalendarEvents(calendarId) { + async getCalendarEvents(calendarId: string) { try { - const resp = await this.callWithRequest('ml.events', { calendarId }); + const resp = await this._client('ml.events', { calendarId }); + return resp.events; } catch (error) { throw Boom.badRequest(error); @@ -21,31 +31,38 @@ export class EventManager { } // jobId is optional - async getAllEvents(jobId) { + async getAllEvents(jobId?: string) { const calendarId = '_all'; try { - const resp = await this.callWithRequest('ml.events', { calendarId, jobId }); + const resp = await this._client('ml.events', { + calendarId, + jobId, + }); + return resp.events; } catch (error) { throw Boom.badRequest(error); } } - async addEvents(calendarId, events) { + async addEvents(calendarId: string, events: CalendarEvent[]) { const body = { events }; try { - return await this.callWithRequest('ml.addEvent', { calendarId, body }); + return await this._client('ml.addEvent', { + calendarId, + body, + }); } catch (error) { throw Boom.badRequest(error); } } - async deleteEvent(calendarId, eventId) { - return this.callWithRequest('ml.deleteEvent', { calendarId, eventId }); + async deleteEvent(calendarId: string, eventId: string) { + return this._client('ml.deleteEvent', { calendarId, eventId }); } - isEqual(ev1, ev2) { + isEqual(ev1: CalendarEvent, ev2: CalendarEvent) { return ( ev1.event_id === ev2.event_id && ev1.description === ev2.description && diff --git a/x-pack/legacy/plugins/ml/server/models/calendar/index.js b/x-pack/legacy/plugins/ml/server/models/calendar/index.ts similarity index 75% rename from x-pack/legacy/plugins/ml/server/models/calendar/index.js rename to x-pack/legacy/plugins/ml/server/models/calendar/index.ts index 11f99bc8fd922..2364c3ac73811 100644 --- a/x-pack/legacy/plugins/ml/server/models/calendar/index.js +++ b/x-pack/legacy/plugins/ml/server/models/calendar/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { CalendarManager } from './calendar_manager'; +export { CalendarManager, Calendar, FormCalendar } from './calendar_manager'; diff --git a/x-pack/legacy/plugins/ml/server/models/job_service/groups.js b/x-pack/legacy/plugins/ml/server/models/job_service/groups.js index 91f82f04a9a0c..58237b2a8a730 100644 --- a/x-pack/legacy/plugins/ml/server/models/job_service/groups.js +++ b/x-pack/legacy/plugins/ml/server/models/job_service/groups.js @@ -7,7 +7,7 @@ import { CalendarManager } from '../calendar'; export function groupsProvider(callWithRequest) { - const calMngr = new CalendarManager(callWithRequest); + const calMngr = new CalendarManager(true, callWithRequest); async function getAllGroups() { const groups = {}; diff --git a/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js b/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js index b4b476c1f926e..e60593c9f0ed5 100644 --- a/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js +++ b/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js @@ -22,7 +22,7 @@ export function jobsProvider(callWithRequest) { const { forceDeleteDatafeed, getDatafeedIdsByJobId } = datafeedsProvider(callWithRequest); const { getAuditMessagesSummary } = jobAuditMessagesProvider(callWithRequest); const { getLatestBucketTimestampByJob } = resultsServiceProvider(callWithRequest); - const calMngr = new CalendarManager(callWithRequest); + const calMngr = new CalendarManager(true, callWithRequest); async function forceDeleteJob(jobId) { return callWithRequest('ml.deleteJob', { jobId, force: true }); diff --git a/x-pack/legacy/plugins/ml/server/new_platform/calendars_schema.ts b/x-pack/legacy/plugins/ml/server/new_platform/calendars_schema.ts new file mode 100644 index 0000000000000..f5e59d983a9aa --- /dev/null +++ b/x-pack/legacy/plugins/ml/server/new_platform/calendars_schema.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { schema } from '@kbn/config-schema'; + +export const calendarSchema = { + calendar_id: schema.maybe(schema.string()), + calendarId: schema.string(), + job_ids: schema.arrayOf(schema.maybe(schema.string())), + description: schema.maybe(schema.string()), + events: schema.arrayOf( + schema.maybe( + schema.object({ + event_id: schema.maybe(schema.string()), + calendar_id: schema.maybe(schema.string()), + description: schema.maybe(schema.string()), + start_time: schema.any(), + end_time: schema.any(), + }) + ) + ), +}; diff --git a/x-pack/legacy/plugins/ml/server/new_platform/plugin.ts b/x-pack/legacy/plugins/ml/server/new_platform/plugin.ts index 681b2ff20c8aa..2b9219b2226f5 100644 --- a/x-pack/legacy/plugins/ml/server/new_platform/plugin.ts +++ b/x-pack/legacy/plugins/ml/server/new_platform/plugin.ts @@ -41,13 +41,11 @@ import { makeMlUsageCollector } from '../lib/ml_telemetry'; import { notificationRoutes } from '../routes/notification_settings'; // @ts-ignore: could not find declaration file for module import { systemRoutes } from '../routes/system'; -// @ts-ignore: could not find declaration file for module import { dataFrameAnalyticsRoutes } from '../routes/data_frame_analytics'; // @ts-ignore: could not find declaration file for module import { dataRecognizer } from '../routes/modules'; // @ts-ignore: could not find declaration file for module import { dataVisualizerRoutes } from '../routes/data_visualizer'; -// @ts-ignore: could not find declaration file for module import { calendars } from '../routes/calendars'; // @ts-ignore: could not find declaration file for module import { fieldsService } from '../routes/fields_service'; diff --git a/x-pack/legacy/plugins/ml/server/routes/calendars.js b/x-pack/legacy/plugins/ml/server/routes/calendars.js deleted file mode 100644 index 7a0f341ef9666..0000000000000 --- a/x-pack/legacy/plugins/ml/server/routes/calendars.js +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { callWithRequestFactory } from '../client/call_with_request_factory'; -import { wrapError } from '../client/errors'; -import { CalendarManager } from '../models/calendar'; - -function getAllCalendars(callWithRequest) { - const cal = new CalendarManager(callWithRequest); - return cal.getAllCalendars(); -} - -function getCalendar(callWithRequest, calendarId) { - const cal = new CalendarManager(callWithRequest); - return cal.getCalendar(calendarId); -} - -function newCalendar(callWithRequest, calendar) { - const cal = new CalendarManager(callWithRequest); - return cal.newCalendar(calendar); -} - -function updateCalendar(callWithRequest, calendarId, calendar) { - const cal = new CalendarManager(callWithRequest); - return cal.updateCalendar(calendarId, calendar); -} - -function deleteCalendar(callWithRequest, calendarId) { - const cal = new CalendarManager(callWithRequest); - return cal.deleteCalendar(calendarId); -} - -function getCalendarsByIds(callWithRequest, calendarIds) { - const cal = new CalendarManager(callWithRequest); - return cal.getCalendarsByIds(calendarIds); -} - -export function calendars({ commonRouteConfig, elasticsearchPlugin, route }) { - route({ - method: 'GET', - path: '/api/ml/calendars', - handler(request) { - const callWithRequest = callWithRequestFactory(elasticsearchPlugin, request); - return getAllCalendars(callWithRequest).catch(resp => wrapError(resp)); - }, - config: { - ...commonRouteConfig, - }, - }); - - route({ - method: 'GET', - path: '/api/ml/calendars/{calendarIds}', - handler(request) { - const callWithRequest = callWithRequestFactory(elasticsearchPlugin, request); - const calendarIds = request.params.calendarIds.split(','); - if (calendarIds.length === 1) { - return getCalendar(callWithRequest, calendarIds[0]).catch(resp => wrapError(resp)); - } else { - return getCalendarsByIds(callWithRequest, calendarIds).catch(resp => wrapError(resp)); - } - }, - config: { - ...commonRouteConfig, - }, - }); - - route({ - method: 'PUT', - path: '/api/ml/calendars', - handler(request) { - const callWithRequest = callWithRequestFactory(elasticsearchPlugin, request); - const body = request.payload; - return newCalendar(callWithRequest, body).catch(resp => wrapError(resp)); - }, - config: { - ...commonRouteConfig, - }, - }); - - route({ - method: 'PUT', - path: '/api/ml/calendars/{calendarId}', - handler(request) { - const callWithRequest = callWithRequestFactory(elasticsearchPlugin, request); - const calendarId = request.params.calendarId; - const body = request.payload; - return updateCalendar(callWithRequest, calendarId, body).catch(resp => wrapError(resp)); - }, - config: { - ...commonRouteConfig, - }, - }); - - route({ - method: 'DELETE', - path: '/api/ml/calendars/{calendarId}', - handler(request) { - const callWithRequest = callWithRequestFactory(elasticsearchPlugin, request); - const calendarId = request.params.calendarId; - return deleteCalendar(callWithRequest, calendarId).catch(resp => wrapError(resp)); - }, - config: { - ...commonRouteConfig, - }, - }); -} diff --git a/x-pack/legacy/plugins/ml/server/routes/calendars.ts b/x-pack/legacy/plugins/ml/server/routes/calendars.ts new file mode 100644 index 0000000000000..19d614a4e6a22 --- /dev/null +++ b/x-pack/legacy/plugins/ml/server/routes/calendars.ts @@ -0,0 +1,155 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { RequestHandlerContext } from 'src/core/server'; +import { schema } from '@kbn/config-schema'; +import { licensePreRoutingFactory } from '../new_platform/licence_check_pre_routing_factory'; +import { wrapError } from '../client/error_wrapper'; +import { RouteInitialization } from '../new_platform/plugin'; +import { calendarSchema } from '../new_platform/calendars_schema'; +import { CalendarManager, Calendar, FormCalendar } from '../models/calendar'; + +function getAllCalendars(context: RequestHandlerContext) { + const cal = new CalendarManager(false, context); + return cal.getAllCalendars(); +} + +function getCalendar(context: RequestHandlerContext, calendarId: string) { + const cal = new CalendarManager(false, context); + return cal.getCalendar(calendarId); +} + +function newCalendar(context: RequestHandlerContext, calendar: FormCalendar) { + const cal = new CalendarManager(false, context); + return cal.newCalendar(calendar); +} + +function updateCalendar(context: RequestHandlerContext, calendarId: string, calendar: Calendar) { + const cal = new CalendarManager(false, context); + return cal.updateCalendar(calendarId, calendar); +} + +function deleteCalendar(context: RequestHandlerContext, calendarId: string) { + const cal = new CalendarManager(false, context); + return cal.deleteCalendar(calendarId); +} + +function getCalendarsByIds(context: RequestHandlerContext, calendarIds: string) { + const cal = new CalendarManager(false, context); + return cal.getCalendarsByIds(calendarIds); +} + +export function calendars({ xpackMainPlugin, router }: RouteInitialization) { + router.get( + { + path: '/api/ml/calendars', + validate: false, + }, + licensePreRoutingFactory(xpackMainPlugin, async (context, request, response) => { + try { + const resp = await getAllCalendars(context); + + return response.ok({ + body: resp, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); + + router.get( + { + path: '/api/ml/calendars/{calendarIds}', + validate: { + params: schema.object({ calendarIds: schema.string() }), + }, + }, + licensePreRoutingFactory(xpackMainPlugin, async (context, request, response) => { + let returnValue; + try { + const calendarIds = request.params.calendarIds.split(','); + + if (calendarIds.length === 1) { + returnValue = await getCalendar(context, calendarIds[0]); + } else { + returnValue = await getCalendarsByIds(context, calendarIds); + } + + return response.ok({ + body: returnValue, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); + + router.put( + { + path: '/api/ml/calendars', + validate: { + body: schema.object({ ...calendarSchema }), + }, + }, + licensePreRoutingFactory(xpackMainPlugin, async (context, request, response) => { + try { + const body = request.body; + const resp = await newCalendar(context, body); + + return response.ok({ + body: resp, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); + + router.put( + { + path: '/api/ml/calendars/{calendarId}', + validate: { + params: schema.object({ calendarId: schema.string() }), + body: schema.object({ ...calendarSchema }), + }, + }, + licensePreRoutingFactory(xpackMainPlugin, async (context, request, response) => { + try { + const { calendarId } = request.params; + const body = request.body; + const resp = await updateCalendar(context, calendarId, body); + + return response.ok({ + body: resp, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); + + router.delete( + { + path: '/api/ml/calendars/{calendarId}', + validate: { + params: schema.object({ calendarId: schema.string() }), + }, + }, + licensePreRoutingFactory(xpackMainPlugin, async (context, request, response) => { + try { + const { calendarId } = request.params; + const resp = await deleteCalendar(context, calendarId); + + return response.ok({ + body: resp, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); +} From 371abf6fd22a0d1fcd008ad56522fb97b0b73ae8 Mon Sep 17 00:00:00 2001 From: Maja Grubic Date: Thu, 30 Jan 2020 14:01:01 +0000 Subject: [PATCH 72/72] [Filter Bar] Remove flickering when opening filter bar popover (#56222) Co-authored-by: Elastic Machine --- src/plugins/data/public/ui/filter_bar/filter_bar.tsx | 1 + src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/src/plugins/data/public/ui/filter_bar/filter_bar.tsx b/src/plugins/data/public/ui/filter_bar/filter_bar.tsx index 2f1b1f8588eb9..2aaceddd68f0c 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_bar.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_bar.tsx @@ -96,6 +96,7 @@ function FilterBarUI(props: Props) { withTitle panelPaddingSize="none" ownFocus={true} + initialFocus=".filterEditor__hiddenItem" >

    diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx index b058d231b8306..b83c3a8e905dc 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx @@ -95,6 +95,7 @@ class FilterEditorUI extends Component { defaultMessage="Edit filter" /> + {this.state.isCustomEditorOpen ? (