diff --git a/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/extract_job_details.js b/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/extract_job_details.js
index 601ab270a52192..2d8fcb55d7f747 100644
--- a/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/extract_job_details.js
+++ b/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/extract_job_details.js
@@ -122,6 +122,14 @@ export function extractJobDetails(job) {
if (job.node) {
datafeed.items.push(['node', JSON.stringify(job.node)]);
}
+ if (job.datafeed_config && job.datafeed_config.timing_stats) {
+ // remove the timing_stats list from the datafeed section
+ // so not to show it twice.
+ const i = datafeed.items.findIndex(item => item[0] === 'timing_stats');
+ if (i >= 0) {
+ datafeed.items.splice(i, 1);
+ }
+ }
const counts = {
title: i18n.translate('xpack.ml.jobsList.jobDetails.countsTitle', {
@@ -139,6 +147,17 @@ export function extractJobDetails(job) {
items: filterObjects(job.model_size_stats).map(formatValues)
};
+ const datafeedTimingStats = {
+ title: i18n.translate('xpack.ml.jobsList.jobDetails.datafeedTimingStatsTitle', {
+ defaultMessage: 'Timing stats'
+ }),
+ position: 'right',
+ items: (job.datafeed_config && job.datafeed_config.timing_stats) ?
+ filterObjects(job.datafeed_config.timing_stats)
+ .filter(o => o[0] !== 'total_search_time_ms') // remove total_search_time_ms as average_search_time_per_bucket_ms is better
+ .map(formatValues) : []
+ };
+
return {
general,
customUrl,
@@ -151,6 +170,7 @@ export function extractJobDetails(job) {
dataDescription,
datafeed,
counts,
- modelSizeStats
+ modelSizeStats,
+ datafeedTimingStats
};
}
diff --git a/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/job_details.js b/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/job_details.js
index 1711740d20bbad..08072bbab66e5a 100644
--- a/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/job_details.js
+++ b/x-pack/legacy/plugins/ml/public/jobs/jobs_list/components/job_details/job_details.js
@@ -67,7 +67,8 @@ class JobDetailsUI extends Component {
dataDescription,
datafeed,
counts,
- modelSizeStats
+ modelSizeStats,
+ datafeedTimingStats
} = extractJobDetails(job);
const { intl } = this.props;
@@ -93,7 +94,7 @@ class JobDetailsUI extends Component {
id: 'xpack.ml.jobsList.jobDetails.tabs.datafeedLabel',
defaultMessage: 'Datafeed'
}),
- content: ,
+ content: ,
}, {
id: 'counts',
name: intl.formatMessage({
diff --git a/x-pack/legacy/plugins/ml/public/services/job_service.js b/x-pack/legacy/plugins/ml/public/services/job_service.js
index 6a9bdc74d2f40e..bb24e77f509e0a 100644
--- a/x-pack/legacy/plugins/ml/public/services/job_service.js
+++ b/x-pack/legacy/plugins/ml/public/services/job_service.js
@@ -351,6 +351,7 @@ class JobService {
delete tempJob.datafeed_config.job_id;
delete tempJob.datafeed_config.state;
delete tempJob.datafeed_config.node;
+ delete tempJob.datafeed_config.timing_stats;
// remove query_delay if it's between 60s and 120s
// the back-end produces a random value between 60 and 120 and so
diff --git a/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js b/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js
index e0ddbf5f1113d3..18e883f318301a 100644
--- a/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js
+++ b/x-pack/legacy/plugins/ml/server/models/job_service/jobs.js
@@ -200,6 +200,7 @@ export function jobsProvider(callWithRequest) {
const datafeedStats = results[DATAFEED_STATS].datafeeds.find(ds => (ds.datafeed_id === datafeed.datafeed_id));
if (datafeedStats) {
datafeed.state = datafeedStats.state;
+ datafeed.timing_stats = datafeedStats.timing_stats;
}
}
datafeeds[datafeed.job_id] = datafeed;