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]