From 80eef1ec0646e1a7a210b42c538994131db5bcd0 Mon Sep 17 00:00:00 2001
From: Dima Arnautov <dmitrii.arnautov@elastic.co>
Date: Fri, 6 Dec 2019 16:32:41 +0100
Subject: [PATCH] [ML] Fetch the latest job messages and enable sorting by time
 (#52388)

* [ML] add sorting support

* [ML] change fetch sort to desc for anomaly detection jobs

* [ML] rename param
---
 .../components/job_messages/job_messages.tsx    | 17 ++++++++++++++---
 .../job_audit_messages/job_audit_messages.js    |  2 +-
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/x-pack/legacy/plugins/ml/public/application/components/job_messages/job_messages.tsx b/x-pack/legacy/plugins/ml/public/application/components/job_messages/job_messages.tsx
index aedb8b6d17d06..5fb3ab95e4ea0 100644
--- a/x-pack/legacy/plugins/ml/public/application/components/job_messages/job_messages.tsx
+++ b/x-pack/legacy/plugins/ml/public/application/components/job_messages/job_messages.tsx
@@ -6,7 +6,7 @@
 
 import React, { FC } from 'react';
 
-import { EuiSpacer, EuiBasicTable } from '@elastic/eui';
+import { EuiSpacer, EuiInMemoryTable } from '@elastic/eui';
 // @ts-ignore
 import { formatDate } from '@elastic/eui/lib/services/format';
 import { i18n } from '@kbn/i18n';
@@ -35,11 +35,13 @@ export const JobMessages: FC<JobMessagesProps> = ({ messages, loading, error })
       width: `${theme.euiSizeL}`,
     },
     {
+      field: 'timestamp',
       name: i18n.translate('xpack.ml.jobMessages.timeLabel', {
         defaultMessage: 'Time',
       }),
-      render: (message: any) => formatDate(message.timestamp, TIME_FORMAT),
+      render: (timestamp: number) => formatDate(timestamp, TIME_FORMAT),
       width: '120px',
+      sortable: true,
     },
     {
       field: 'node_name',
@@ -57,13 +59,22 @@ export const JobMessages: FC<JobMessagesProps> = ({ messages, loading, error })
     },
   ];
 
+  const defaultSorting = {
+    sort: {
+      field: 'timestamp',
+      direction: 'asc',
+    },
+  };
+
   return (
     <>
       <EuiSpacer size="s" />
-      <EuiBasicTable
+      <EuiInMemoryTable
         className="job-messages-table"
         items={messages}
         columns={columns}
+        sorting={defaultSorting}
+        // @ts-ignore
         compressed={true}
         loading={loading}
         error={error}
diff --git a/x-pack/legacy/plugins/ml/server/models/job_audit_messages/job_audit_messages.js b/x-pack/legacy/plugins/ml/server/models/job_audit_messages/job_audit_messages.js
index 3b666cad7d8eb..16328a9cd5e93 100644
--- a/x-pack/legacy/plugins/ml/server/models/job_audit_messages/job_audit_messages.js
+++ b/x-pack/legacy/plugins/ml/server/models/job_audit_messages/job_audit_messages.js
@@ -90,7 +90,7 @@ export function jobAuditMessagesProvider(callWithRequest) {
         body:
         {
           sort: [
-            { timestamp: { order: 'asc' } },
+            { timestamp: { order: 'desc' } },
             { job_id: { order: 'asc' } }
           ],
           query