Переглянути джерело

[manager,webapp]新增监控大类别,支持自定义监控页面菜单自动渲染

tomsun28 3 роки тому
батько
коміт
36926f0fa2

+ 5 - 0
common/src/main/java/com/usthe/common/entity/job/Job.java

@@ -43,6 +43,11 @@ public class Job {
      */
     private long monitorId;
     /**
+     * 监控的大类别
+     * service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
+     */
+    private String category;
+    /**
      * 监控的类型 eg: linux | mysql | jvm
      */
     private String app;

+ 1 - 1
manager/src/main/java/com/usthe/manager/controller/AppController.java

@@ -50,7 +50,7 @@ public class AppController {
     }
 
     @GetMapping(path = "/hierarchy")
-    @ApiOperation(value = "查询全部层级的监控类型", notes = "查询所有监控类型,以层级结构输出")
+    @ApiOperation(value = "查询全部监控指标层级", notes = "查询所有监控类型-指标组-指标层级,以层级结构输出")
     public ResponseEntity<Message<List<Hierarchy>>> queryAppsHierarchy(
             @ApiParam(value = "语言类型", example = "zh-CN", defaultValue = "zh-CN")
             @RequestParam(name = "lang", required = false) String lang) {

+ 7 - 4
manager/src/main/java/com/usthe/manager/pojo/dto/Hierarchy.java

@@ -21,15 +21,18 @@ import static io.swagger.annotations.ApiModelProperty.AccessMode.READ_WRITE;
 @Data
 public class Hierarchy {
 
-    @ApiModelProperty(value = "属性值", example = "linux", accessMode = READ_WRITE, position = 0)
+    @ApiModelProperty(value = "类别值", example = "os", accessMode = READ_WRITE, position = 0)
+    String category;
+
+    @ApiModelProperty(value = "属性值", example = "linux", accessMode = READ_WRITE, position = 1)
     String value;
 
-    @ApiModelProperty(value = "属性国际化标签", example = "Linux系统", accessMode = READ_WRITE, position = 1)
+    @ApiModelProperty(value = "属性国际化标签", example = "Linux系统", accessMode = READ_WRITE, position = 2)
     String label;
 
-    @ApiModelProperty(value = "是否是叶子节点", example = "true", accessMode = READ_WRITE, position = 2)
+    @ApiModelProperty(value = "是否是叶子节点", example = "true", accessMode = READ_WRITE, position = 3)
     Boolean isLeaf = false;
 
-    @ApiModelProperty(value = "下一关联层级", accessMode = READ_WRITE, position = 3)
+    @ApiModelProperty(value = "下一关联层级", accessMode = READ_WRITE, position = 4)
     private List<Hierarchy> children;
 }

+ 1 - 0
manager/src/main/java/com/usthe/manager/service/impl/AppServiceImpl.java

@@ -84,6 +84,7 @@ public class AppServiceImpl implements AppService, CommandLineRunner {
         List<Hierarchy> hierarchies = new LinkedList<>();
         for (Job job : appDefines.values()) {
             Hierarchy hierarchyApp = new Hierarchy();
+            hierarchyApp.setCategory(job.getCategory());
             hierarchyApp.setValue(job.getApp());
             Map<String, String> nameMap = job.getName();
             if (nameMap != null) {

+ 2 - 0
manager/src/main/resources/define/app/A-example.yml

@@ -1,3 +1,5 @@
+# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
+category: custom
 # 监控应用类型(与文件名保持一致) eg: linux windows tomcat mysql aws...
 app: example
 name:

+ 2 - 0
manager/src/main/resources/define/app/api.yml

@@ -1,3 +1,5 @@
+# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
+category: service
 # 监控应用类型名称(与文件名保持一致) eg: linux windows tomcat mysql aws...
 app: api
 name:

+ 1 - 0
manager/src/main/resources/define/app/fullsite.yml

@@ -1,3 +1,4 @@
+category: service
 app: fullsite
 name:
   zh-CN: 全站监控

+ 1 - 0
manager/src/main/resources/define/app/mysql.yml

@@ -1,3 +1,4 @@
+category: db
 app: mysql
 name:
   zh-CN: MYSQL数据库

+ 2 - 0
manager/src/main/resources/define/app/ping.yml

@@ -1,3 +1,5 @@
+# 此监控类型所属类别:service-应用服务监控 db-数据库监控 custom-自定义监控 os-操作系统监控
+category: service
 # 监控应用类型名称(与文件名保持一致) eg: linux windows tomcat mysql aws...
 app: ping
 name:

+ 1 - 0
manager/src/main/resources/define/app/port.yml

@@ -1,3 +1,4 @@
+category: service
 app: port
 name:
   zh-CN: 端口可用性

+ 1 - 0
manager/src/main/resources/define/app/telnet.yml

@@ -1,3 +1,4 @@
+category: service
 app: telnet
 name:
   zh-CN: TELNET端口可用性

+ 1 - 0
manager/src/main/resources/define/app/website.yml

@@ -1,3 +1,4 @@
+category: service
 app: website
 name:
   zh-CN: 网站监测

+ 21 - 3
web-app/src/app/core/startup/startup.service.ts

@@ -3,7 +3,7 @@ import { Injectable, Inject } from '@angular/core';
 import { Router } from '@angular/router';
 import { ACLService } from '@delon/acl';
 import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
-import { ALAIN_I18N_TOKEN, MenuService, SettingsService, TitleService } from '@delon/theme';
+import { ALAIN_I18N_TOKEN, Menu, MenuService, SettingsService, TitleService } from '@delon/theme';
 import type { NzSafeAny } from 'ng-zorro-antd/core/types';
 import { NzIconService } from 'ng-zorro-antd/icon';
 import { Observable, zip, of } from 'rxjs';
@@ -37,13 +37,17 @@ export class StartupService {
 
   private viaHttp(): Observable<void> {
     const defaultLang = this.i18n.defaultLang;
-    return zip(this.i18n.loadLangData(defaultLang), this.httpClient.get('./assets/app-data.json')).pipe(
+    return zip(
+      this.i18n.loadLangData(defaultLang),
+      this.httpClient.get('./assets/app-data.json'),
+      this.httpClient.get('/apps/hierarchy')
+    ).pipe(
       catchError((res: NzSafeAny) => {
         console.warn(`StartupService.load: Network request failed`, res);
         setTimeout(() => this.router.navigateByUrl(`/exception/500`));
         return [];
       }),
-      map(([langData, appData]: [Record<string, string>, NzSafeAny]) => {
+      map(([langData, appData, menuData]: [Record<string, string>, NzSafeAny, NzSafeAny]) => {
         // setting language data
         this.i18n.use(defaultLang, langData);
 
@@ -56,6 +60,20 @@ export class StartupService {
         this.aclService.setFull(true);
         // Menu data, https://ng-alain.com/theme/menu
         this.menuService.add(appData.menu);
+        menuData.data.forEach((item: { category: string; value: string }) => {
+          let category = item.category;
+          let app = item.value;
+          let menu: Menu | null = this.menuService.getItem(category);
+          if (menu != null) {
+            menu.children?.push({
+              text: app,
+              link: `/monitors?app=${app}`,
+              i18n: `monitor.app.${app}`
+            });
+          }
+        });
+        // 刷新菜单
+        this.menuService.resume();
         // Can be set page suffix title, https://ng-alain.com/theme/title
         this.titleService.suffix = appData.app.name;
       })

+ 17 - 36
web-app/src/assets/app-data.json

@@ -30,48 +30,29 @@
       "hideInBreadcrumb": true,
       "children": [
         {
+          "key": "service",
           "text": "应用服务",
           "i18n": "menu.monitor.service",
-          "icon": "anticon-cloud",
-          "children": [
-            {
-              "text": "website",
-              "link": "/monitors?app=website",
-              "i18n": "monitor.app.website"
-            },
-            {
-              "text": "api",
-              "link": "/monitors?app=api",
-              "i18n": "monitor.app.api"
-            },
-            {
-              "text": "ping",
-              "link": "/monitors?app=ping",
-              "i18n": "monitor.app.ping"
-            },
-            {
-              "text": "port",
-              "link": "/monitors?app=port",
-              "i18n": "monitor.app.port"
-            },
-            {
-              "text": "fullsite",
-              "link": "/monitors?app=fullsite",
-              "i18n": "monitor.app.fullsite"
-            }
-          ]
+          "icon": "anticon-cloud"
         },
         {
+          "key": "db",
           "text": "数据库",
           "i18n": "menu.monitor.db",
-          "icon": "anticon-database",
-          "children": [
-            {
-              "text": "Mysql",
-              "link": "/monitors?app=mysql",
-              "i18n": "monitor.app.mysql"
-            }
-          ]
+          "icon": "anticon-database"
+        },
+        {
+          "key": "os",
+          "text": "操作系统",
+          "hide": true,
+          "i18n": "menu.monitor.os",
+          "icon": "anticon-windows"
+        },
+        {
+          "key": "custom",
+          "text": "自定义",
+          "i18n": "menu.monitor.custom",
+          "icon": "anticon-skin"
         }
       ]
     },

+ 2 - 1
web-app/src/assets/i18n/zh-CN.json

@@ -12,7 +12,8 @@
       "service": "应用服务监控",
       "db": "数据库监控",
       "os": "操作系统监控",
-      "mid": "中间件监控"
+      "mid": "中间件监控",
+      "custom": "自定义监控"
     },
     "account": {
       "": "个人页",