mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[data views] Type cleanup, monitoring uses data views service instead of faking data view (#128853)
* remove deprecated types * remove more IIndexPattern * Update x-pack/plugins/monitoring/kibana.json Co-authored-by: Felix Stürmer <weltenwort@users.noreply.github.com> * switch conditional to guard statement * add data view to triggers_actions_ui Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Felix Stürmer <weltenwort@users.noreply.github.com>
This commit is contained in:
parent
d5d798f09c
commit
0a800c4b8a
29 changed files with 115 additions and 76 deletions
|
@ -701,7 +701,7 @@ export const getOperatorOptions = (
|
|||
* to find it's corresponding keyword type (if available) which does
|
||||
* generate autocomplete values
|
||||
*
|
||||
* @param fields IFieldType fields
|
||||
* @param fields DataViewFieldBase fields
|
||||
* @param selectedField the field name that was selected
|
||||
* @param isTextType we only want a corresponding keyword field if
|
||||
* the selected field is of type 'text'
|
||||
|
|
|
@ -39,7 +39,7 @@ describe('_terms_enum suggestions', () => {
|
|||
'fieldName',
|
||||
'query',
|
||||
[],
|
||||
{ name: 'field_name', type: 'string' }
|
||||
{ name: 'field_name', type: 'string', searchable: true, aggregatable: true }
|
||||
);
|
||||
|
||||
const [[args]] = esClientMock.termsEnum.mock.calls;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
import { ElasticsearchClient, SavedObjectsClientContract } from 'kibana/server';
|
||||
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import { IFieldType } from '../../common';
|
||||
import { FieldSpec } from '../../common';
|
||||
import { findIndexPatternById, getFieldByName } from '../data_views';
|
||||
import { ConfigSchema } from '../../config';
|
||||
|
||||
|
@ -20,7 +20,7 @@ export async function termsEnumSuggestions(
|
|||
fieldName: string,
|
||||
query: string,
|
||||
filters?: estypes.QueryDslQueryContainer[],
|
||||
field?: IFieldType,
|
||||
field?: FieldSpec,
|
||||
abortSignal?: AbortSignal
|
||||
) {
|
||||
const { tiers } = config.autocomplete.valueSuggestions;
|
||||
|
|
|
@ -43,7 +43,7 @@ export {
|
|||
getCapabilitiesForRollupIndices,
|
||||
} from './data_views';
|
||||
|
||||
export type { IFieldType, IndexPatternAttributes } from '../common';
|
||||
export type { IndexPatternAttributes } from '../common';
|
||||
export {
|
||||
IndexPatternField,
|
||||
ES_FIELD_TYPES,
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { IFieldType } from './types';
|
||||
import { FieldSpec } from '..';
|
||||
|
||||
export const fields: IFieldType[] = [
|
||||
export const fields: FieldSpec[] = [
|
||||
{
|
||||
name: 'bytes',
|
||||
type: 'number',
|
||||
|
@ -308,4 +308,4 @@ export const fields: IFieldType[] = [
|
|||
},
|
||||
];
|
||||
|
||||
export const getField = (name: string) => fields.find((field) => field.name === name) as IFieldType;
|
||||
export const getField = (name: string) => fields.find((field) => field.name === name) as FieldSpec;
|
||||
|
|
|
@ -7,18 +7,13 @@
|
|||
*/
|
||||
|
||||
import { SavedObjectsClientContract } from 'kibana/server';
|
||||
import {
|
||||
IFieldType,
|
||||
DATA_VIEW_SAVED_OBJECT_TYPE,
|
||||
DataViewAttributes,
|
||||
SavedObject,
|
||||
} from '../common';
|
||||
import { DATA_VIEW_SAVED_OBJECT_TYPE, DataViewAttributes, SavedObject, FieldSpec } from '../common';
|
||||
|
||||
export const getFieldByName = (
|
||||
fieldName: string,
|
||||
indexPattern: SavedObject<DataViewAttributes>
|
||||
): IFieldType | undefined => {
|
||||
const fields: IFieldType[] = indexPattern && JSON.parse(indexPattern.attributes.fields);
|
||||
): FieldSpec | undefined => {
|
||||
const fields: FieldSpec[] = indexPattern && JSON.parse(indexPattern.attributes.fields);
|
||||
const field = fields && fields.find((f) => f.name === fieldName);
|
||||
|
||||
return field;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { IIndexPatternFieldList, DataView } from '../../../data_views/public';
|
||||
import { DataView } from '../../../data_views/public';
|
||||
|
||||
const fields = [
|
||||
{
|
||||
|
@ -62,7 +62,7 @@ const fields = [
|
|||
filterable: true,
|
||||
aggregatable: true,
|
||||
},
|
||||
] as IIndexPatternFieldList;
|
||||
] as DataView['fields'];
|
||||
|
||||
fields.getByName = (name: string) => {
|
||||
return fields.find((field) => field.name === name);
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { IIndexPatternFieldList, DataView } from '../../../data_views/public';
|
||||
import { DataView } from '../../../data_views/public';
|
||||
|
||||
const fields = [
|
||||
{
|
||||
|
@ -49,7 +49,7 @@ const fields = [
|
|||
scripted: true,
|
||||
filterable: false,
|
||||
},
|
||||
] as IIndexPatternFieldList;
|
||||
] as DataView['fields'];
|
||||
|
||||
fields.getByName = (name: string) => {
|
||||
return fields.find((field) => field.name === name);
|
||||
|
|
|
@ -13,6 +13,7 @@ import { coreMock as mockCoreMock } from 'src/core/public/mocks';
|
|||
import { Comparator, InventoryMetricConditions } from '../../../../common/alerting/metrics';
|
||||
import { SnapshotCustomMetricInput } from '../../../../common/http_api/snapshot_api';
|
||||
import { AlertContextMeta, defaultExpression, ExpressionRow, Expressions } from './expression';
|
||||
import { dataViewPluginMocks } from 'src/plugins/data_views/public/mocks';
|
||||
|
||||
jest.mock('../../../containers/metrics_source/use_source_via_http', () => ({
|
||||
useSourceViaHttp: () => ({
|
||||
|
@ -34,6 +35,8 @@ const exampleCustomMetric = {
|
|||
type: 'custom',
|
||||
} as SnapshotCustomMetricInput;
|
||||
|
||||
const dataViewMock = dataViewPluginMocks.createStartContract();
|
||||
|
||||
describe('Expression', () => {
|
||||
async function setup(currentOptions: AlertContextMeta) {
|
||||
const ruleParams = {
|
||||
|
@ -51,6 +54,7 @@ describe('Expression', () => {
|
|||
setRuleParams={(key, value) => Reflect.set(ruleParams, key, value)}
|
||||
setRuleProperty={() => {}}
|
||||
metadata={currentOptions}
|
||||
dataViews={dataViewMock}
|
||||
/>
|
||||
);
|
||||
|
||||
|
@ -116,6 +120,7 @@ describe('Expression', () => {
|
|||
setRuleParams={(key, value) => Reflect.set(ruleParams, key, value)}
|
||||
setRuleProperty={() => {}}
|
||||
metadata={{}}
|
||||
dataViews={dataViewMock}
|
||||
/>
|
||||
);
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import { coreMock as mockCoreMock } from 'src/core/public/mocks';
|
|||
import React from 'react';
|
||||
import { Expression, AlertContextMeta } from './expression';
|
||||
import { act } from 'react-dom/test-utils';
|
||||
import { dataViewPluginMocks } from 'src/plugins/data_views/public/mocks';
|
||||
|
||||
jest.mock('../../../containers/metrics_source/use_source_via_http', () => ({
|
||||
useSourceViaHttp: () => ({
|
||||
|
@ -38,6 +39,8 @@ jest.mock('../../../containers/ml/infra_ml_capabilities', () => ({
|
|||
}),
|
||||
}));
|
||||
|
||||
const dataViewMock = dataViewPluginMocks.createStartContract();
|
||||
|
||||
describe('Expression', () => {
|
||||
async function setup(currentOptions: AlertContextMeta) {
|
||||
const ruleParams = {
|
||||
|
@ -55,6 +58,7 @@ describe('Expression', () => {
|
|||
setRuleParams={(key, value) => Reflect.set(ruleParams, key, value)}
|
||||
setRuleProperty={() => {}}
|
||||
metadata={currentOptions}
|
||||
dataViews={dataViewMock}
|
||||
/>
|
||||
);
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import { coreMock as mockCoreMock } from 'src/core/public/mocks';
|
|||
import { Comparator } from '../../../../common/alerting/metrics';
|
||||
import { MetricsExplorerMetric } from '../../../../common/http_api/metrics_explorer';
|
||||
import { Expressions } from './expression';
|
||||
import { dataViewPluginMocks } from 'src/plugins/data_views/public/mocks';
|
||||
|
||||
jest.mock('../../../containers/metrics_source/use_source_via_http', () => ({
|
||||
useSourceViaHttp: () => ({
|
||||
|
@ -27,6 +28,8 @@ jest.mock('../../../hooks/use_kibana', () => ({
|
|||
}),
|
||||
}));
|
||||
|
||||
const dataViewMock = dataViewPluginMocks.createStartContract();
|
||||
|
||||
describe('Expression', () => {
|
||||
async function setup(currentOptions: {
|
||||
metrics?: MetricsExplorerMetric[];
|
||||
|
@ -51,6 +54,7 @@ describe('Expression', () => {
|
|||
metadata={{
|
||||
currentOptions,
|
||||
}}
|
||||
dataViews={dataViewMock}
|
||||
/>
|
||||
);
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"githubTeam": "stack-monitoring-ui"
|
||||
},
|
||||
"configPath": ["monitoring"],
|
||||
"requiredPlugins": ["licensing", "features", "data", "navigation", "observability"],
|
||||
"requiredPlugins": ["licensing", "features", "data", "navigation", "observability", "dataViews"],
|
||||
"optionalPlugins": [
|
||||
"infra",
|
||||
"usageCollection",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import React, { Fragment, useCallback } from 'react';
|
||||
import { EuiForm, EuiFormRow, EuiSpacer } from '@elastic/eui';
|
||||
import { DataPublicPluginStart } from 'src/plugins/data/public';
|
||||
import { DataViewsPublicPluginStart } from 'src/plugins/data_views/public';
|
||||
import { debounce } from 'lodash';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import { CommonAlertParamDetails } from '../../../../common/types/alerts';
|
||||
|
@ -29,14 +29,14 @@ export interface Props {
|
|||
setRuleProperty: (property: string, value: any) => void;
|
||||
errors: { [key: string]: string[] };
|
||||
paramDetails: CommonAlertParamDetails;
|
||||
data: DataPublicPluginStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
config?: MonitoringConfig;
|
||||
}
|
||||
|
||||
export const Expression: React.FC<Props> = (props) => {
|
||||
const { ruleParams, paramDetails, setRuleParams, errors, config, data } = props;
|
||||
const { ruleParams, paramDetails, setRuleParams, errors, config, dataViews } = props;
|
||||
|
||||
const { derivedIndexPattern } = useDerivedIndexPattern(data, config);
|
||||
const { derivedIndexPattern } = useDerivedIndexPattern(dataViews, config);
|
||||
|
||||
const alertParamsUi = Object.keys(paramDetails).map((alertParamName) => {
|
||||
const details = paramDetails[alertParamName];
|
||||
|
@ -92,11 +92,12 @@ export const Expression: React.FC<Props> = (props) => {
|
|||
|
||||
const onFilterChange = useCallback(
|
||||
(filter: string) => {
|
||||
setRuleParams('filterQueryText', filter);
|
||||
setRuleParams(
|
||||
'filterQuery',
|
||||
convertKueryToElasticSearchQuery(filter, derivedIndexPattern) || ''
|
||||
);
|
||||
if (derivedIndexPattern) setRuleParams('filterQueryText', filter);
|
||||
if (derivedIndexPattern)
|
||||
setRuleParams(
|
||||
'filterQuery',
|
||||
convertKueryToElasticSearchQuery(filter, derivedIndexPattern) || ''
|
||||
);
|
||||
},
|
||||
[setRuleParams, derivedIndexPattern]
|
||||
);
|
||||
|
@ -106,6 +107,17 @@ export const Expression: React.FC<Props> = (props) => {
|
|||
onFilterChange,
|
||||
]);
|
||||
|
||||
const kueryBar = derivedIndexPattern ? (
|
||||
<KueryBar
|
||||
value={ruleParams.filterQueryText}
|
||||
derivedIndexPattern={derivedIndexPattern}
|
||||
onSubmit={onFilterChange}
|
||||
onChange={debouncedOnFilterChange}
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
);
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<EuiForm component="form">
|
||||
|
@ -119,12 +131,7 @@ export const Expression: React.FC<Props> = (props) => {
|
|||
defaultMessage: 'Use a KQL expression to limit the scope of your alert trigger.',
|
||||
})}
|
||||
>
|
||||
<KueryBar
|
||||
value={ruleParams.filterQueryText}
|
||||
derivedIndexPattern={derivedIndexPattern}
|
||||
onSubmit={onFilterChange}
|
||||
onChange={debouncedOnFilterChange}
|
||||
/>
|
||||
{kueryBar}
|
||||
</EuiFormRow>
|
||||
<EuiSpacer />
|
||||
</EuiForm>
|
||||
|
|
|
@ -5,9 +5,8 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { DataViewFieldBase } from '@kbn/es-query';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { DataPublicPluginStart, IIndexPattern } from 'src/plugins/data/public';
|
||||
import { DataViewsPublicPluginStart, DataView } from 'src/plugins/data_views/public';
|
||||
import { prefixIndexPattern } from '../../../../common/ccs_utils';
|
||||
import {
|
||||
INDEX_PATTERN_BEATS,
|
||||
|
@ -20,26 +19,21 @@ import { MonitoringConfig } from '../../../types';
|
|||
const INDEX_PATTERNS = `${INDEX_PATTERN_ELASTICSEARCH},${INDEX_PATTERN_KIBANA},${INDEX_PATTERN_LOGSTASH},${INDEX_PATTERN_BEATS}`;
|
||||
|
||||
export const useDerivedIndexPattern = (
|
||||
data: DataPublicPluginStart,
|
||||
dataViews: DataViewsPublicPluginStart,
|
||||
config?: MonitoringConfig
|
||||
): { loading: boolean; derivedIndexPattern: IIndexPattern } => {
|
||||
): { loading: boolean; derivedIndexPattern?: DataView } => {
|
||||
const indexPattern = prefixIndexPattern(config || ({} as MonitoringConfig), INDEX_PATTERNS, '*');
|
||||
const [loading, setLoading] = useState<boolean>(true);
|
||||
const [fields, setFields] = useState<DataViewFieldBase[]>([]);
|
||||
const [dataView, setDataView] = useState<DataView>();
|
||||
useEffect(() => {
|
||||
(async function fetchData() {
|
||||
const result = await data.indexPatterns.getFieldsForWildcard({
|
||||
pattern: indexPattern,
|
||||
});
|
||||
setFields(result);
|
||||
const result = await dataViews.create({ title: indexPattern });
|
||||
setDataView(result);
|
||||
setLoading(false);
|
||||
})();
|
||||
}, [indexPattern, data.indexPatterns]);
|
||||
}, [indexPattern, dataViews]);
|
||||
return {
|
||||
loading,
|
||||
derivedIndexPattern: {
|
||||
title: indexPattern,
|
||||
fields,
|
||||
},
|
||||
derivedIndexPattern: dataView,
|
||||
};
|
||||
};
|
||||
|
|
|
@ -15,15 +15,16 @@ import { Props } from '../components/param_details_form/expression';
|
|||
|
||||
const FILTER_TYPING_DEBOUNCE_MS = 500;
|
||||
|
||||
export const Expression = ({ ruleParams, config, setRuleParams, data }: Props) => {
|
||||
const { derivedIndexPattern } = useDerivedIndexPattern(data, config);
|
||||
export const Expression = ({ ruleParams, config, setRuleParams, dataViews }: Props) => {
|
||||
const { derivedIndexPattern } = useDerivedIndexPattern(dataViews, config);
|
||||
const onFilterChange = useCallback(
|
||||
(filter: string) => {
|
||||
setRuleParams('filterQueryText', filter);
|
||||
setRuleParams(
|
||||
'filterQuery',
|
||||
convertKueryToElasticSearchQuery(filter, derivedIndexPattern) || ''
|
||||
);
|
||||
if (derivedIndexPattern) setRuleParams('filterQueryText', filter);
|
||||
if (derivedIndexPattern)
|
||||
setRuleParams(
|
||||
'filterQuery',
|
||||
convertKueryToElasticSearchQuery(filter, derivedIndexPattern) || ''
|
||||
);
|
||||
},
|
||||
[setRuleParams, derivedIndexPattern]
|
||||
);
|
||||
|
@ -32,6 +33,18 @@ export const Expression = ({ ruleParams, config, setRuleParams, data }: Props) =
|
|||
const debouncedOnFilterChange = useCallback(debounce(onFilterChange, FILTER_TYPING_DEBOUNCE_MS), [
|
||||
onFilterChange,
|
||||
]);
|
||||
|
||||
const kueryBar = derivedIndexPattern ? (
|
||||
<KueryBar
|
||||
value={ruleParams.filterQueryText}
|
||||
derivedIndexPattern={derivedIndexPattern}
|
||||
onSubmit={onFilterChange}
|
||||
onChange={debouncedOnFilterChange}
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
);
|
||||
|
||||
return (
|
||||
<EuiForm component="form">
|
||||
<EuiFormRow
|
||||
|
@ -43,12 +56,7 @@ export const Expression = ({ ruleParams, config, setRuleParams, data }: Props) =
|
|||
defaultMessage: 'Use a KQL expression to limit the scope of your alert trigger.',
|
||||
})}
|
||||
>
|
||||
<KueryBar
|
||||
value={ruleParams.filterQueryText}
|
||||
derivedIndexPattern={derivedIndexPattern}
|
||||
onSubmit={onFilterChange}
|
||||
onChange={debouncedOnFilterChange}
|
||||
/>
|
||||
{kueryBar}
|
||||
</EuiFormRow>
|
||||
<EuiSpacer />
|
||||
</EuiForm>
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
import { fromKueryExpression } from '@kbn/es-query';
|
||||
import { i18n } from '@kbn/i18n';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { IIndexPattern, QuerySuggestion } from '../../../../../../src/plugins/data/public';
|
||||
import type { DataView } from 'src/plugins/data_views/public';
|
||||
import { QuerySuggestion } from '../../../../../../src/plugins/data/public';
|
||||
import { AutocompleteField } from './autocomplete_field';
|
||||
import { WithKueryAutocompletion } from './with_kuery_autocompletion';
|
||||
|
||||
|
@ -21,7 +22,7 @@ type LoadSuggestionsFn = (
|
|||
export type CurryLoadSuggestionsType = (loadSuggestions: LoadSuggestionsFn) => LoadSuggestionsFn;
|
||||
|
||||
interface Props {
|
||||
derivedIndexPattern: IIndexPattern;
|
||||
derivedIndexPattern: DataView;
|
||||
onSubmit: (query: string) => void;
|
||||
onChange?: (query: string) => void;
|
||||
value?: string | null;
|
||||
|
@ -64,17 +65,12 @@ export const KueryBar = ({
|
|||
}
|
||||
};
|
||||
|
||||
const filteredDerivedIndexPattern = {
|
||||
...derivedIndexPattern,
|
||||
fields: derivedIndexPattern.fields,
|
||||
};
|
||||
|
||||
const defaultPlaceholder = i18n.translate('xpack.monitoring.alerts.kqlSearchFieldPlaceholder', {
|
||||
defaultMessage: 'Search for monitoring data',
|
||||
});
|
||||
|
||||
return (
|
||||
<WithKueryAutocompletion indexPattern={filteredDerivedIndexPattern}>
|
||||
<WithKueryAutocompletion indexPattern={derivedIndexPattern}>
|
||||
{({ isLoadingSuggestions, loadSuggestions, suggestions }) => (
|
||||
<AutocompleteField
|
||||
aria-label={placeholder}
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
*/
|
||||
|
||||
import React from 'react';
|
||||
import { QuerySuggestion, IIndexPattern, DataPublicPluginStart } from 'src/plugins/data/public';
|
||||
import { QuerySuggestion, DataPublicPluginStart } from 'src/plugins/data/public';
|
||||
import { DataView } from 'src/plugins/data_views/public';
|
||||
import {
|
||||
withKibana,
|
||||
KibanaReactContextValue,
|
||||
|
@ -21,7 +22,7 @@ interface WithKueryAutocompletionLifecycleProps {
|
|||
loadSuggestions: (expression: string, cursorPosition: number, maxSuggestions?: number) => void;
|
||||
suggestions: QuerySuggestion[];
|
||||
}>;
|
||||
indexPattern: IIndexPattern;
|
||||
indexPattern: DataView;
|
||||
}
|
||||
|
||||
interface WithKueryAutocompletionLifecycleState {
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
*/
|
||||
|
||||
import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query';
|
||||
import { IIndexPattern } from '../../../../../src/plugins/data/public';
|
||||
import { DataView } from '../../../../../src/plugins/data_views/public';
|
||||
|
||||
export const convertKueryToElasticSearchQuery = (
|
||||
kueryExpression: string,
|
||||
indexPattern: IIndexPattern
|
||||
indexPattern: DataView
|
||||
) => {
|
||||
try {
|
||||
return kueryExpression
|
||||
|
|
|
@ -109,6 +109,7 @@ export class MonitoringPlugin
|
|||
triggersActionsUi: pluginsStart.triggersActionsUi,
|
||||
usageCollection: plugins.usageCollection,
|
||||
appMountParameters: params,
|
||||
dataViews: pluginsStart.dataViews,
|
||||
};
|
||||
|
||||
Legacy.init({
|
||||
|
@ -122,6 +123,7 @@ export class MonitoringPlugin
|
|||
triggersActionsUi: deps.triggersActionsUi,
|
||||
usageCollection: deps.usageCollection,
|
||||
appMountParameters: deps.appMountParameters,
|
||||
dataViews: deps.dataViews,
|
||||
});
|
||||
|
||||
const config = Object.fromEntries(externalConfig);
|
||||
|
|
|
@ -14,12 +14,14 @@ import { UsageCollectionSetup } from '../../../../src/plugins/usage_collection/p
|
|||
export type { MonitoringConfig } from '../server';
|
||||
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
|
||||
export type { MLJobs } from '../server/lib/elasticsearch/get_ml_jobs';
|
||||
import { DataViewsPublicPluginStart } from '../../../../src/plugins/data_views/public';
|
||||
|
||||
export interface MonitoringStartPluginDependencies {
|
||||
navigation: NavigationStart;
|
||||
data: DataPublicPluginStart;
|
||||
triggersActionsUi: TriggersAndActionsUIPublicPluginStart;
|
||||
usageCollection: UsageCollectionSetup;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
}
|
||||
|
||||
interface LegacyStartDependencies {
|
||||
|
|
|
@ -11,6 +11,7 @@ import { of } from 'rxjs';
|
|||
import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers';
|
||||
import { act } from 'react-dom/test-utils';
|
||||
import { dataPluginMock } from 'src/plugins/data/public/mocks';
|
||||
import { dataViewPluginMocks } from 'src/plugins/data_views/public/mocks';
|
||||
import { unifiedSearchPluginMock } from 'src/plugins/unified_search/public/mocks';
|
||||
import { chartPluginMock } from 'src/plugins/charts/public/mocks';
|
||||
import {
|
||||
|
@ -99,6 +100,7 @@ const createDataPluginMock = () => {
|
|||
};
|
||||
|
||||
const dataMock = createDataPluginMock();
|
||||
const dataViewMock = dataViewPluginMocks.createStartContract();
|
||||
const unifiedSearchMock = unifiedSearchPluginMock.createStartContract();
|
||||
const chartsStartMock = chartPluginMock.createStartContract();
|
||||
|
||||
|
@ -150,6 +152,7 @@ describe('EsQueryAlertTypeExpression', () => {
|
|||
setRuleProperty={() => {}}
|
||||
errors={errors}
|
||||
data={dataMock}
|
||||
dataViews={dataViewMock}
|
||||
defaultActionGroupId=""
|
||||
actionGroups={[]}
|
||||
charts={chartsStartMock}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers';
|
||||
import React from 'react';
|
||||
import { dataPluginMock } from 'src/plugins/data/public/mocks';
|
||||
import { dataViewPluginMocks } from 'src/plugins/data_views/public/mocks';
|
||||
import { unifiedSearchPluginMock } from 'src/plugins/unified_search/public/mocks';
|
||||
import { DataPublicPluginStart, ISearchStart } from 'src/plugins/data/public';
|
||||
import { EsQueryAlertParams, SearchType } from '../types';
|
||||
|
@ -21,6 +22,8 @@ const dataMock = dataPluginMock.createStartContract() as DataPublicPluginStart &
|
|||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
search: ISearchStart & { searchSource: { create: jest.MockedFunction<any> } };
|
||||
};
|
||||
|
||||
const dataViewPluginMock = dataViewPluginMocks.createStartContract();
|
||||
const chartsStartMock = chartPluginMock.createStartContract();
|
||||
const unifiedSearchMock = unifiedSearchPluginMock.createStartContract();
|
||||
|
||||
|
@ -64,6 +67,7 @@ const setup = async (alertParams: EsQueryAlertParams<SearchType.searchSource>) =
|
|||
errors={errors}
|
||||
unifiedSearch={unifiedSearchMock}
|
||||
data={dataMock}
|
||||
dataViews={dataViewPluginMock}
|
||||
defaultActionGroupId=""
|
||||
actionGroups={[]}
|
||||
charts={chartsStartMock}
|
||||
|
|
|
@ -10,6 +10,7 @@ import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers';
|
|||
import { act } from 'react-dom/test-utils';
|
||||
import IndexThresholdAlertTypeExpression, { DEFAULT_VALUES } from './expression';
|
||||
import { dataPluginMock } from 'src/plugins/data/public/mocks';
|
||||
import { dataViewPluginMocks } from 'src/plugins/data_views/public/mocks';
|
||||
import { chartPluginMock } from 'src/plugins/charts/public/mocks';
|
||||
import { IndexThresholdAlertParams } from './types';
|
||||
import { validateExpression } from './validation';
|
||||
|
@ -68,6 +69,7 @@ jest.mock('../../../../triggers_actions_ui/public', () => {
|
|||
});
|
||||
|
||||
const dataMock = dataPluginMock.createStartContract();
|
||||
const dataViewMock = dataViewPluginMocks.createStartContract();
|
||||
const chartsStartMock = chartPluginMock.createStartContract();
|
||||
|
||||
describe('IndexThresholdAlertTypeExpression', () => {
|
||||
|
@ -95,6 +97,7 @@ describe('IndexThresholdAlertTypeExpression', () => {
|
|||
setRuleProperty={() => {}}
|
||||
errors={errors}
|
||||
data={dataMock}
|
||||
dataViews={dataViewMock}
|
||||
defaultActionGroupId=""
|
||||
actionGroups={[]}
|
||||
charts={chartsStartMock}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"server": true,
|
||||
"ui": true,
|
||||
"optionalPlugins": ["alerting", "cloud", "features", "home", "spaces"],
|
||||
"requiredPlugins": ["management", "charts", "data", "kibanaReact", "kibanaUtils", "savedObjects", "unifiedSearch"],
|
||||
"requiredPlugins": ["management", "charts", "data", "kibanaReact", "kibanaUtils", "savedObjects", "unifiedSearch", "dataViews"],
|
||||
"configPath": ["xpack", "trigger_actions_ui"],
|
||||
"extraPublicDirs": ["public/common", "public/common/constants"],
|
||||
"requiredBundles": ["home", "alerting", "esUiShared", "kibanaReact", "kibanaUtils"]
|
||||
|
|
|
@ -18,6 +18,7 @@ import { Section, routeToRuleDetails, legacyRouteToRuleDetails } from './constan
|
|||
import { ActionTypeRegistryContract, RuleTypeRegistryContract } from '../types';
|
||||
import { ChartsPluginStart } from '../../../../../src/plugins/charts/public';
|
||||
import { DataPublicPluginStart } from '../../../../../src/plugins/data/public';
|
||||
import { DataViewsPublicPluginStart } from '../../../../../src/plugins/data_views/public';
|
||||
import { UnifiedSearchPublicPluginStart } from '../../../../../src/plugins/unified_search/public';
|
||||
import { PluginStartContract as AlertingStart } from '../../../alerting/public';
|
||||
import type { SpacesPluginStart } from '../../../spaces/public';
|
||||
|
@ -36,6 +37,7 @@ const RuleDetailsRoute = lazy(
|
|||
|
||||
export interface TriggersAndActionsUiServices extends CoreStart {
|
||||
data: DataPublicPluginStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
charts: ChartsPluginStart;
|
||||
alerting?: AlertingStart;
|
||||
spaces?: SpacesPluginStart;
|
||||
|
|
|
@ -120,6 +120,7 @@ export const RuleForm = ({
|
|||
charts,
|
||||
data,
|
||||
unifiedSearch,
|
||||
dataViews,
|
||||
} = useKibana().services;
|
||||
const canShowActions = hasShowActionsCapability(capabilities);
|
||||
|
||||
|
@ -524,6 +525,7 @@ export const RuleForm = ({
|
|||
metadata={metadata}
|
||||
charts={charts}
|
||||
data={data}
|
||||
dataViews={dataViews}
|
||||
unifiedSearch={unifiedSearch}
|
||||
/>
|
||||
</Suspense>
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
import React from 'react';
|
||||
import { chartPluginMock } from '../../../../../../../src/plugins/charts/public/mocks';
|
||||
import { dataPluginMock } from '../../../../../../../src/plugins/data/public/mocks';
|
||||
import { dataViewPluginMocks } from '../../../../../../../src/plugins/data_views/public/mocks';
|
||||
import { unifiedSearchPluginMock } from '../../../../../../../src/plugins/unified_search/public/mocks';
|
||||
import {
|
||||
coreMock,
|
||||
|
@ -38,6 +39,7 @@ export const createStartServicesMock = (): TriggersAndActionsUiServices => {
|
|||
history: scopedHistoryMock.create(),
|
||||
setBreadcrumbs: jest.fn(),
|
||||
data: dataPluginMock.createStartContract(),
|
||||
dataViews: dataViewPluginMocks.createStartContract(),
|
||||
unifiedSearch: unifiedSearchPluginMock.createStartContract(),
|
||||
actionTypeRegistry: {
|
||||
has: jest.fn(),
|
||||
|
|
|
@ -25,6 +25,7 @@ import {
|
|||
import { ChartsPluginStart } from '../../../../src/plugins/charts/public';
|
||||
import { PluginStartContract as AlertingStart } from '../../alerting/public';
|
||||
import { DataPublicPluginStart } from '../../../../src/plugins/data/public';
|
||||
import { DataViewsPublicPluginStart } from '../../../../src/plugins/data_views/public';
|
||||
import { Storage } from '../../../../src/plugins/kibana_utils/public';
|
||||
import type { SpacesPluginStart } from '../../spaces/public';
|
||||
|
||||
|
@ -82,6 +83,7 @@ interface PluginsSetup {
|
|||
|
||||
interface PluginsStart {
|
||||
data: DataPublicPluginStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
charts: ChartsPluginStart;
|
||||
alerting?: AlertingStart;
|
||||
spaces?: SpacesPluginStart;
|
||||
|
@ -165,6 +167,7 @@ export class Plugin
|
|||
return renderApp({
|
||||
...coreStart,
|
||||
data: pluginsStart.data,
|
||||
dataViews: pluginsStart.dataViews,
|
||||
charts: pluginsStart.charts,
|
||||
alerting: pluginsStart.alerting,
|
||||
spaces: pluginsStart.spaces,
|
||||
|
|
|
@ -10,6 +10,7 @@ import type { DocLinksStart } from 'kibana/public';
|
|||
import type { ComponentType } from 'react';
|
||||
import type { ChartsPluginSetup } from 'src/plugins/charts/public';
|
||||
import type { DataPublicPluginStart } from 'src/plugins/data/public';
|
||||
import type { DataViewsPublicPluginStart } from 'src/plugins/data_views/public';
|
||||
import type { UnifiedSearchPublicPluginStart } from 'src/plugins/unified_search/public';
|
||||
import type { IconType } from '@elastic/eui';
|
||||
import { AlertConsumers } from '@kbn/rule-data-utils';
|
||||
|
@ -282,6 +283,7 @@ export interface RuleTypeParamsExpressionProps<
|
|||
metadata?: MetaData;
|
||||
charts: ChartsPluginSetup;
|
||||
data: DataPublicPluginStart;
|
||||
dataViews: DataViewsPublicPluginStart;
|
||||
unifiedSearch: UnifiedSearchPublicPluginStart;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue