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;