[ML] Fix incorrect behaviors for Anomaly Detection jobs when resetting or converting to advanced job (#90078)

This commit is contained in:
Quynh Nguyen 2021-02-05 13:48:14 -06:00 committed by GitHub
parent 83e866d62d
commit eff9d4381f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 19 deletions

View file

@ -373,11 +373,14 @@ export function filterJobs(jobs, clauses) {
// start datafeed modal.
export function checkForAutoStartDatafeed() {
const job = mlJobService.tempJobCloningObjects.job;
const datafeed = mlJobService.tempJobCloningObjects.datafeed;
if (job !== undefined) {
mlJobService.tempJobCloningObjects.job = undefined;
const hasDatafeed =
typeof job.datafeed_config === 'object' && Object.keys(job.datafeed_config).length > 0;
const datafeedId = hasDatafeed ? job.datafeed_config.datafeed_id : '';
mlJobService.tempJobCloningObjects.datafeed = undefined;
mlJobService.tempJobCloningObjects.createdBy = undefined;
const hasDatafeed = typeof datafeed === 'object' && Object.keys(datafeed).length > 0;
const datafeedId = hasDatafeed ? datafeed.datafeed_id : '';
return {
id: job.job_id,
hasDatafeed,

View file

@ -229,17 +229,14 @@ export function isSparseDataJob(job: Job, datafeed: Datafeed): boolean {
return false;
}
function stashCombinedJob(
function stashJobForCloning(
jobCreator: JobCreatorType,
skipTimeRangeStep: boolean = false,
includeTimeRange: boolean = false
) {
const combinedJob = {
...jobCreator.jobConfig,
datafeed_config: jobCreator.datafeedConfig,
};
mlJobService.tempJobCloningObjects.job = combinedJob;
mlJobService.tempJobCloningObjects.job = jobCreator.jobConfig;
mlJobService.tempJobCloningObjects.datafeed = jobCreator.datafeedConfig;
mlJobService.tempJobCloningObjects.createdBy = jobCreator.createdBy ?? undefined;
// skip over the time picker step of the wizard
mlJobService.tempJobCloningObjects.skipTimeRangeStep = skipTimeRangeStep;
@ -259,21 +256,21 @@ export function convertToMultiMetricJob(
) {
jobCreator.createdBy = CREATED_BY_LABEL.MULTI_METRIC;
jobCreator.modelPlot = false;
stashCombinedJob(jobCreator, true, true);
stashJobForCloning(jobCreator, true, true);
navigateToPath(`jobs/new_job/${JOB_TYPE.MULTI_METRIC}`, true);
}
export function convertToAdvancedJob(jobCreator: JobCreatorType, navigateToPath: NavigateToPath) {
jobCreator.createdBy = null;
stashCombinedJob(jobCreator, true, true);
stashJobForCloning(jobCreator, true, true);
navigateToPath(`jobs/new_job/${JOB_TYPE.ADVANCED}`, true);
}
export function resetJob(jobCreator: JobCreatorType, navigateToPath: NavigateToPath) {
jobCreator.jobId = '';
stashCombinedJob(jobCreator, true, true);
stashJobForCloning(jobCreator, true, true);
navigateToPath('/jobs/new_job');
}
@ -282,7 +279,7 @@ export function advancedStartDatafeed(
navigateToPath: NavigateToPath
) {
if (jobCreator !== null) {
stashCombinedJob(jobCreator, false, false);
stashJobForCloning(jobCreator, false, false);
}
navigateToPath('/jobs');
}

View file

@ -72,7 +72,10 @@ export const Page: FC<PageProps> = ({ existingJobsAndGroups, jobType }) => {
let autoSetTimeRange = false;
if (mlJobService.tempJobCloningObjects.job !== undefined) {
if (
mlJobService.tempJobCloningObjects.job !== undefined &&
mlJobService.tempJobCloningObjects.datafeed !== undefined
) {
// cloning a job
const clonedJob = mlJobService.tempJobCloningObjects.job;
const clonedDatafeed = mlJobService.cloneDatafeed(mlJobService.tempJobCloningObjects.datafeed);
@ -89,6 +92,8 @@ export const Page: FC<PageProps> = ({ existingJobsAndGroups, jobType }) => {
mlJobService.tempJobCloningObjects.skipTimeRangeStep = false;
mlJobService.tempJobCloningObjects.job = undefined;
mlJobService.tempJobCloningObjects.datafeed = undefined;
mlJobService.tempJobCloningObjects.createdBy = undefined;
if (
mlJobService.tempJobCloningObjects.start !== undefined &&

View file

@ -7,7 +7,7 @@
import { SearchResponse } from 'elasticsearch';
import { TimeRange } from 'src/plugins/data/common/query/timefilter/types';
import { CombinedJob, Datafeed } from '../../../common/types/anomaly_detection_jobs';
import { CombinedJob, Datafeed, Job } from '../../../common/types/anomaly_detection_jobs';
import { Calendar } from '../../../common/types/calendars';
export interface ExistingJobsAndGroups {
@ -21,15 +21,15 @@ declare interface JobService {
tempJobCloningObjects: {
createdBy?: string;
datafeed?: Datafeed;
job: any;
job?: Job;
skipTimeRangeStep: boolean;
start?: number;
end?: number;
calendars: Calendar[] | undefined;
};
skipTimeRangeStep: boolean;
saveNewJob(job: any): Promise<any>;
cloneDatafeed(datafeed: any): Datafeed;
saveNewJob(job: Job): Promise<any>;
cloneDatafeed(Datafeed: Datafeed): Datafeed;
openJob(jobId: string): Promise<any>;
saveNewDatafeed(datafeedConfig: any, jobId: string): Promise<any>;
startDatafeed(