Skip to content

Commit b7a500e

Browse files
committed
[ML] Data Frame Analytics: Fix steps to be named phases. (#65855)
- Fixes wrong names and renames everything related to step to phase. - Renames column heading Progress per Step to just Progress. - Hide the progress bar percentage, instead it's available in a tooltip. - Changes the progress column content to Phase 1/4 [ProgressBar].
1 parent 46be2d4 commit b7a500e

4 files changed

Lines changed: 77 additions & 44 deletions

File tree

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/columns.tsx

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { getAnalysisType, DataFrameAnalyticsId } from '../../../../common';
2323
import { CreateAnalyticsFormProps } from '../../hooks/use_create_analytics_form';
2424
import {
2525
getDataFrameAnalyticsProgress,
26+
getDataFrameAnalyticsProgressPhase,
2627
isDataFrameAnalyticsFailed,
2728
isDataFrameAnalyticsRunning,
2829
isDataFrameAnalyticsStopped,
@@ -66,22 +67,12 @@ export const getTaskStateBadge = (
6667

6768
export const progressColumn = {
6869
name: i18n.translate('xpack.ml.dataframe.analyticsList.progress', {
69-
defaultMessage: 'Progress per Step',
70+
defaultMessage: 'Progress',
7071
}),
7172
sortable: (item: DataFrameAnalyticsListRow) => getDataFrameAnalyticsProgress(item.stats),
7273
truncateText: true,
7374
render(item: DataFrameAnalyticsListRow) {
74-
const totalSteps = item.stats.progress.length;
75-
let step = 0;
76-
let progress = 0;
77-
78-
for (const progressStep of item.stats.progress) {
79-
step++;
80-
progress = progressStep.progress_percent;
81-
if (progressStep.progress_percent < 100) {
82-
break;
83-
}
84-
}
75+
const { currentPhase, progress, totalPhases } = getDataFrameAnalyticsProgressPhase(item.stats);
8576

8677
// For now all analytics jobs are batch jobs.
8778
const isBatchTransform = true;
@@ -90,25 +81,30 @@ export const progressColumn = {
9081
<EuiFlexGroup alignItems="center" gutterSize="xs">
9182
{isBatchTransform && (
9283
<Fragment>
93-
<EuiFlexItem style={{ width: '40px' }} grow={false}>
94-
<EuiProgress
95-
value={progress}
96-
max={100}
97-
color="primary"
98-
size="m"
99-
data-test-subj="mlAnalyticsTableProgress"
100-
>
101-
{progress}%
102-
</EuiProgress>
103-
</EuiFlexItem>
104-
<EuiFlexItem style={{ width: '35px' }} grow={false}>
105-
<EuiText size="xs">{`${progress}%`}</EuiText>
106-
</EuiFlexItem>
107-
<EuiFlexItem style={{ width: '21px' }} grow={false}>
84+
<EuiFlexItem style={{ width: '60px' }} grow={false}>
10885
<EuiText size="xs">
109-
{step}/{totalSteps}
86+
Phase {currentPhase}/{totalPhases}
11087
</EuiText>
11188
</EuiFlexItem>
89+
<EuiFlexItem style={{ width: '40px' }} grow={false}>
90+
<EuiToolTip
91+
content={i18n.translate('xpack.ml.dataframe.analyticsList.progressOfPhase', {
92+
defaultMessage: 'Progress of phase {currentPhase}: {progress}%',
93+
values: {
94+
currentPhase,
95+
progress,
96+
},
97+
})}
98+
>
99+
<EuiProgress
100+
value={progress}
101+
max={100}
102+
color="primary"
103+
size="m"
104+
data-test-subj="mlAnalyticsTableProgress"
105+
/>
106+
</EuiToolTip>
107+
</EuiFlexItem>
112108
</Fragment>
113109
)}
114110
{!isBatchTransform && (

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/common.test.ts

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import StatsMock from './__mocks__/analytics_stats.json';
88

99
import {
10+
getDataFrameAnalyticsProgress,
11+
getDataFrameAnalyticsProgressPhase,
1012
isCompletedAnalyticsJob,
1113
isDataFrameAnalyticsRunning,
1214
isDataFrameAnalyticsStats,
@@ -17,13 +19,15 @@ import {
1719
const completedJob = StatsMock.data_frame_analytics[0] as DataFrameAnalyticsStats;
1820
const runningJob = StatsMock.data_frame_analytics[1] as DataFrameAnalyticsStats;
1921

20-
describe('Data Frame Analytics: common utils', () => {
21-
test('isCompletedAnalyticsJob()', () => {
22+
describe('Data Frame Analytics: isCompletedAnalyticsJob()', () => {
23+
test('should report if job is completed', () => {
2224
expect(isCompletedAnalyticsJob(completedJob)).toBe(true);
2325
expect(isCompletedAnalyticsJob(runningJob)).toBe(false);
2426
});
27+
});
2528

26-
test('isDataFrameAnalyticsRunning()', () => {
29+
describe('Data Frame Analytics: isDataFrameAnalyticsRunning()', () => {
30+
test('should report if job is running', () => {
2731
expect(isDataFrameAnalyticsRunning(completedJob.state)).toBe(false);
2832
expect(isDataFrameAnalyticsRunning(runningJob.state)).toBe(true);
2933
runningJob.state = DATA_FRAME_TASK_STATE.STARTED;
@@ -35,11 +39,35 @@ describe('Data Frame Analytics: common utils', () => {
3539
runningJob.state = DATA_FRAME_TASK_STATE.FAILED;
3640
expect(isDataFrameAnalyticsRunning(runningJob.state)).toBe(false);
3741
});
42+
});
3843

39-
test('isDataFrameAnalyticsStats()', () => {
44+
describe('Data Frame Analytics: isDataFrameAnalyticsStats()', () => {
45+
test('should return if valid analytics stats', () => {
4046
expect(isDataFrameAnalyticsStats(completedJob)).toBe(true);
4147
expect(isDataFrameAnalyticsStats(runningJob)).toBe(true);
4248
expect(isDataFrameAnalyticsStats({})).toBe(false);
4349
expect(isDataFrameAnalyticsStats('no-object')).toBe(false);
4450
});
4551
});
52+
53+
describe('Data Frame Analytics: getDataFrameAnalyticsProgress()', () => {
54+
test('should report overall job progress percentage', () => {
55+
expect(getDataFrameAnalyticsProgress(completedJob)).toBe(100);
56+
expect(getDataFrameAnalyticsProgress(runningJob)).toBe(59);
57+
});
58+
});
59+
60+
describe('Data Frame Analytics: getDataFrameAnalyticsProgressPhase()', () => {
61+
test('should report progress by current phase', () => {
62+
expect(getDataFrameAnalyticsProgressPhase(completedJob)).toStrictEqual({
63+
currentPhase: 4,
64+
progress: 100,
65+
totalPhases: 4,
66+
});
67+
expect(getDataFrameAnalyticsProgressPhase(runningJob)).toStrictEqual({
68+
currentPhase: 3,
69+
progress: 37,
70+
totalPhases: 4,
71+
});
72+
});
73+
});

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/common.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,22 @@ export function getDataFrameAnalyticsProgress(stats: DataFrameAnalyticsStats) {
8181
return undefined;
8282
}
8383

84+
export function getDataFrameAnalyticsProgressPhase(
85+
stats: DataFrameAnalyticsStats
86+
): { currentPhase: number; progress: number; totalPhases: number } {
87+
let phase = 0;
88+
let progress = 0;
89+
90+
for (const progressPhase of stats.progress) {
91+
phase++;
92+
progress = progressPhase.progress_percent;
93+
if (progressPhase.progress_percent < 100) {
94+
break;
95+
}
96+
}
97+
return { currentPhase: phase, progress, totalPhases: stats.progress.length };
98+
}
99+
84100
export interface DataFrameAnalyticsListRow {
85101
id: DataFrameAnalyticsId;
86102
checkpointing: object;

x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/expanded_row.tsx

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
Eval,
2626
} from '../../../../common';
2727
import { getTaskStateBadge } from './columns';
28-
import { isCompletedAnalyticsJob } from './common';
28+
import { getDataFrameAnalyticsProgressPhase, isCompletedAnalyticsJob } from './common';
2929
import {
3030
isRegressionAnalysis,
3131
ANALYSIS_CONFIG_TYPE,
@@ -171,14 +171,7 @@ export const ExpandedRow: FC<Props> = ({ item }) => {
171171
position: 'left',
172172
};
173173

174-
const totalSteps = item.stats.progress.length;
175-
let step = 0;
176-
for (const progressStep of item.stats.progress) {
177-
step++;
178-
if (progressStep.progress_percent < 100) {
179-
break;
180-
}
181-
}
174+
const { currentPhase, totalPhases } = getDataFrameAnalyticsProgressPhase(item.stats);
182175

183176
const progress: SectionConfig = {
184177
title: i18n.translate(
@@ -188,10 +181,10 @@ export const ExpandedRow: FC<Props> = ({ item }) => {
188181
items: [
189182
{
190183
title: i18n.translate(
191-
'xpack.ml.dataframe.analyticsList.expandedRow.tabs.jobSettings.step',
192-
{ defaultMessage: 'Step' }
184+
'xpack.ml.dataframe.analyticsList.expandedRow.tabs.jobSettings.phase',
185+
{ defaultMessage: 'Phase' }
193186
),
194-
description: `${step}/${totalSteps}`,
187+
description: `${currentPhase}/${totalPhases}`,
195188
},
196189
...item.stats.progress.map(s => {
197190
return {

0 commit comments

Comments
 (0)