This is an automated email from the ASF dual-hosted git repository.

tcodehuber028 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git


The following commit(s) were added to refs/heads/master by this push:
     new 329d920b4 [AMORO-2988] Add more base info for the table detail page 
(#2989)
329d920b4 is described below

commit 329d920b4e6dd4f9be6041bb2b23102c7eadb0eb
Author: tcodehuber <[email protected]>
AuthorDate: Fri Jul 5 15:25:51 2024 +0800

    [AMORO-2988] Add more base info for the table detail page (#2989)
    
    * [AMORO-2988] Add more base info for the table detail page
    
    * code refactor
    
    * code refactor
    
    * code refactor
    
    * code refactor
    
    * remove some code
---
 .../src/views/tables/components/Details.vue        |  6 ++----
 .../amoro-ams-dashboard/src/views/tables/index.vue | 17 ++++++++-------
 .../dashboard/MixedAndIcebergTableDescriptor.java  | 24 ++++++++++++++++++++++
 .../server/dashboard/PaimonTableDescriptor.java    |  1 +
 .../dashboard/controller/TableController.java      |  6 ++++++
 5 files changed, 41 insertions(+), 13 deletions(-)

diff --git 
a/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue 
b/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue
index a5bcba3c9..a4caa6b11 100644
--- a/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue
+++ b/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue
@@ -62,12 +62,10 @@ const changeMetricsMap: IMap<string | number> = {
 const state = reactive({
   detailLoading: false,
   baseDetailInfo: {
+    optimizingStatus: '',
     tableType: '',
     tableName: '',
     createTime: '',
-    size: '',
-    file: '',
-    averageFile: '',
     tableFormat: '',
     hasPartition: false, // Whether there is a partition, if there is no 
partition, the file list will be displayed
   } as IBaseDetailInfo,
@@ -93,7 +91,7 @@ async function getTableDetails() {
     state.baseDetailInfo = {
       ...tableSummary,
       tableType,
-      tableName: tableIdentifier?.tableName || '',
+      tableName: `${tableIdentifier?.catalog || 
''}.${tableIdentifier?.database || ''}.${tableIdentifier?.tableName || ''}`,
       createTime: createTime ? dateFormat(createTime) : '',
       hasPartition: !!(partitionColumnList?.length),
     }
diff --git a/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue 
b/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue
index 55d9b8c32..5e5eca29a 100644
--- a/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue
+++ b/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue
@@ -53,12 +53,10 @@ export default defineComponent({
       activeKey: 'Details',
       isSecondaryNav: false,
       baseInfo: {
+        optimizingStatus: '',
         tableType: '',
         tableName: '',
         createTime: '',
-        size: '',
-        file: '',
-        averageFile: '',
         tableFormat: '',
         hasPartition: false,
       } as IBaseDetailInfo,
@@ -141,15 +139,16 @@ export default defineComponent({
         <div class="g-flex-col">
           <div class="g-flex">
             <span :title="baseInfo.tableName" class="table-name 
g-text-nowrap">{{ baseInfo.tableName }}</span>
-            <span v-if="!isIceberg" class="create-time">{{ 
`${$t('createTime')}: ${baseInfo.createTime}` }}</span>
           </div>
           <div class="table-info g-flex-ac">
-            <p>{{ `${$t('table')}${$t('size')}` }}: <span 
class="text-color">{{ baseInfo.size }}</span></p>
+            <p>{{ $t('optimizingStatus') }}: <span class="text-color">{{ 
baseInfo.optimizingStatus }}</span></p>
             <a-divider type="vertical" />
-            <p>{{ $t('file') }}:  <span class="text-color">{{ baseInfo.file 
}}</span></p>
-            <a-divider type="vertical" />
-            <p>{{ $t('averageFileSize') }}: <span class="text-color">{{ 
baseInfo.averageFile }}</span></p>
+            <p>{{ $t('records') }}: <span class="text-color">{{ 
baseInfo.records }}</span></p>
             <a-divider type="vertical" />
+            <template v-if="!isIceberg">
+              <p>{{ $t('createTime') }}: <span class="text-color">{{ 
baseInfo.createTime }}</span></p>
+              <a-divider type="vertical" />
+            </template>
             <p>{{ $t('tableFormat') }}: <span class="text-color">{{ 
baseInfo.tableFormat }}</span></p>
           </div>
         </div>
@@ -194,7 +193,7 @@ export default defineComponent({
     font-size: 24px;
     line-height: 1.5;
     margin-right: 16px;
-    max-width: 400px;
+    max-width: 600px;
     padding-left: 24px;
   }
   .table-info {
diff --git 
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
 
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
index 16b223135..bc456a0d6 100644
--- 
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
+++ 
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
@@ -155,6 +155,8 @@ public class MixedAndIcebergTableDescriptor extends 
PersistentBase
     tableSummary.put("file", tableFileCnt);
     tableSummary.put(
         "averageFile", AmsUtil.byteToXB(tableFileCnt == 0 ? 0 : tableSize / 
tableFileCnt));
+
+    tableSummary.put("records", getRecordsOfTable(table));
     tableSummary.put("tableFormat", tableFormat);
     serverTableMeta.setTableSummary(tableSummary);
     return serverTableMeta;
@@ -173,6 +175,28 @@ public class MixedAndIcebergTableDescriptor extends 
PersistentBase
     return sb.toString();
   }
 
+  private long getRecordsOfTable(MixedTable mixedTable) {
+    long totalRecords;
+    if (mixedTable.isKeyedTable()) {
+      Snapshot changeSnapshot =
+          SnapshotUtil.latestSnapshot(mixedTable.asKeyedTable().changeTable(), 
null);
+      Snapshot baseSnapshot =
+          SnapshotUtil.latestSnapshot(mixedTable.asKeyedTable().baseTable(), 
null);
+      totalRecords =
+          PropertyUtil.propertyAsLong(
+                  changeSnapshot.summary(), 
SnapshotSummary.TOTAL_RECORDS_PROP, 0L)
+              + PropertyUtil.propertyAsLong(
+                  baseSnapshot.summary(), SnapshotSummary.TOTAL_RECORDS_PROP, 
0L);
+    } else {
+      totalRecords =
+          PropertyUtil.propertyAsLong(
+              SnapshotUtil.latestSnapshot(mixedTable.asUnkeyedTable(), 
null).summary(),
+              SnapshotSummary.TOTAL_RECORDS_PROP,
+              0L);
+    }
+    return totalRecords;
+  }
+
   private Long snapshotIdOfTableRef(Table table, String ref) {
     if (ref == null) {
       ref = SnapshotRef.MAIN_BRANCH;
diff --git 
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
 
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
index 598f991cb..ad878b268 100644
--- 
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
+++ 
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
@@ -151,6 +151,7 @@ public class PaimonTableDescriptor implements 
FormatTableDescriptor {
       tableSummary.put("averageFile", averageFileSize);
       tableSummary.put("file", fileCount);
       tableSummary.put("size", totalSize);
+      tableSummary.put("records", snapshotsOfTable.getRecords());
 
       baseMetric.put("totalSize", totalSize);
       baseMetric.put("fileCount", fileCount);
diff --git 
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
 
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
index 2efa3315f..30c367f1f 100644
--- 
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
+++ 
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
@@ -137,6 +137,12 @@ public class TableController {
     ServerTableMeta serverTableMeta =
         tableDescriptor.getTableDetail(
             TableIdentifier.of(catalog, database, 
tableName).buildTableIdentifier());
+    ServerTableIdentifier serverTableIdentifier =
+        tableService.getServerTableIdentifier(
+            TableIdentifier.of(catalog, database, 
tableName).buildTableIdentifier());
+    Map<String, Object> tableSummary = serverTableMeta.getTableSummary();
+    tableSummary.put(
+        "optimizingStatus", 
tableService.getRuntime(serverTableIdentifier).getOptimizingStatus());
 
     ctx.json(OkResponse.of(serverTableMeta));
   }

Reply via email to