RANGER-4539: Plugin status UI should render GDS download details

Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/security-admin/src/main/webapp/react-webapp/src/utils/XAEnums.js b/security-admin/src/main/webapp/react-webapp/src/utils/XAEnums.js
index 012463e..0c57eaf 100755
--- a/security-admin/src/main/webapp/react-webapp/src/utils/XAEnums.js
+++ b/security-admin/src/main/webapp/react-webapp/src/utils/XAEnums.js
@@ -897,22 +897,44 @@
 export const pluginStatusColumnInfoMsg = {
   Policy: {
     title: "Policy (Time details)",
-    lastUpdated: "Last updated time of policy.",
-    downloadTime: "Time when policy actually downloaded(sync-up with Ranger).",
-    activeTime: "Time when policy actually in use for enforcement.",
+    lastUpdated: "Last update time of policies",
+    downloadTime: "Last policies download time (sync-up with Ranger).",
+    activeTime: "Last time the downloaded policies became active for enforcement.",
     downloadTimeDelayMsg:
-      "Policy is updated but not yet downloaded(sync-up with Ranger).",
+      "Latest update in policies are not yet downloaded (sync-up with Ranger).",
     activationTimeDelayMsg:
-      "Policy is updated but not yet used for any enforcement."
+      "Latest update in policies are not yet active for enforcement."
   },
   Tag: {
     title: "Tag Policy (Time details)",
-    lastUpdated: "Last updated time of Tag-service.",
-    downloadTime: "Time when tag-based policies sync-up with Ranger.",
-    activeTime: "Time when tag-based policies in use for enforcement.",
+    lastUpdated: "Last update time of tags.",
+    downloadTime: "Last tags download time (sync-up with Ranger).",
+    activeTime: "Last time the downloaded tags became active for enforcement.",
     downloadTimeDelayMsg:
-      "Policy is updated but not yet downloaded(sync-up with Ranger).",
+      "Latest update in tags are not yet downloaded (sync-up with Ranger).",
     activationTimeDelayMsg:
-      "Policy is updated but not yet used for any enforcement."
+      "Latest update in tags are not yet active for enforcement."
+  },
+  GDS: {
+    title: "GDS (Time details)",
+    lastUpdated: "Last update time of GDS info.",
+    downloadTime:
+      "Last GDS info download time (sync-up with Ranger).",
+    activeTime: "Last time the downloaded GDS info became active for enforcement.",
+    downloadTimeDelayMsg:
+      "Latest update in GDS info is not yet downloaded (sync-up with Ranger).",
+    activationTimeDelayMsg:
+      "Latest update in GDS info is not yet active for enforcement."
+  },
+  Role: {
+    title: "Role (Time details)",
+    lastUpdated: "Last updated time of roles.",
+    downloadTime:
+      "Last roles download time (sync-up with Ranger).",
+    activeTime: "Last time the downloaded roles became active for enforcement.",
+    downloadTimeDelayMsg:
+      "Latest update in roles are not yet downloaded (sync-up with Ranger).",
+    activationTimeDelayMsg:
+      "Latest update in roles are not yet active for enforcement."
   }
 };
diff --git a/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/PluginStatusLogs.jsx b/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/PluginStatusLogs.jsx
index 6380782..32db072 100644
--- a/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/PluginStatusLogs.jsx
+++ b/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/PluginStatusLogs.jsx
@@ -368,6 +368,82 @@
             minWidth: 190
           }
         ]
+      },
+      {
+        Header: infoIcon("GDS"),
+        id: "GDS (Time)",
+        columns: [
+          {
+            Header: "Last Update",
+            accessor: "lastGdsUpdateTime",
+            Cell: ({ row: { original } }) => {
+              return getLastUpdateTime(original.info.lastGdsUpdateTime);
+            },
+            minWidth: 190
+          },
+          {
+            Header: "Download",
+            accessor: "gdsDownloadTime",
+            Cell: ({ row: { original } }) => {
+              return getDownloadTime(
+                original.info.gdsDownloadTime,
+                original.info.lastGdsUpdateTime,
+                "GDS"
+              );
+            },
+            minWidth: 190
+          },
+          {
+            Header: "Active",
+            accessor: "gdsActivationTime",
+            Cell: ({ row: { original } }) => {
+              return getActivationTime(
+                original.info.gdsActivationTime,
+                original.info.lastGdsUpdateTime,
+                "GDS"
+              );
+            },
+            minWidth: 190
+          }
+        ]
+      },
+      {
+        Header: infoIcon("Role"),
+        id: "Role (Time)",
+        columns: [
+          {
+            Header: "Last Update",
+            accessor: "lastRoleUpdateTime",
+            Cell: ({ row: { original } }) => {
+              return getLastUpdateTime(original.info.lastRoleUpdateTime);
+            },
+            minWidth: 190
+          },
+          {
+            Header: "Download",
+            accessor: "roleDownloadTime",
+            Cell: ({ row: { original } }) => {
+              return getDownloadTime(
+                original.info.roleDownloadTime,
+                original.info.lastRoleUpdateTime,
+                "Role"
+              );
+            },
+            minWidth: 190
+          },
+          {
+            Header: "Active",
+            accessor: "roleActivationTime",
+            Cell: ({ row: { original } }) => {
+              return getActivationTime(
+                original.info.roleActivationTime,
+                original.info.lastRoleUpdateTime,
+                "Role"
+              );
+            },
+            minWidth: 190
+          }
+        ]
       }
     ],
     []