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

houyu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new ce5dde68 BIGTOP-4441: Fix use error prometheus port for metrics 
retrieve
ce5dde68 is described below

commit ce5dde68a82155d97fd9c8b10ba220cde6852e49
Author: Zhiguo Wu <wuzhi...@apache.org>
AuthorDate: Sun Jun 15 14:18:34 2025 +0800

    BIGTOP-4441: Fix use error prometheus port for metrics retrieve
---
 .../manager/dao/repository/ServiceConfigDao.java   |  2 ++
 .../resources/mapper/mysql/ServiceConfigMapper.xml | 12 +++++++++++
 .../mapper/postgresql/ServiceConfigMapper.xml      | 12 +++++++++++
 .../manager/server/proxy/PrometheusProxy.java      | 18 ++++++++++++----
 .../server/service/impl/HostServiceImpl.java       |  4 ----
 .../server/service/impl/MetricsServiceImpl.java    | 24 +++++++++++++++++++++-
 6 files changed, 63 insertions(+), 9 deletions(-)

diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ServiceConfigDao.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ServiceConfigDao.java
index e3cf5151..9a6c87bb 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ServiceConfigDao.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ServiceConfigDao.java
@@ -27,6 +27,8 @@ import java.util.List;
 
 public interface ServiceConfigDao extends BaseDao<ServiceConfigPO> {
 
+    ServiceConfigPO findByServiceIdAndName(@Param("serviceId") Long serviceId, 
@Param("name") String name);
+
     List<ServiceConfigPO> findByServiceId(@Param("serviceId") Long serviceId);
 
     List<ServiceConfigPO> findByClusterId(@Param("clusterId") Long clusterId);
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/ServiceConfigMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/mysql/ServiceConfigMapper.xml
index e9d45579..f36bb011 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/ServiceConfigMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/ServiceConfigMapper.xml
@@ -31,6 +31,18 @@
         ${alias}.id, ${alias}.name, ${alias}.properties_json, 
${alias}.cluster_id, ${alias}.service_id, ${alias}.create_time, 
${alias}.update_time
     </sql>
 
+    <select id="findByServiceIdAndName" 
resultType="org.apache.bigtop.manager.dao.po.ServiceConfigPO">
+        SELECT
+        <include refid="baseColumnsV2">
+            <property name="alias" value="sc"/>
+        </include>, s.name as service_name
+        FROM service_config sc
+        LEFT JOIN service s
+        ON sc.service_id = s.id
+        WHERE sc.service_id = #{serviceId}
+        AND sc.name = #{name}
+    </select>
+
     <select id="findByServiceId" 
resultType="org.apache.bigtop.manager.dao.po.ServiceConfigPO">
         SELECT
         <include refid="baseColumnsV2">
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ServiceConfigMapper.xml
 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ServiceConfigMapper.xml
index 0cabf5ff..8d1c87a2 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ServiceConfigMapper.xml
+++ 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ServiceConfigMapper.xml
@@ -31,6 +31,18 @@
         ${alias}.id, ${alias}.name, ${alias}.properties_json, 
${alias}.cluster_id, ${alias}.service_id, ${alias}.create_time, 
${alias}.update_time
     </sql>
 
+    <select id="findByServiceIdAndName" 
resultType="org.apache.bigtop.manager.dao.po.ServiceConfigPO">
+        SELECT
+        <include refid="baseColumnsV2">
+            <property name="alias" value="sc"/>
+        </include>, s.name as service_name
+        FROM service_config sc
+        LEFT JOIN service s
+        ON sc.service_id = s.id
+        WHERE sc.service_id = #{serviceId}
+        AND sc.name = #{name}
+    </select>
+
     <select id="findByServiceId" 
resultType="org.apache.bigtop.manager.dao.po.ServiceConfigPO">
         SELECT
         <include refid="baseColumnsV2">
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/proxy/PrometheusProxy.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/proxy/PrometheusProxy.java
index 2ccf4f9d..78e1b284 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/proxy/PrometheusProxy.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/proxy/PrometheusProxy.java
@@ -55,8 +55,10 @@ public class PrometheusProxy {
     public static final String DISK_READ = "diskRead";
     public static final String DISK_WRITE = "diskWrite";
 
-    public PrometheusProxy(String prometheusHost) {
-        this.webClient = WebClient.builder().baseUrl(prometheusHost).build();
+    public PrometheusProxy(String prometheusHost, Integer prometheusPort) {
+        this.webClient = WebClient.builder()
+                .baseUrl("http://"; + prometheusHost + ":" + prometheusPort)
+                .build();
     }
     /**
      * Retrieve current data
@@ -286,7 +288,11 @@ public class PrometheusProxy {
                 JsonNode agentCpuMetric = agentCpus.get(0).get("metric");
                 ObjectNode agentInfo = objectMapper.createObjectNode();
                 agentInfo.put("hostname", 
agentCpuMetric.get("hostname").asText());
-                agentInfo.put("cpuInfo", 
agentCpuMetric.get("cpu_info").asText());
+                agentInfo.put(
+                        "cpuInfo",
+                        agentCpuMetric.get("cpu_info") == null
+                                ? ""
+                                : agentCpuMetric.get("cpu_info").asText());
                 agentInfo.put("iPv4addr", 
agentCpuMetric.get("iPv4addr").asText());
                 agentInfo.put("os", agentCpuMetric.get("os").asText());
                 agentInfo.put("architecture", 
agentCpuMetric.get("arch").asText());
@@ -328,7 +334,11 @@ public class PrometheusProxy {
                 // metric
                 JsonNode agentCpuMetrics = agentCpu.get(0).get("metric");
                 agentCpuInfo.put("hostname", 
agentCpuMetrics.get("hostname").asText());
-                agentCpuInfo.put("cpuInfo", 
agentCpuMetrics.get("cpu_info").asText());
+                agentCpuInfo.put(
+                        "cpuInfo",
+                        agentCpuInfo.get("cpu_info") == null
+                                ? ""
+                                : agentCpuInfo.get("cpu_info").asText());
                 agentCpuInfo.put("iPv4addr", 
agentCpuMetrics.get("iPv4addr").asText());
                 agentCpuInfo.put("os", agentCpuMetrics.get("os").asText());
                 agentCpuInfo.put("architecture", 
agentCpuMetrics.get("arch").asText());
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
index 906b741f..4fd2ade6 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
@@ -28,7 +28,6 @@ import org.apache.bigtop.manager.dao.query.ComponentQuery;
 import org.apache.bigtop.manager.dao.query.HostQuery;
 import org.apache.bigtop.manager.dao.repository.ComponentDao;
 import org.apache.bigtop.manager.dao.repository.HostDao;
-import org.apache.bigtop.manager.dao.repository.RepoDao;
 import org.apache.bigtop.manager.dao.repository.ToolDao;
 import org.apache.bigtop.manager.server.enums.ApiExceptionEnum;
 import org.apache.bigtop.manager.server.enums.HealthyStatusEnum;
@@ -72,9 +71,6 @@ import java.util.stream.Collectors;
 @Service
 public class HostServiceImpl implements HostService {
 
-    @Resource
-    private RepoDao repoDao;
-
     @Resource
     private HostDao hostDao;
 
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/MetricsServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/MetricsServiceImpl.java
index ba431bb9..c34721a7 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/MetricsServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/MetricsServiceImpl.java
@@ -20,9 +20,14 @@ package org.apache.bigtop.manager.server.service.impl;
 
 import org.apache.bigtop.manager.dao.po.ComponentPO;
 import org.apache.bigtop.manager.dao.po.HostPO;
+import org.apache.bigtop.manager.dao.po.ServiceConfigPO;
 import org.apache.bigtop.manager.dao.query.ComponentQuery;
 import org.apache.bigtop.manager.dao.repository.ComponentDao;
 import org.apache.bigtop.manager.dao.repository.HostDao;
+import org.apache.bigtop.manager.dao.repository.ServiceConfigDao;
+import org.apache.bigtop.manager.server.model.converter.ServiceConfigConverter;
+import org.apache.bigtop.manager.server.model.dto.PropertyDTO;
+import org.apache.bigtop.manager.server.model.dto.ServiceConfigDTO;
 import org.apache.bigtop.manager.server.proxy.PrometheusProxy;
 import org.apache.bigtop.manager.server.service.MetricsService;
 
@@ -45,6 +50,9 @@ public class MetricsServiceImpl implements MetricsService {
     @Resource
     private ComponentDao componentDao;
 
+    @Resource
+    private ServiceConfigDao serviceConfigDao;
+
     @Override
     public JsonNode queryAgentsHealthyStatus() {
         PrometheusProxy proxy = getProxy();
@@ -88,7 +96,21 @@ public class MetricsServiceImpl implements MetricsService {
         } else {
             ComponentPO componentPO = componentPOList.get(0);
             HostPO hostPO = hostDao.findById(componentPO.getHostId());
-            return new PrometheusProxy(hostPO.getHostname());
+            ServiceConfigPO serviceConfigPO =
+                    
serviceConfigDao.findByServiceIdAndName(componentPO.getServiceId(), 
"prometheus");
+            int port = 9090;
+            ServiceConfigDTO serviceConfigDTO = 
ServiceConfigConverter.INSTANCE.fromPO2DTO(serviceConfigPO);
+            for (PropertyDTO property : serviceConfigDTO.getProperties()) {
+                if ("port".equals(property.getName())) {
+                    port = Integer.parseInt(property.getValue());
+                    if (port <= 0) {
+                        log.warn("Invalid port {} for Prometheus server, using 
default port 9090", port);
+                        port = 9090; // Default Prometheus port
+                    }
+                }
+            }
+
+            return new PrometheusProxy(hostPO.getHostname(), port);
         }
     }
 }

Reply via email to