Skip to content

Commit 93670ec

Browse files
[ML] Data frame analytics: Adds job deletion and creation to map view (#84299)
* wip: delete job node and update map * adds ability to delete job and update map * create job from index node * can clone job from map * reset map button * remove trained model node when deleting job * remove related model node. remove map tab when root node deleted * ensure model with no job shows up correctly * update types and naming * use urlGenerator * fix inner scrollbar * Adjust cytoscapeOptions after EUI update Co-authored-by: Robert Oskamp <robert.oskamp@elastic.co>
1 parent 33c552f commit 93670ec

File tree

30 files changed

+705
-341
lines changed

30 files changed

+705
-341
lines changed

x-pack/plugins/ml/common/constants/data_frame_analytics.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ export const ANALYSIS_CONFIG_TYPE = {
1010
CLASSIFICATION: 'classification',
1111
} as const;
1212

13+
export const DATA_FRAME_TASK_STATE = {
14+
ANALYZING: 'analyzing',
15+
FAILED: 'failed',
16+
REINDEXING: 'reindexing',
17+
STARTED: 'started',
18+
STARTING: 'starting',
19+
STOPPED: 'stopped',
20+
} as const;
21+
1322
export const DEFAULT_RESULTS_FIELD = 'ml';
1423

1524
export const JOB_MAP_NODE_TYPES = {

x-pack/plugins/ml/common/constants/ml_url_generator.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const ML_PAGES = {
1111
ANOMALY_EXPLORER: 'explorer',
1212
SINGLE_METRIC_VIEWER: 'timeseriesexplorer',
1313
DATA_FRAME_ANALYTICS_JOBS_MANAGE: 'data_frame_analytics',
14+
DATA_FRAME_ANALYTICS_CREATE_JOB: 'data_frame_analytics/new_job',
1415
DATA_FRAME_ANALYTICS_MODELS_MANAGE: 'data_frame_analytics/models',
1516
DATA_FRAME_ANALYTICS_EXPLORATION: 'data_frame_analytics/exploration',
1617
DATA_FRAME_ANALYTICS_MAP: 'data_frame_analytics/map',

x-pack/plugins/ml/common/types/data_frame_analytics.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import Boom from '@hapi/boom';
88
import { EsErrorBody } from '../util/errors';
99
import { ANALYSIS_CONFIG_TYPE } from '../constants/data_frame_analytics';
10+
import { DATA_FRAME_TASK_STATE } from '../constants/data_frame_analytics';
1011

1112
export interface DeleteDataFrameAnalyticsWithIndexStatus {
1213
success: boolean;
@@ -85,3 +86,54 @@ export interface DataFrameAnalyticsConfig {
8586
}
8687

8788
export type DataFrameAnalysisConfigType = typeof ANALYSIS_CONFIG_TYPE[keyof typeof ANALYSIS_CONFIG_TYPE];
89+
90+
export type DataFrameTaskStateType = typeof DATA_FRAME_TASK_STATE[keyof typeof DATA_FRAME_TASK_STATE];
91+
92+
interface ProgressSection {
93+
phase: string;
94+
progress_percent: number;
95+
}
96+
97+
export interface DataFrameAnalyticsStats {
98+
assignment_explanation?: string;
99+
id: DataFrameAnalyticsId;
100+
memory_usage?: {
101+
timestamp?: string;
102+
peak_usage_bytes: number;
103+
status: string;
104+
};
105+
node?: {
106+
attributes: Record<string, any>;
107+
ephemeral_id: string;
108+
id: string;
109+
name: string;
110+
transport_address: string;
111+
};
112+
progress: ProgressSection[];
113+
failure_reason?: string;
114+
state: DataFrameTaskStateType;
115+
}
116+
117+
export interface AnalyticsMapNodeElement {
118+
data: {
119+
id: string;
120+
label: string;
121+
type: string;
122+
analysisType?: string;
123+
};
124+
}
125+
126+
export interface AnalyticsMapEdgeElement {
127+
data: {
128+
id: string;
129+
source: string;
130+
target: string;
131+
};
132+
}
133+
134+
export type MapElements = AnalyticsMapNodeElement | AnalyticsMapEdgeElement;
135+
export interface AnalyticsMapReturnType {
136+
elements: MapElements[];
137+
details: Record<string, any>; // transform, job, or index details
138+
error: null | any;
139+
}

x-pack/plugins/ml/common/types/ml_url_generator.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export type MlGenericUrlState = MLPageState<
4343
| typeof ML_PAGES.ANOMALY_DETECTION_CREATE_JOB
4444
| typeof ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_SELECT_TYPE
4545
| typeof ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_SELECT_INDEX
46+
| typeof ML_PAGES.DATA_FRAME_ANALYTICS_CREATE_JOB
4647
| typeof ML_PAGES.OVERVIEW
4748
| typeof ML_PAGES.CALENDARS_MANAGE
4849
| typeof ML_PAGES.CALENDARS_NEW
@@ -158,14 +159,17 @@ export type TimeSeriesExplorerUrlState = MLPageState<
158159
>;
159160

160161
export interface DataFrameAnalyticsQueryState {
162+
analysisType?: DataFrameAnalysisConfigType;
161163
jobId?: JobId | JobId[];
162164
modelId?: string;
163165
groupIds?: string[];
164166
globalState?: MlCommonGlobalState;
165167
}
166168

167169
export type DataFrameAnalyticsUrlState = MLPageState<
168-
typeof ML_PAGES.DATA_FRAME_ANALYTICS_JOBS_MANAGE | typeof ML_PAGES.DATA_FRAME_ANALYTICS_MAP,
170+
| typeof ML_PAGES.DATA_FRAME_ANALYTICS_JOBS_MANAGE
171+
| typeof ML_PAGES.DATA_FRAME_ANALYTICS_MAP
172+
| typeof ML_PAGES.DATA_FRAME_ANALYTICS_CREATE_JOB,
169173
DataFrameAnalyticsQueryState | undefined
170174
>;
171175

x-pack/plugins/ml/public/application/data_frame_analytics/common/use_results_view_config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { useMlContext } from '../../contexts/ml';
2020
import { DataFrameAnalyticsConfig } from '../common';
2121

2222
import { isGetDataFrameAnalyticsStatsResponseOk } from '../pages/analytics_management/services/analytics_service/get_analytics';
23-
import { DATA_FRAME_TASK_STATE } from '../pages/analytics_management/components/analytics_list/common';
23+
import { DataFrameTaskStateType } from '../pages/analytics_management/components/analytics_list/common';
2424
import { useTrainedModelsApiService } from '../../services/ml_api_service/trained_models';
2525
import { TotalFeatureImportance } from '../../../../common/types/feature_importance';
2626
import { getToastNotificationService } from '../../services/toast_notification_service';
@@ -45,7 +45,7 @@ export const useResultsViewConfig = (jobId: string) => {
4545
undefined
4646
);
4747
const [jobConfigErrorMessage, setJobConfigErrorMessage] = useState<undefined | string>(undefined);
48-
const [jobStatus, setJobStatus] = useState<DATA_FRAME_TASK_STATE | undefined>(undefined);
48+
const [jobStatus, setJobStatus] = useState<DataFrameTaskStateType | undefined>(undefined);
4949

5050
const [totalFeatureImportance, setTotalFeatureImportance] = useState<
5151
TotalFeatureImportance[] | undefined

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/evaluate_panel.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
DataFrameAnalyticsConfig,
3030
} from '../../../../common';
3131
import { isKeywordAndTextType } from '../../../../common/fields';
32-
import { DATA_FRAME_TASK_STATE } from '../../../analytics_management/components/analytics_list/common';
32+
import { DataFrameTaskStateType } from '../../../analytics_management/components/analytics_list/common';
3333
import {
3434
isResultsSearchBoolQuery,
3535
isClassificationEvaluateResponse,
@@ -49,7 +49,7 @@ import {
4949

5050
export interface EvaluatePanelProps {
5151
jobConfig: DataFrameAnalyticsConfig;
52-
jobStatus?: DATA_FRAME_TASK_STATE;
52+
jobStatus?: DataFrameTaskStateType;
5353
searchQuery: ResultsSearchQuery;
5454
}
5555

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_page_wrapper/exploration_page_wrapper.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
} from '../../../../common';
1717
import { ResultsSearchQuery } from '../../../../common/analytics';
1818

19-
import { DATA_FRAME_TASK_STATE } from '../../../analytics_management/components/analytics_list/common';
19+
import { DataFrameTaskStateType } from '../../../analytics_management/components/analytics_list/common';
2020

2121
import { ExpandableSectionAnalytics } from '../expandable_section';
2222
import { ExplorationResultsTable } from '../exploration_results_table';
@@ -48,7 +48,7 @@ const filters = {
4848

4949
export interface EvaluatePanelProps {
5050
jobConfig: DataFrameAnalyticsConfig;
51-
jobStatus?: DATA_FRAME_TASK_STATE;
51+
jobStatus?: DataFrameTaskStateType;
5252
searchQuery: ResultsSearchQuery;
5353
}
5454

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_results_table/exploration_results_table.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { useMlKibana } from '../../../../../contexts/kibana';
1414
import { DataFrameAnalyticsConfig } from '../../../../common';
1515
import { ResultsSearchQuery } from '../../../../common/analytics';
1616

17-
import { DATA_FRAME_TASK_STATE } from '../../../analytics_management/components/analytics_list/common';
17+
import { DataFrameTaskStateType } from '../../../analytics_management/components/analytics_list/common';
1818

1919
import { ExpandableSectionResults } from '../expandable_section';
2020

@@ -23,7 +23,7 @@ import { useExplorationResults } from './use_exploration_results';
2323
interface Props {
2424
indexPattern: IndexPattern;
2525
jobConfig: DataFrameAnalyticsConfig;
26-
jobStatus?: DATA_FRAME_TASK_STATE;
26+
jobStatus?: DataFrameTaskStateType;
2727
needsDestIndexPattern: boolean;
2828
searchQuery: ResultsSearchQuery;
2929
}

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/regression_exploration/evaluate_panel.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
Eval,
2727
DataFrameAnalyticsConfig,
2828
} from '../../../../common';
29-
import { DATA_FRAME_TASK_STATE } from '../../../analytics_management/components/analytics_list/common';
29+
import { DataFrameTaskStateType } from '../../../analytics_management/components/analytics_list/common';
3030
import {
3131
isResultsSearchBoolQuery,
3232
isRegressionEvaluateResponse,
@@ -41,7 +41,7 @@ import { EvaluateStat } from './evaluate_stat';
4141

4242
interface Props {
4343
jobConfig: DataFrameAnalyticsConfig;
44-
jobStatus?: DATA_FRAME_TASK_STATE;
44+
jobStatus?: DataFrameTaskStateType;
4545
searchQuery: SavedSearchQuery;
4646
}
4747

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ export const useNavigateToWizardWithClonedJob = () => {
343343

344344
const savedObjectsClient = savedObjects.client;
345345

346-
return async (item: DataFrameAnalyticsListRow) => {
346+
return async (item: Pick<DataFrameAnalyticsListRow, 'config' | 'stats'>) => {
347347
const sourceIndex = Array.isArray(item.config.source.index)
348348
? item.config.source.index.join(',')
349349
: item.config.source.index;

0 commit comments

Comments
 (0)