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

wuzhiguo 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 bad99f18 BIGTOP-4319: Add clusterHosts info to infra services (#141)
bad99f18 is described below

commit bad99f18114c2e88a8d4d7200dccc5bb3f3ad64d
Author: haopeng <[email protected]>
AuthorDate: Tue Jan 7 11:31:51 2025 +0800

    BIGTOP-4319: Add clusterHosts info to infra services (#141)
---
 .../message/entity/payload/CommandPayload.java     |  7 +++
 .../org/apache/bigtop/manager/dao/po/HostPO.java   |  3 ++
 .../src/main/resources/mapper/mysql/HostMapper.xml |  6 +--
 .../resources/mapper/postgresql/HostMapper.xml     |  6 +--
 .../command/stage/AbstractComponentStage.java      | 17 +++++++
 .../server/command/task/AbstractComponentTask.java |  4 +-
 .../bigtop/manager/server/model/vo/HostVO.java     |  2 +
 .../manager/stack/infra/param/InfraParams.java     |  7 +++
 .../infra/v1_0_0/prometheus/PrometheusParams.java  | 52 +++++++++++++---------
 .../infra/v1_0_0/prometheus/PrometheusSetup.java   |  8 +---
 10 files changed, 78 insertions(+), 34 deletions(-)

diff --git 
a/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/payload/CommandPayload.java
 
b/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/payload/CommandPayload.java
index 6f9402ae..65214b9f 100644
--- 
a/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/payload/CommandPayload.java
+++ 
b/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/payload/CommandPayload.java
@@ -27,6 +27,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 
 import java.util.List;
+import java.util.Map;
 
 @Data
 @ToString(callSuper = true)
@@ -49,4 +50,10 @@ public class CommandPayload extends BasePayload {
     private String componentName;
 
     private List<PackageSpecificInfo> packageSpecifics;
+
+    /**
+     * This field is exclusively used for Prometheus and Grafana within the 
infra services.
+     * Includes cluster and corresponding hostname.
+     */
+    private Map<String, List<String>> clusterHosts;
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java
index 9d685ab0..93f0bf86 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java
@@ -108,6 +108,9 @@ public class HostPO extends BasePO implements Serializable {
     @Transient
     private String clusterName;
 
+    @Transient
+    private String clusterDisplayName;
+
     @Transient
     private Integer componentNum;
 }
diff --git a/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml
index 9a16c413..2d27411f 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml
@@ -42,7 +42,7 @@
         select
         <include refid="baseColumnsV2">
             <property name="alias" value="h"/>
-        </include>, c.display_name as cluster_name, count(comp.id) as 
component_num
+        </include>, c.name as cluster_name, c.display_name as 
cluster_display_name, count(comp.id) as component_num
         from host h
         left join cluster c on h.cluster_id = c.id
         left join component comp on h.id = comp.host_id
@@ -67,7 +67,7 @@
         select
         <include refid="baseColumnsV2">
             <property name="alias" value="h"/>
-        </include>, c.display_name as cluster_name, count(comp.id) as 
component_num
+        </include>, c.name as cluster_name, c.display_name as 
cluster_display_name, count(comp.id) as component_num
         from host h
         left join cluster c on h.cluster_id = c.id
         left join component comp on h.id = comp.host_id
@@ -95,7 +95,7 @@
         <include refid="baseColumnsV2">
             <property name="alias" value="h"/>
         </include>
-        ,clus.display_name as cluster_name
+        , clus.name as cluster_name, clus.display_name as cluster_display_name
         from host h
         left join cluster clus
         on h.cluster_id = clus.id
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml
index 42e2235e..2b1fdb9c 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml
@@ -42,7 +42,7 @@
         select
         <include refid="baseColumnsV2">
             <property name="alias" value="h"/>
-        </include>, c.display_name as cluster_name, count(comp.id) as 
component_num
+        </include>, c.name as cluster_name, c.display_name as 
cluster_display_name, count(comp.id) as component_num
         from host h
         left join cluster c on h.cluster_id = c.id
         left join component comp on h.id = comp.host_id
@@ -67,7 +67,7 @@
         select
         <include refid="baseColumnsV2">
             <property name="alias" value="h"/>
-        </include>, c.display_name as cluster_name, count(comp.id) as 
component_num
+        </include>, c.name as cluster_name, c.display_name as 
cluster_display_name, count(comp.id) as component_num
         from host h
         left join cluster c on h.cluster_id = c.id
         left join component comp on h.id = comp.host_id
@@ -95,7 +95,7 @@
         <include refid="baseColumnsV2">
             <property name="alias" value="h"/>
         </include>
-        ,clus.display_name as cluster_name
+        , clus.name as cluster_name, clus.display_name as cluster_display_name
         from
         host h
         left join cluster clus
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractComponentStage.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractComponentStage.java
index 29c86a8d..634b8554 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractComponentStage.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractComponentStage.java
@@ -19,13 +19,16 @@
 package org.apache.bigtop.manager.server.command.stage;
 
 import org.apache.bigtop.manager.dao.po.ClusterPO;
+import org.apache.bigtop.manager.dao.po.HostPO;
 import org.apache.bigtop.manager.dao.repository.ClusterDao;
 import org.apache.bigtop.manager.server.command.task.TaskContext;
 import org.apache.bigtop.manager.server.holder.SpringContextHolder;
 import org.apache.bigtop.manager.server.model.dto.ComponentDTO;
 import org.apache.bigtop.manager.server.model.dto.ServiceDTO;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 public abstract class AbstractComponentStage extends AbstractStage {
@@ -77,7 +80,21 @@ public abstract class AbstractComponentStage extends 
AbstractStage {
 
         Map<String, Object> properties = new HashMap<>();
         properties.put("packageSpecifics", serviceDTO.getPackageSpecifics());
+        properties.put("clusterHosts", getClusterHosts());
         taskContext.setProperties(properties);
         return taskContext;
     }
+
+    private Map<String, List<String>> getClusterHosts() {
+        Map<String, List<String>> clusterHosts = new HashMap<>();
+        for (ClusterPO clusterPO : clusterDao.findAll()) {
+            List<String> hosts = new ArrayList<>();
+            for (HostPO hostPO : 
hostDao.findAllByClusterId(clusterPO.getId())) {
+                String host = hostPO.getHostname();
+                hosts.add(host);
+            }
+            clusterHosts.put(clusterPO.getName(), hosts);
+        }
+        return clusterHosts;
+    }
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractComponentTask.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractComponentTask.java
index 4071ae66..b2d0f377 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractComponentTask.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractComponentTask.java
@@ -67,7 +67,9 @@ public abstract class AbstractComponentTask extends 
AbstractTask {
 
         commandPayload.setPackageSpecifics(
                 convertPackageSpecificInfo((List<PackageSpecificDTO>) 
properties.get("packageSpecifics")));
-
+        if (stackDTO.getStackName().equals("infra")) {
+            commandPayload.setClusterHosts((Map<String, List<String>>) 
properties.get("clusterHosts"));
+        }
         CommandRequest.Builder builder = CommandRequest.newBuilder();
         builder.setType(CommandType.COMPONENT);
         builder.setPayload(JsonUtils.writeAsString(commandPayload));
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/HostVO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/HostVO.java
index f79cab2f..92c77f67 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/HostVO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/HostVO.java
@@ -71,5 +71,7 @@ public class HostVO {
 
     private String clusterName;
 
+    private String clusterDisplayName;
+
     private Integer componentNum;
 }
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/param/InfraParams.java
 
b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/param/InfraParams.java
index 94934abb..a5701b84 100644
--- 
a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/param/InfraParams.java
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/param/InfraParams.java
@@ -28,6 +28,8 @@ import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
 import java.io.File;
+import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @NoArgsConstructor
@@ -72,4 +74,9 @@ public abstract class InfraParams extends BaseParams {
 
         return parentPath + "/infras";
     }
+
+    public Map<String, List<String>> getClusterHosts() {
+        // In Component Status stage, clusterHosts is null
+        return commandPayload.getClusterHosts();
+    }
 }
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java
 
b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java
index d9af54a3..e8efa718 100644
--- 
a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusParams.java
@@ -44,6 +44,7 @@ public class PrometheusParams extends InfraParams {
     protected final String PROMETHEUS_SELF_JOB_NAME = "prometheus";
     protected final String BM_AGENT_JOB_NAME = "bm-agent";
     protected final String BM_AGENT_PORT = "8081";
+    protected final String AGENT_TARGET_LABEL = "cluster";
 
     private Map<String, Object> prometheusScrapeJob;
     private Map<String, Object> agentScrapeJob;
@@ -55,6 +56,7 @@ public class PrometheusParams extends InfraParams {
 
     public PrometheusParams(CommandPayload commandPayload) {
         super(commandPayload);
+        setAgentScrapeJob();
         scrapeJobs = new ArrayList<>();
         scrapeJobs.add(prometheusScrapeJob);
         scrapeJobs.add(agentScrapeJob);
@@ -75,15 +77,6 @@ public class PrometheusParams extends InfraParams {
         return "prometheus";
     }
 
-    protected List<String> getAllHost() {
-        List<String> ips = LocalSettings.hosts().get("all");
-        List<String> hosts = new ArrayList<>();
-        for (String ip : ips) {
-            hosts.add(MessageFormat.format("{0}:{1}", ip, BM_AGENT_PORT));
-        }
-        return hosts;
-    }
-
     @GlobalParams
     public Map<String, Object> prometheusJob() {
         Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "prometheus");
@@ -91,22 +84,15 @@ public class PrometheusParams extends InfraParams {
         Map<String, Object> job = new HashMap<>();
         job.put("name", PROMETHEUS_SELF_JOB_NAME);
         job.put("targets_file", targetsConfigFile(PROMETHEUS_SELF_JOB_NAME));
-        job.put("targets_list", List.of(MessageFormat.format("localhost:{0}", 
prometheusPort)));
+
+        Map<String, Object> target = new HashMap<>();
+        target.put("targets", List.of(MessageFormat.format("localhost:{0}", 
prometheusPort)));
+        job.put("targets_list", List.of(target));
+
         prometheusScrapeJob = job;
         return configuration;
     }
 
-    @GlobalParams
-    public Map<String, Object> agentJob() {
-        Map<String, Object> job = new HashMap<>();
-        job.put("name", BM_AGENT_JOB_NAME);
-        job.put("targets_file", targetsConfigFile(BM_AGENT_JOB_NAME));
-        job.put("targets_list", getAllHost());
-        job.put("metrics_path", "/actuator/prometheus");
-        agentScrapeJob = job;
-        return LocalSettings.configurations(getServiceName(), "prometheus");
-    }
-
     @GlobalParams
     public Map<String, Object> configs() {
         Map<String, Object> configuration = 
LocalSettings.configurations(getServiceName(), "prometheus");
@@ -127,4 +113,28 @@ public class PrometheusParams extends InfraParams {
     public String listenAddress() {
         return MessageFormat.format("0.0.0.0:{0}", prometheusPort);
     }
+
+    public void setAgentScrapeJob() {
+        agentScrapeJob = new HashMap<>();
+        agentScrapeJob.put("name", BM_AGENT_JOB_NAME);
+        agentScrapeJob.put("targets_file", 
targetsConfigFile(BM_AGENT_JOB_NAME));
+        agentScrapeJob.put("metrics_path", "/actuator/prometheus");
+
+        List<Map<String, Object>> agentTargets = new ArrayList<>();
+        Map<String, List<String>> clusterHosts = getClusterHosts();
+        if (clusterHosts != null) {
+            clusterHosts.forEach((cluster, hosts) -> {
+                Map<String, Object> agentTarget = new HashMap<>();
+                List<String> targets = new ArrayList<>();
+                for (String host : hosts) {
+                    targets.add(MessageFormat.format("{0}:{1}", host, 
BM_AGENT_PORT));
+                }
+                agentTarget.put("targets", targets);
+                agentTarget.put("labels", Map.of(AGENT_TARGET_LABEL, cluster));
+                agentTargets.add(agentTarget);
+            });
+        }
+
+        agentScrapeJob.put("targets_list", agentTargets);
+    }
 }
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusSetup.java
 
b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusSetup.java
index 89d015de..a67e7f49 100644
--- 
a/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusSetup.java
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-infra/src/main/java/org/apache/bigtop/manager/stack/infra/v1_0_0/prometheus/PrometheusSetup.java
@@ -29,15 +29,12 @@ import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 @Slf4j
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class PrometheusSetup {
 
-    @SuppressWarnings("unchecked")
     public static ShellResult config(Params params) {
         PrometheusParams prometheusParams = (PrometheusParams) params;
         String user = prometheusParams.user();
@@ -65,16 +62,15 @@ public class PrometheusSetup {
 
         for (int i = 0; i < prometheusParams.getScrapeJobs().size(); i++) {
             Map<String, Object> job = prometheusParams.getScrapeJobs().get(i);
-            Map<String, List<String>> targets = new HashMap<>();
-            targets.put("targets", (List<String>) job.get("targets_list"));
             LinuxFileUtils.toFile(
                     ConfigType.JSON,
                     (String) job.get("targets_file"),
                     user,
                     group,
                     Constants.PERMISSION_644,
-                    List.of(targets));
+                    job.get("targets_list"));
         }
+
         return ShellResult.success("Prometheus Configure success!");
     }
 }

Reply via email to