mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
[ML] Fix links to dashboards in Lens created anomaly detection jobs (#160156)
When creating a job from a Lens visualisation, a link back to the original dashboard is added to the job's custom URLs. This has recently become broken due to the dashboard ID retrieved from the lens embeddable not matching the real dashboard ID. Rather than rely on this ID, the actual dashboard is retrieved from kibana using the dashboard service and the ID acquired from there. The dashboard service also contains the dashboard url locator which we can use rather than use the `share` plugin.
This commit is contained in:
parent
40f49337bd
commit
cf92a67fa9
18 changed files with 97 additions and 66 deletions
|
@ -9,21 +9,20 @@ import { i18n } from '@kbn/i18n';
|
|||
import { mergeWith, uniqWith, isEqual } from 'lodash';
|
||||
import type { IUiSettingsClient } from '@kbn/core/public';
|
||||
import type { TimefilterContract } from '@kbn/data-plugin/public';
|
||||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import type { DashboardAppLocatorParams } from '@kbn/dashboard-plugin/public';
|
||||
import type { DashboardAppLocatorParams, DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
import type { Filter, Query, DataViewBase } from '@kbn/es-query';
|
||||
import { FilterStateStore } from '@kbn/es-query';
|
||||
import type { Embeddable } from '@kbn/lens-plugin/public';
|
||||
import type { MapEmbeddable } from '@kbn/maps-plugin/public';
|
||||
import type { ErrorType } from '@kbn/ml-error-utils';
|
||||
import type { MlApiServices } from '../../../services/ml_api_service';
|
||||
import type { Job, Datafeed } from '../../../../../common/types/anomaly_detection_jobs';
|
||||
import { getFiltersForDSLQuery } from '../../../../../common/util/job_utils';
|
||||
import { CREATED_BY_LABEL } from '../../../../../common/constants/new_job';
|
||||
import { createQueries } from '../utils/new_job_utils';
|
||||
import { createDatafeedId } from '../../../../../common/util/job_utils';
|
||||
import { Job, Datafeed } from '../../../../../common/types/anomaly_detection_jobs';
|
||||
|
||||
export function isLensEmbeddable(arg: any): arg is Embeddable {
|
||||
return arg.hasOwnProperty('type') && arg.type === 'lens';
|
||||
|
@ -61,7 +60,7 @@ export class QuickJobCreatorBase {
|
|||
constructor(
|
||||
protected readonly kibanaConfig: IUiSettingsClient,
|
||||
protected readonly timeFilter: TimefilterContract,
|
||||
protected readonly share: SharePluginStart,
|
||||
protected readonly dashboardService: DashboardStart,
|
||||
protected readonly mlApiServices: MlApiServices
|
||||
) {}
|
||||
|
||||
|
@ -232,13 +231,22 @@ export class QuickJobCreatorBase {
|
|||
}
|
||||
|
||||
protected async createDashboardLink(dashboard: Dashboard, datafeedConfig: estypes.MlDatafeed) {
|
||||
if (dashboard === undefined) {
|
||||
const dashboardTitle = dashboard?.getTitle();
|
||||
if (dashboardTitle === undefined || dashboardTitle === '') {
|
||||
// embeddable may have not been in a dashboard
|
||||
// and my not have been given a title as it is unsaved.
|
||||
return null;
|
||||
}
|
||||
|
||||
const findDashboardsService = await this.dashboardService.findDashboardsService();
|
||||
// find the dashboard from the dashboard service as the dashboard passed in may not have the correct id
|
||||
const foundDashboard = await findDashboardsService.findByTitle(dashboardTitle);
|
||||
if (foundDashboard === undefined) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const params: DashboardAppLocatorParams = {
|
||||
dashboardId: dashboard.id,
|
||||
dashboardId: foundDashboard.id,
|
||||
timeRange: {
|
||||
from: '$earliest$',
|
||||
to: '$latest$',
|
||||
|
@ -251,28 +259,23 @@ export class QuickJobCreatorBase {
|
|||
FilterStateStore.GLOBAL_STATE
|
||||
),
|
||||
};
|
||||
const dashboardLocator = this.share.url.locators.get('DASHBOARD_APP_LOCATOR');
|
||||
const encodedUrl = dashboardLocator ? await dashboardLocator.getUrl(params) : '';
|
||||
const url = decodeURIComponent(encodedUrl).replace(/^.+dashboards/, 'dashboards');
|
||||
|
||||
const dashboardName = dashboard.getOutput().title;
|
||||
const location = await this.dashboardService.locator?.getLocation(params);
|
||||
if (location === undefined) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const urlName =
|
||||
dashboardName === undefined
|
||||
? i18n.translate('xpack.ml.newJob.fromLens.createJob.defaultUrlDashboard', {
|
||||
defaultMessage: 'Original dashboard',
|
||||
})
|
||||
: i18n.translate('xpack.ml.newJob.fromLens.createJob.namedUrlDashboard', {
|
||||
defaultMessage: 'Open {dashboardName}',
|
||||
values: { dashboardName },
|
||||
});
|
||||
const url = `${location.app}${location.path}`;
|
||||
const urlName = i18n.translate('xpack.ml.newJob.fromLens.createJob.namedUrlDashboard', {
|
||||
defaultMessage: 'Open {dashboardTitle}',
|
||||
values: { dashboardTitle },
|
||||
});
|
||||
|
||||
return { url_name: urlName, url_value: url, time_range: 'auto' };
|
||||
}
|
||||
|
||||
protected async getCustomUrls(dashboard: Dashboard, datafeedConfig: estypes.MlDatafeed) {
|
||||
return dashboard !== undefined
|
||||
? { custom_urls: [await this.createDashboardLink(dashboard, datafeedConfig)] }
|
||||
: {};
|
||||
const customUrls = await this.createDashboardLink(dashboard, datafeedConfig);
|
||||
return dashboard !== undefined && customUrls !== null ? { custom_urls: [customUrls] } : {};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,8 @@ import type {
|
|||
} from '@kbn/lens-plugin/public';
|
||||
import type { IUiSettingsClient } from '@kbn/core/public';
|
||||
import type { TimefilterContract } from '@kbn/data-plugin/public';
|
||||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import type { Filter, Query } from '@kbn/es-query';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
|
||||
import type { JobCreatorType } from '../common/job_creator';
|
||||
import { createEmptyJob, createEmptyDatafeed } from '../common/job_creator/util/default_configs';
|
||||
|
@ -33,17 +33,17 @@ import {
|
|||
getChartInfoFromVisualization,
|
||||
} from './utils';
|
||||
import { VisualizationExtractor } from './visualization_extractor';
|
||||
import { QuickJobCreatorBase, CreateState } from '../job_from_dashboard';
|
||||
import { QuickJobCreatorBase, type CreateState } from '../job_from_dashboard';
|
||||
|
||||
export class QuickLensJobCreator extends QuickJobCreatorBase {
|
||||
constructor(
|
||||
private readonly lens: LensPublicStart,
|
||||
public readonly kibanaConfig: IUiSettingsClient,
|
||||
public readonly timeFilter: TimefilterContract,
|
||||
public readonly share: SharePluginStart,
|
||||
public readonly mlApiServices: MlApiServices
|
||||
kibanaConfig: IUiSettingsClient,
|
||||
timeFilter: TimefilterContract,
|
||||
dashboardService: DashboardStart,
|
||||
mlApiServices: MlApiServices
|
||||
) {
|
||||
super(kibanaConfig, timeFilter, share, mlApiServices);
|
||||
super(kibanaConfig, timeFilter, dashboardService, mlApiServices);
|
||||
}
|
||||
|
||||
public async createAndSaveJob(
|
||||
|
|
|
@ -11,7 +11,7 @@ import type { Filter } from '@kbn/es-query';
|
|||
import type { LensPublicStart, LensSavedObjectAttributes } from '@kbn/lens-plugin/public';
|
||||
import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser';
|
||||
import type { TimefilterContract } from '@kbn/data-plugin/public';
|
||||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
import { QuickLensJobCreator } from './quick_create_job';
|
||||
import type { MlApiServices } from '../../../services/ml_api_service';
|
||||
|
||||
|
@ -21,7 +21,7 @@ interface Dependencies {
|
|||
lens: LensPublicStart;
|
||||
kibanaConfig: IUiSettingsClient;
|
||||
timeFilter: TimefilterContract;
|
||||
share: SharePluginStart;
|
||||
dashboardService: DashboardStart;
|
||||
mlApiServices: MlApiServices;
|
||||
}
|
||||
export async function resolver(
|
||||
|
@ -33,7 +33,7 @@ export async function resolver(
|
|||
filtersRisonString: string,
|
||||
layerIndexRisonString: string
|
||||
) {
|
||||
const { lens, mlApiServices, timeFilter, kibanaConfig, share } = deps;
|
||||
const { lens, mlApiServices, timeFilter, kibanaConfig, dashboardService } = deps;
|
||||
if (lensSavedObjectRisonString === undefined) {
|
||||
throw new Error('Cannot create visualization');
|
||||
}
|
||||
|
@ -75,6 +75,12 @@ export async function resolver(
|
|||
layerIndex = undefined;
|
||||
}
|
||||
|
||||
const jobCreator = new QuickLensJobCreator(lens, kibanaConfig, timeFilter, share, mlApiServices);
|
||||
const jobCreator = new QuickLensJobCreator(
|
||||
lens,
|
||||
kibanaConfig,
|
||||
timeFilter,
|
||||
dashboardService,
|
||||
mlApiServices
|
||||
);
|
||||
await jobCreator.createAndStashADJob(vis, from, to, query, filters, layerIndex);
|
||||
}
|
||||
|
|
|
@ -9,9 +9,9 @@ import { i18n } from '@kbn/i18n';
|
|||
import type { MapEmbeddable } from '@kbn/maps-plugin/public';
|
||||
import type { IUiSettingsClient } from '@kbn/core/public';
|
||||
import type { TimefilterContract } from '@kbn/data-plugin/public';
|
||||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import type { Filter, Query } from '@kbn/es-query';
|
||||
import type { DataView } from '@kbn/data-views-plugin/public';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
|
||||
import type { MlApiServices } from '../../../services/ml_api_service';
|
||||
import { getDataViews } from '../../../util/dependency_cache';
|
||||
|
@ -40,12 +40,12 @@ interface VisDescriptor {
|
|||
|
||||
export class QuickGeoJobCreator extends QuickJobCreatorBase {
|
||||
constructor(
|
||||
public readonly kibanaConfig: IUiSettingsClient,
|
||||
public readonly timeFilter: TimefilterContract,
|
||||
public readonly share: SharePluginStart,
|
||||
public readonly mlApiServices: MlApiServices
|
||||
kibanaConfig: IUiSettingsClient,
|
||||
timeFilter: TimefilterContract,
|
||||
dashboardService: DashboardStart,
|
||||
mlApiServices: MlApiServices
|
||||
) {
|
||||
super(kibanaConfig, timeFilter, share, mlApiServices);
|
||||
super(kibanaConfig, timeFilter, dashboardService, mlApiServices);
|
||||
}
|
||||
|
||||
public async createAndSaveGeoJob({
|
||||
|
|
|
@ -10,7 +10,7 @@ import type { Query } from '@kbn/es-query';
|
|||
import type { Filter } from '@kbn/es-query';
|
||||
import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser';
|
||||
import type { TimefilterContract } from '@kbn/data-plugin/public';
|
||||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
import type { MlApiServices } from '../../../services/ml_api_service';
|
||||
import { QuickGeoJobCreator } from './quick_create_job';
|
||||
|
||||
|
@ -19,7 +19,7 @@ import { getDefaultQuery } from '../utils/new_job_utils';
|
|||
interface Dependencies {
|
||||
kibanaConfig: IUiSettingsClient;
|
||||
timeFilter: TimefilterContract;
|
||||
share: SharePluginStart;
|
||||
dashboardService: DashboardStart;
|
||||
mlApiServices: MlApiServices;
|
||||
}
|
||||
export async function resolver(
|
||||
|
@ -33,7 +33,7 @@ export async function resolver(
|
|||
toRisonString: string,
|
||||
layer?: string
|
||||
) {
|
||||
const { kibanaConfig, timeFilter, share, mlApiServices } = deps;
|
||||
const { kibanaConfig, timeFilter, dashboardService, mlApiServices } = deps;
|
||||
let decodedDashboard;
|
||||
let decodedEmbeddable;
|
||||
let decodedLayer;
|
||||
|
@ -85,7 +85,12 @@ export async function resolver(
|
|||
to = '';
|
||||
}
|
||||
|
||||
const jobCreator = new QuickGeoJobCreator(kibanaConfig, timeFilter, share, mlApiServices);
|
||||
const jobCreator = new QuickGeoJobCreator(
|
||||
kibanaConfig,
|
||||
timeFilter,
|
||||
dashboardService,
|
||||
mlApiServices
|
||||
);
|
||||
|
||||
await jobCreator.createAndStashGeoJob(
|
||||
dvId,
|
||||
|
|
|
@ -34,7 +34,7 @@ const PageWrapper: FC<PageProps> = ({ location }) => {
|
|||
timefilter: { timefilter: timeFilter },
|
||||
},
|
||||
},
|
||||
share,
|
||||
dashboard: dashboardService,
|
||||
uiSettings: kibanaConfig,
|
||||
mlServices: { mlApiServices },
|
||||
lens,
|
||||
|
@ -44,7 +44,7 @@ const PageWrapper: FC<PageProps> = ({ location }) => {
|
|||
const { context } = useRouteResolver('full', ['canCreateJob'], {
|
||||
redirect: () =>
|
||||
resolver(
|
||||
{ lens, mlApiServices, timeFilter, kibanaConfig, share },
|
||||
{ lens, mlApiServices, timeFilter, kibanaConfig, dashboardService },
|
||||
vis,
|
||||
from,
|
||||
to,
|
||||
|
|
|
@ -41,7 +41,7 @@ const PageWrapper: FC<PageProps> = ({ location }) => {
|
|||
timefilter: { timefilter: timeFilter },
|
||||
},
|
||||
},
|
||||
share,
|
||||
dashboard: dashboardService,
|
||||
uiSettings: kibanaConfig,
|
||||
mlServices: { mlApiServices },
|
||||
},
|
||||
|
@ -50,7 +50,7 @@ const PageWrapper: FC<PageProps> = ({ location }) => {
|
|||
const { context } = useRouteResolver('full', ['canCreateJob'], {
|
||||
redirect: () =>
|
||||
resolver(
|
||||
{ mlApiServices, timeFilter, kibanaConfig, share },
|
||||
{ mlApiServices, timeFilter, kibanaConfig, dashboardService },
|
||||
dashboard,
|
||||
dataViewId,
|
||||
embeddable,
|
||||
|
|
|
@ -19,6 +19,7 @@ import type { CoreStart } from '@kbn/core/public';
|
|||
import type { LensPublicStart } from '@kbn/lens-plugin/public';
|
||||
import type { MapEmbeddable } from '@kbn/maps-plugin/public';
|
||||
import type { Embeddable } from '@kbn/lens-plugin/public';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
|
||||
import { getMlGlobalServices } from '../../../application/app';
|
||||
|
||||
|
@ -28,6 +29,7 @@ export function createFlyout(
|
|||
coreStart: CoreStart,
|
||||
share: SharePluginStart,
|
||||
data: DataPublicPluginStart,
|
||||
dashboardService: DashboardStart,
|
||||
lens?: LensPublicStart
|
||||
): Promise<void> {
|
||||
const {
|
||||
|
@ -53,6 +55,7 @@ export function createFlyout(
|
|||
share,
|
||||
data,
|
||||
lens,
|
||||
dashboardService,
|
||||
mlServices: getMlGlobalServices(http),
|
||||
}}
|
||||
>
|
||||
|
|
|
@ -12,12 +12,14 @@ import { useKibana } from '@kbn/kibana-react-plugin/public';
|
|||
|
||||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import type { LensPublicStart } from '@kbn/lens-plugin/public';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
import type { MlServicesContext } from '../../../application/app';
|
||||
|
||||
interface StartPlugins {
|
||||
data: DataPublicPluginStart;
|
||||
share: SharePluginStart;
|
||||
lens: LensPublicStart;
|
||||
dashboardService: DashboardStart;
|
||||
}
|
||||
export type StartServices = CoreStart & StartPlugins & MlServicesContext;
|
||||
export const useMlFromLensKibanaContext = () => useKibana<StartServices>();
|
||||
|
|
|
@ -34,6 +34,7 @@ export const CompatibleLayer: FC<Props> = ({ layer, layerIndex, embeddable }) =>
|
|||
uiSettings,
|
||||
mlServices: { mlApiServices },
|
||||
lens,
|
||||
dashboardService,
|
||||
},
|
||||
} = useMlFromLensKibanaContext();
|
||||
|
||||
|
@ -43,7 +44,7 @@ export const CompatibleLayer: FC<Props> = ({ layer, layerIndex, embeddable }) =>
|
|||
lens,
|
||||
uiSettings,
|
||||
data.query.timefilter.timefilter,
|
||||
share,
|
||||
dashboardService,
|
||||
mlApiServices
|
||||
),
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
|
|
|
@ -10,6 +10,7 @@ import type { CoreStart } from '@kbn/core/public';
|
|||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
|
||||
import type { LensPublicStart } from '@kbn/lens-plugin/public';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
import { createFlyout } from '../common/create_flyout';
|
||||
import { LensLayerSelectionFlyout } from './lens_vis_layer_selection_flyout';
|
||||
|
||||
|
@ -18,7 +19,16 @@ export async function showLensVisToADJobFlyout(
|
|||
coreStart: CoreStart,
|
||||
share: SharePluginStart,
|
||||
data: DataPublicPluginStart,
|
||||
lens: LensPublicStart
|
||||
lens: LensPublicStart,
|
||||
dashboardService: DashboardStart
|
||||
): Promise<void> {
|
||||
return createFlyout(LensLayerSelectionFlyout, embeddable, coreStart, share, data, lens);
|
||||
return createFlyout(
|
||||
LensLayerSelectionFlyout,
|
||||
embeddable,
|
||||
coreStart,
|
||||
share,
|
||||
data,
|
||||
dashboardService,
|
||||
lens
|
||||
);
|
||||
}
|
||||
|
|
|
@ -48,13 +48,19 @@ export const CompatibleLayer: FC<Props> = ({ embeddable, layer, layerIndex }) =>
|
|||
data,
|
||||
share,
|
||||
uiSettings,
|
||||
dashboardService,
|
||||
mlServices: { mlApiServices },
|
||||
},
|
||||
} = useMlFromLensKibanaContext();
|
||||
|
||||
const quickJobCreator = useMemo(
|
||||
() =>
|
||||
new QuickGeoJobCreator(uiSettings, data.query.timefilter.timefilter, share, mlApiServices),
|
||||
new QuickGeoJobCreator(
|
||||
uiSettings,
|
||||
data.query.timefilter.timefilter,
|
||||
dashboardService,
|
||||
mlApiServices
|
||||
),
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
[data, uiSettings]
|
||||
);
|
||||
|
|
|
@ -19,6 +19,7 @@ import {
|
|||
import type { LayerResult } from '../../../../../application/jobs/new_job/job_from_map';
|
||||
import { CompatibleLayer } from './compatible_layer';
|
||||
import { IncompatibleLayer } from './incompatible_layer';
|
||||
|
||||
interface Props {
|
||||
layer: LayerResult;
|
||||
layerIndex: number;
|
||||
|
|
|
@ -9,6 +9,7 @@ import type { CoreStart } from '@kbn/core/public';
|
|||
import type { SharePluginStart } from '@kbn/share-plugin/public';
|
||||
import type { DataPublicPluginStart } from '@kbn/data-plugin/public';
|
||||
import type { MapEmbeddable } from '@kbn/maps-plugin/public';
|
||||
import type { DashboardStart } from '@kbn/dashboard-plugin/public';
|
||||
|
||||
import { GeoJobFlyout } from './flyout';
|
||||
import { createFlyout } from '../common/create_flyout';
|
||||
|
@ -17,7 +18,8 @@ export async function showMapVisToADJobFlyout(
|
|||
embeddable: MapEmbeddable,
|
||||
coreStart: CoreStart,
|
||||
share: SharePluginStart,
|
||||
data: DataPublicPluginStart
|
||||
data: DataPublicPluginStart,
|
||||
dashboardService: DashboardStart
|
||||
): Promise<void> {
|
||||
return createFlyout(GeoJobFlyout, embeddable, coreStart, share, data);
|
||||
return createFlyout(GeoJobFlyout, embeddable, coreStart, share, data, dashboardService);
|
||||
}
|
||||
|
|
|
@ -34,18 +34,16 @@ export function createVisToADJobAction(
|
|||
|
||||
try {
|
||||
if (isLensEmbeddable(embeddable)) {
|
||||
const [{ showLensVisToADJobFlyout }, [coreStart, { share, data, lens }]] =
|
||||
const [{ showLensVisToADJobFlyout }, [coreStart, { share, data, lens, dashboard }]] =
|
||||
await Promise.all([import('../embeddables/job_creation/lens'), getStartServices()]);
|
||||
if (lens === undefined) {
|
||||
return;
|
||||
}
|
||||
await showLensVisToADJobFlyout(embeddable, coreStart, share, data, lens);
|
||||
await showLensVisToADJobFlyout(embeddable, coreStart, share, data, lens, dashboard);
|
||||
} else if (isMapEmbeddable(embeddable)) {
|
||||
const [{ showMapVisToADJobFlyout }, [coreStart, { share, data }]] = await Promise.all([
|
||||
import('../embeddables/job_creation/map'),
|
||||
getStartServices(),
|
||||
]);
|
||||
await showMapVisToADJobFlyout(embeddable, coreStart, share, data);
|
||||
const [{ showMapVisToADJobFlyout }, [coreStart, { share, data, dashboard }]] =
|
||||
await Promise.all([import('../embeddables/job_creation/map'), getStartServices()]);
|
||||
await showMapVisToADJobFlyout(embeddable, coreStart, share, data, dashboard);
|
||||
}
|
||||
} catch (e) {
|
||||
return Promise.reject();
|
||||
|
|
|
@ -22454,7 +22454,6 @@
|
|||
"xpack.ml.models.jobValidation.validateJobObject.jobIsNotObjectErrorMessage": "{invalidParamName} non valide : Doit être un objet.",
|
||||
"xpack.ml.models.jobValidation.validateJobObject.timeFieldIsNotStringErrorMessage": "{invalidParamName} non valide : Doit être une chaîne.",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.incorrectFunction": "La fonction sélectionnée {operationType} n'est pas prise en charge par les détecteurs de détection des anomalies",
|
||||
"xpack.ml.newJob.fromLens.createJob.namedUrlDashboard": "Ouvrir {dashboardName}",
|
||||
"xpack.ml.newJob.geoWizard.fieldValuesFetchErrorTitle": "Erreur de récupération des exemples de valeurs de champs : {error}",
|
||||
"xpack.ml.newJob.page.createJob.dataViewName": "À l'aide de la vue de données {dataViewName}",
|
||||
"xpack.ml.newJob.recognize.createJobButtonLabel": "Créer {numberOfJobs, plural, one {tâche} many {tâches} other {tâches}}",
|
||||
|
@ -24104,7 +24103,6 @@
|
|||
"xpack.ml.navMenu.trainedModelsTabBetaTooltipContent": "Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou retirée complètement dans une future version. Elastic s'efforcera au maximum de corriger tout problème, mais les fonctionnalités en version d'évaluation technique ne sont pas soumises aux accords de niveau de service d'assistance des fonctionnalités officielles en disponibilité générale.",
|
||||
"xpack.ml.navMenu.trainedModelsText": "Modèles entraînés",
|
||||
"xpack.ml.newJob.fromGeo.createJob.error.noTimeRange": "Plage temporelle non spécifiée.",
|
||||
"xpack.ml.newJob.fromLens.createJob.defaultUrlDashboard": "Tableau de bord original",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.colsNoSourceField": "Certaines colonnes ne contiennent pas de champ source.",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.colsUsingFilterTimeSift": "Les colonnes contenant des paramètres incompatibles avec les détecteurs de ML, le décalage temporel et la fonction Filtrer par ne sont pas prises en charge.",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.incompatibleLayerType": "Le calque n'est pas compatible. Seuls les calques de graphique peuvent être utilisés.",
|
||||
|
|
|
@ -22445,7 +22445,6 @@
|
|||
"xpack.ml.models.jobValidation.validateJobObject.jobIsNotObjectErrorMessage": "無効な{invalidParamName}:オブジェクトでなければなりません。",
|
||||
"xpack.ml.models.jobValidation.validateJobObject.timeFieldIsNotStringErrorMessage": "無効な{invalidParamName}:文字列でなければなりません。",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.incorrectFunction": "選択した機能{operationType}は異常検知検出器ではサポートされていません",
|
||||
"xpack.ml.newJob.fromLens.createJob.namedUrlDashboard": "{dashboardName}を開く",
|
||||
"xpack.ml.newJob.geoWizard.fieldValuesFetchErrorTitle": "フィールド例の値の取得エラー:{error}",
|
||||
"xpack.ml.newJob.page.createJob.dataViewName": "データビュー{dataViewName}の使用中",
|
||||
"xpack.ml.newJob.recognize.createJobButtonLabel": "{numberOfJobs, plural, other {ジョブ}}作成",
|
||||
|
@ -24090,7 +24089,6 @@
|
|||
"xpack.ml.navMenu.trainedModelsTabBetaTooltipContent": "この機能はテクニカルプレビュー中であり、将来のリリースでは変更されたり完全に削除されたりする場合があります。Elasticは最善の努力を講じてすべての問題の修正に努めますが、テクニカルプレビュー中の機能には正式なGA機能のサポートSLAが適用されません。",
|
||||
"xpack.ml.navMenu.trainedModelsText": "学習済みモデル",
|
||||
"xpack.ml.newJob.fromGeo.createJob.error.noTimeRange": "時間範囲が指定されていません。",
|
||||
"xpack.ml.newJob.fromLens.createJob.defaultUrlDashboard": "元のダッシュボード",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.colsNoSourceField": "一部の列にはソースフィールドがありません。",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.colsUsingFilterTimeSift": "ML検知器に対応していない設定が列に含まれています。時間シフトとフィルター条件はサポートされていません。",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.incompatibleLayerType": "レイヤーに互換性がありません。グラフレイヤーのみを使用できます。",
|
||||
|
|
|
@ -22444,7 +22444,6 @@
|
|||
"xpack.ml.models.jobValidation.validateJobObject.jobIsNotObjectErrorMessage": "无效的 {invalidParamName}:需要是对象。",
|
||||
"xpack.ml.models.jobValidation.validateJobObject.timeFieldIsNotStringErrorMessage": "无效的 {invalidParamName}:需要是字符串。",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.incorrectFunction": "异常检测检测工具不支持选定函数 {operationType}",
|
||||
"xpack.ml.newJob.fromLens.createJob.namedUrlDashboard": "打开 {dashboardName}",
|
||||
"xpack.ml.newJob.geoWizard.fieldValuesFetchErrorTitle": "提取字段示例值时出错:{error}",
|
||||
"xpack.ml.newJob.page.createJob.dataViewName": "正在使用数据视图 {dataViewName}",
|
||||
"xpack.ml.newJob.recognize.createJobButtonLabel": "创建 {numberOfJobs, plural, other {作业}}",
|
||||
|
@ -24089,7 +24088,6 @@
|
|||
"xpack.ml.navMenu.trainedModelsTabBetaTooltipContent": "此功能处于技术预览状态,在未来版本中可能会更改或完全移除。Elastic 将尽最大努力来修复任何问题,但处于技术预览状态的功能不受正式 GA 功能支持 SLA 的约束。",
|
||||
"xpack.ml.navMenu.trainedModelsText": "已训练模型",
|
||||
"xpack.ml.newJob.fromGeo.createJob.error.noTimeRange": "未指定时间范围。",
|
||||
"xpack.ml.newJob.fromLens.createJob.defaultUrlDashboard": "原始仪表板",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.colsNoSourceField": "某些列不包含源字段。",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.colsUsingFilterTimeSift": "列包含与 ML 检测工具不兼容的设置,不支持时间偏移和筛选依据。",
|
||||
"xpack.ml.newJob.fromLens.createJob.error.incompatibleLayerType": "图层不兼容。只可以使用图表图层。",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue