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

zhaoqingran pushed a commit to branch bulletin
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/bulletin by this push:
     new a4bd92d8e improve
a4bd92d8e is described below

commit a4bd92d8ec0d13456bc6908994a4b366fe09135c
Author: zqr10159 <[email protected]>
AuthorDate: Tue Aug 20 19:59:52 2024 +0800

    improve
---
 .../manager/controller/BulletinController.java     |  8 +++-
 .../manager/service/impl/BulletinServiceImpl.java  |  6 ++-
 .../app/routes/bulletin/bulletin.component.html    | 45 ++++++++++++----------
 .../src/app/routes/bulletin/bulletin.component.ts  | 18 +++++++--
 4 files changed, 51 insertions(+), 26 deletions(-)

diff --git 
a/manager/src/main/java/org/apache/hertzbeat/manager/controller/BulletinController.java
 
b/manager/src/main/java/org/apache/hertzbeat/manager/controller/BulletinController.java
index 9f781b4a9..ebcd4cd05 100644
--- 
a/manager/src/main/java/org/apache/hertzbeat/manager/controller/BulletinController.java
+++ 
b/manager/src/main/java/org/apache/hertzbeat/manager/controller/BulletinController.java
@@ -150,7 +150,11 @@ public class BulletinController {
             Map<String, List<String>> fieldMap = 
JsonUtil.fromJson(bulletin.getFields(), new TypeReference<>() {});
 
             if (fieldMap != null) {
-                for (Map.Entry<String, List<String>> entry : 
fieldMap.entrySet()) {
+                // Convert entry set to a list and sort it
+                List<Map.Entry<String, List<String>>> entries = new 
ArrayList<>(fieldMap.entrySet());
+                entries.sort(Map.Entry.comparingByKey());
+
+                for (Map.Entry<String, List<String>> entry : entries) {
                     String metric = entry.getKey();
                     List<String> fields = entry.getValue();
                     BulletinMetricsData.Metric.MetricBuilder metricBuilder = 
BulletinMetricsData.Metric.builder()
@@ -161,10 +165,10 @@ public class BulletinController {
                             buildFieldsListNoData(metric, fields);
                     metricBuilder.fields(fieldsList);
                     metrics.add(metricBuilder.build());
-
                 }
             }
 
+
             dataBuilder.metrics(metrics);
             dataList.add(dataBuilder.build());
         }
diff --git 
a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java
 
b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java
index 056177f1f..d4070fce6 100644
--- 
a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java
+++ 
b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/BulletinServiceImpl.java
@@ -23,7 +23,9 @@ package org.apache.hertzbeat.manager.service.impl;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
+import java.util.TreeMap;
 import java.util.stream.Collectors;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.common.entity.manager.bulletin.BulletinDto;
@@ -125,7 +127,9 @@ public class BulletinServiceImpl implements BulletinService 
{
             Bulletin bulletin = new Bulletin();
             bulletin.setName(bulletinDto.getName());
             bulletin.setId(SnowFlakeIdGenerator.generateId());
-            String fields = JsonUtil.toJson(bulletinDto.getFields());
+            Map<String, List<String>> map = bulletinDto.getFields();
+            Map<String, List<String>> sortedMap = new TreeMap<>(map);
+            String fields = JsonUtil.toJson(sortedMap);
             bulletin.setFields(fields);
             bulletin.setMetrics(bulletinDto.getMetrics());
             bulletin.setMonitorIds(bulletinDto.getMonitorIds());
diff --git a/web-app/src/app/routes/bulletin/bulletin.component.html 
b/web-app/src/app/routes/bulletin/bulletin.component.html
index 5fb6989ce..25be827d2 100644
--- a/web-app/src/app/routes/bulletin/bulletin.component.html
+++ b/web-app/src/app/routes/bulletin/bulletin.component.html
@@ -84,28 +84,33 @@
         </thead>
 
         <tbody>
-          <ng-container *ngFor="let data of fixedTable.data">
-            <ng-container *ngFor="let rowIndex of getRowIndexes(data)">
-              <tr>
-                <ng-container *ngIf="rowIndex === 0">
-                  <td nzAlign="center" [rowSpan]="getMaxRowSpan(data)">{{ 
data.app }}</td>
-                  <td nzAlign="center" [rowSpan]="getMaxRowSpan(data)">{{ 
data.host }}</td>
-                </ng-container>
-                <ng-container *ngFor="let nbr of tabDefines.column.length">
-                  <ng-container *ngFor="let field of 
tabDefines.content.metrics[nbr].length">
-                    <td *ngIf="data[field] !== null">
-                      {{ data[field][rowIndex].split('$$$')[0] }}
-                      <nz-tag *ngIf="data[field][rowIndex] == null" 
nzColor="warning">{{ 'monitors.detail.value.null' | i18n }}</nz-tag>
-                      <nz-tag *ngIf="data[field][rowIndex].split('$$$')[1]" 
nzColor="success">{{
-                        data[field][rowIndex].split('$$$')[1]
-                      }}</nz-tag>
-                    </td>
-                  </ng-container>
-                </ng-container>
-              </tr>
-            </ng-container>
+        <ng-container *ngFor="let data of tabDefines.content">
+          <ng-container *ngFor="let rowIndex of getRowIndexes(data)">
+            <tr>
+              <ng-container *ngIf="rowIndex === 0">
+                <td nzAlign="center" [rowSpan]="getMaxRowSpan(data)">{{ 
data.app }}</td>
+                <td nzAlign="center" [rowSpan]="getMaxRowSpan(data)">{{ 
data.host }}</td>
+              </ng-container>
+              <ng-container *ngFor="let metric of data.metrics">
+                <td>
+                  <div *ngFor="let field of metric.fields">
+                    <div *ngFor="let item of field">
+                      <span>{{ item.key }}: </span>
+                      <nz-tag *ngIf="item.value === 'No Data'" 
nzColor="warning">
+                        {{ 'monitors.detail.value.null' | i18n }}
+                      </nz-tag>
+                      <nz-tag *ngIf="item.value !== 'No Data'" 
nzColor="success">
+                        {{ item.value }} {{ item.unit }}
+                      </nz-tag>
+                    </div>
+                  </div>
+                </td>
+              </ng-container>
+            </tr>
           </ng-container>
+        </ng-container>
         </tbody>
+
       </nz-table>
       <ng-template #rangeTemplate> {{ 'common.total' | i18n }} {{ 
tabDefines.total }} </ng-template>
     </ng-container>
diff --git a/web-app/src/app/routes/bulletin/bulletin.component.ts 
b/web-app/src/app/routes/bulletin/bulletin.component.ts
index c8c2585c2..b39f3de67 100644
--- a/web-app/src/app/routes/bulletin/bulletin.component.ts
+++ b/web-app/src/app/routes/bulletin/bulletin.component.ts
@@ -378,8 +378,7 @@ export class BulletinComponent implements OnInit {
           if (message.code === 0 && message.data) {
             // this.total = message.data.totalElements;
             this.tabDefines = message.data;
-            console.info('tabDefines.length:', this.tabDefines.column.length);
-            console.info('tabDefines.field:', 
this.tabDefines.bulletinColumn['summary']);
+            this.printDataStructure(this.tabDefines.content);
           } else if (message.code !== 0) {
             this.notifySvc.warning(`${message.msg}`, '');
             console.info(`${message.msg}`);
@@ -395,7 +394,20 @@ export class BulletinComponent implements OnInit {
     }
     this.tableLoading = false;
   }
-
+  printDataStructure(data: any) {
+    data.forEach((entry: any) => {
+      console.log(`App: ${entry.app}`);
+      console.log(`Host: ${entry.host}`);
+      entry.metrics.forEach((metric: any) => {
+        console.log(`Metric: ${metric.name}`);
+        metric.fields.forEach((fieldGroup: any) => {
+          fieldGroup.forEach((field: any) => {
+            console.log(`  Key: ${field.key}, Value: ${field.value}, Unit: 
${field.unit}`);
+          });
+        });
+      });
+    });
+  }
   getKeys(metricName: string): string[] {
     const result = new Set<string>();
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to