跳转至

HealthMetricsFetcherController(健康指标抓取)

为管理控制台监控页提供上游 actuator 健康指标代理:按指定 fetchUrl 抓取健康总览或单个 metric 详情,并返回 Spring Cloud DiscoveryClient 注册的微服务实例清单(lite 模式下回退一条占位实例)。

  • 类级基址${myapps.context-path.manager:}/api/monitor(完整路径:{manager-context}/api/monitor<相对路径>
  • Tag:控制器未声明 @Tag(源码无 @Tag 注解)
  • 控制器源码obpm-manager/src/main/java/cn/myapps/manager/authtime/controller/monitor/HealthMetricsFetcherController.java
  • 公共说明
  • 控制器**不**继承 BaseAuthTimeController(直接返回 new Resource(0, "success", <data>))。统一 Resource 字段 errcode/errmsg/data/errors,结构见 ../index.md「统一响应结构」。
  • 三端点**无 try/catch**,异常时由 Spring 默认异常处理(HTTP 500,无统一 Resource 体)。
  • 成功返回的 Resource 由控制器直接构造:new Resource(0, "success", <data>),故 errmsg 字段固定为 "success"(不同于多数控制器使用的 "ok")。
  • 鉴权说明见 index.md「鉴权说明」(adminToken JWT,/api/monitor/* 不在白名单)。

1. 抓取健康指标

按调用方传入的 fetchUrl(通常是上游 actuator /actuator/health 完整 URL)抓取并返回健康总览(healthMetricsFetcher.fetchHealthMetrics,返回值经 JSON.parse 归一化)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/healtMetrics(完整:{manager-context}/api/monitor/healtMetrics
  • 鉴权:是(需管理员 adminToken,详见 index.md「鉴权说明」)
  • Tag:(控制器未声明 @Tag

注:路径 healtMetrics 是源码拼写(缺一个 h,源码 @GetMapping("/healtMetrics")),按源码如实记录。

请求参数

参数名 位置 类型 必填 说明
fetchUrl query string 上游 actuator 健康端点完整 URL(由调用方提供)

请求示例

GET /api/monitor/healtMetrics?fetchUrl=http://192.168.1.10:8083/actuator/health HTTP/1.1

响应

结构:统一 ResourcedataObjectJSON.parse(上游响应),结构与上游 actuator 返回一致,通常为 { "status": "UP", "components": { ... } })。

成功示例

{
  "errcode": 0,
  "errmsg": "success",
  "data": {
    "status": "UP",
    "components": { "db": { "status": "UP", "details": { ... } } }
  },
  "errors": null
}
失败示例: 本端点无 try/catch,异常时由 Spring 默认异常处理(HTTP 500,无统一 Resource 体)。


2. 获取 metric 详情

按上游 fetchUrl(通常是 actuator 根)+ metric 名抓取单个 metric 详情(healthMetricsFetcher.fetchHealthMetricDetail)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/metricDetail/{metric}(完整:{manager-context}/api/monitor/metricDetail/{metric}
  • 鉴权:是
  • Tag:(控制器未声明 @Tag

请求参数

参数名 位置 类型 必填 说明
metric path string metric 名(如 system.cpu.usage
fetchUrl query string 上游 actuator 基址 URL

请求示例

GET /api/monitor/metricDetail/system.cpu.usage?fetchUrl=http://192.168.1.10:8083/actuator HTTP/1.1

响应

结构:统一 ResourcedataObjectJSON.parse(上游响应),结构与上游 actuator metric 详情一致,如 { "name": "system.cpu.usage", "measurements": [ ... ] })。

成功示例

{
  "errcode": 0,
  "errmsg": "success",
  "data": {
    "name": "system.cpu.usage",
    "measurements": [ { "statistic": "VALUE", "value": 0.123 } ]
  },
  "errors": null
}
失败示例: 本端点无 try/catch,异常时由 Spring 默认异常处理(HTTP 500,无统一 Resource 体)。


3. 获取已注册服务列表

返回 Spring Cloud DiscoveryClient 注册的微服务实例清单(Map<serviceId, List<ServiceInstance>>)。若注册中心无任何服务(lite 统一部署下),构造一条 obpm-lite 占位实例返回。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/services(完整:{manager-context}/api/monitor/services
  • 鉴权:是
  • Tag:(控制器未声明 @Tag

请求参数

无。

请求示例

GET /api/monitor/services HTTP/1.1

响应

结构:统一 ResourcedataMap<String, List<ServiceInstance>>,键为服务 id(obpm-runtime / obpm-usercenter / lite 模式下 obpm-lite),值为实例数组。ServiceInstance 序列化字段:

字段 类型 说明
serviceId string 服务 id
instanceId string 实例 id
host string 主机
port int 端口
uri string 服务 URI(scheme://host:port)
scheme string 协议(如 http
secure boolean 是否 HTTPS
metadata object 元数据(如 contextPath),lite 模式回退项固定为 { "contextPath": "/manager" }

成功示例(微服务部署):

{
  "errcode": 0,
  "errmsg": "success",
  "data": {
    "obpm-runtime": [
      {
        "serviceId": "obpm-runtime",
        "instanceId": "192.168.1.10:8083",
        "host": "192.168.1.10",
        "port": 8083,
        "uri": "http://192.168.1.10:8083",
        "scheme": "http",
        "secure": false,
        "metadata": { "contextPath": "/" }
      }
    ]
  },
  "errors": null
}
成功示例(lite 统一部署,占位回退):
{
  "errcode": 0,
  "errmsg": "success",
  "data": {
    "obpm-lite": [
      {
        "serviceId": "obpm-lite",
        "instanceId": "obpm-lite-instance-id",
        "host": "manager.example.com",
        "port": 8087,
        "uri": "http://manager.example.com:8087",
        "scheme": "http",
        "secure": false,
        "metadata": { "contextPath": "/manager" }
      }
    ]
  },
  "errors": null
}
失败示例: 本端点无 try/catch,异常时由 Spring 默认异常处理(HTTP 500,无统一 Resource 体)。