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 39dc8c7f BIGTOP-4505: Add charts template for ZooKeeper (#276)
39dc8c7f is described below

commit 39dc8c7fed652dca506ae997f82ecf57833965e4
Author: Zhiguo Wu <[email protected]>
AuthorDate: Thu Oct 9 19:12:26 2025 +0800

    BIGTOP-4505: Add charts template for ZooKeeper (#276)
---
 .../server/controller/MetricsController.java       | 20 +++++---
 .../ChartValueTypeEnum.java}                       | 25 +++++++---
 .../dto/ServiceChartDTO.java}                      | 21 +++++---
 .../vo/ServiceMetricsChartVO.java}                 | 18 ++++---
 .../vo/ServiceMetricsSeriesVO.java}                | 16 +++---
 .../vo/ServiceMetricsVO.java}                      | 14 +++---
 .../manager/server/prometheus/PrometheusProxy.java | 58 +++++++++++++++++++++-
 .../manager/server/service/MetricsService.java     |  7 ++-
 .../server/service/impl/MetricsServiceImpl.java    | 31 ++++++++++--
 .../bigtop/manager/server/utils/StackUtils.java    | 15 ++++++
 .../bigtop/3.3.0/services/zookeeper/charts.json    | 34 +++++++++++++
 .../server/controller/MetricsControllerTest.java   |  8 +--
 .../stack/bigtop/v3_3_0/hadoop/HadoopParams.java   | 12 +++--
 .../stack/bigtop/v3_3_0/hadoop/HadoopSetup.java    |  2 +-
 14 files changed, 228 insertions(+), 53 deletions(-)

diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/MetricsController.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/MetricsController.java
index 65fb6a1e..8a26cdb0 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/MetricsController.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/MetricsController.java
@@ -20,6 +20,7 @@ package org.apache.bigtop.manager.server.controller;
 
 import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
 import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import org.apache.bigtop.manager.server.model.vo.ServiceMetricsVO;
 import org.apache.bigtop.manager.server.service.MetricsService;
 import org.apache.bigtop.manager.server.utils.ResponseEntity;
 
@@ -42,17 +43,24 @@ public class MetricsController {
     @Resource
     private MetricsService metricsService;
 
-    @Operation(summary = "host info", description = "host info query")
+    @Operation(summary = "host metrics", description = "host metrics")
     @GetMapping("/hosts/{id}")
-    public ResponseEntity<HostMetricsVO> queryAgentInfo(
+    public ResponseEntity<HostMetricsVO> hostMetrics(
             @RequestParam(value = "interval", defaultValue = "1m") String 
interval, @PathVariable Long id) {
-        return ResponseEntity.success(metricsService.queryAgentsInfo(id, 
interval));
+        return ResponseEntity.success(metricsService.hostMetrics(id, 
interval));
     }
 
-    @Operation(summary = "cluster info", description = "cluster info query")
+    @Operation(summary = "cluster metrics", description = "cluster metrics")
     @GetMapping("/clusters/{id}")
-    public ResponseEntity<ClusterMetricsVO> queryCluster(
+    public ResponseEntity<ClusterMetricsVO> clusterMetrics(
             @RequestParam(value = "interval", defaultValue = "1m") String 
interval, @PathVariable Long id) {
-        return ResponseEntity.success(metricsService.queryClustersInfo(id, 
interval));
+        return ResponseEntity.success(metricsService.clusterMetrics(id, 
interval));
+    }
+
+    @Operation(summary = "service metrics", description = "service metrics")
+    @GetMapping("/services/{id}")
+    public ResponseEntity<ServiceMetricsVO> serviceMetrics(
+            @RequestParam(value = "interval", defaultValue = "1m") String 
interval, @PathVariable Long id) {
+        return ResponseEntity.success(metricsService.serviceMetrics(id, 
interval));
     }
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/enums/ChartValueTypeEnum.java
similarity index 60%
copy from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
copy to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/enums/ChartValueTypeEnum.java
index 8e25da1a..678d48be 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/enums/ChartValueTypeEnum.java
@@ -16,14 +16,27 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.bigtop.manager.server.service;
+package org.apache.bigtop.manager.server.enums;
 
-import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
-import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
 
-public interface MetricsService {
+public enum ChartValueTypeEnum {
+    NUMBER,
+    PERCENT,
+    BYTE,
+    MILLISECOND,
+    BPS, // Byte per second
+    NPS // Number per second
+;
 
-    HostMetricsVO queryAgentsInfo(Long id, String interval);
+    @JsonCreator
+    public static ChartValueTypeEnum fromString(String value) {
+        return ChartValueTypeEnum.valueOf(value.toUpperCase());
+    }
 
-    ClusterMetricsVO queryClustersInfo(Long clusterId, String interval);
+    @JsonValue
+    public String toLowerCase() {
+        return name().toLowerCase();
+    }
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/ServiceChartDTO.java
similarity index 68%
copy from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
copy to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/ServiceChartDTO.java
index 8e25da1a..819ebc5e 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/ServiceChartDTO.java
@@ -16,14 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.bigtop.manager.server.service;
+package org.apache.bigtop.manager.server.model.dto;
 
-import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
-import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import org.apache.bigtop.manager.server.enums.ChartValueTypeEnum;
 
-public interface MetricsService {
+import lombok.Data;
 
-    HostMetricsVO queryAgentsInfo(Long id, String interval);
+@Data
+public class ServiceChartDTO {
 
-    ClusterMetricsVO queryClustersInfo(Long clusterId, String interval);
+    private String title;
+
+    private ChartValueTypeEnum valueType;
+
+    // line, number etc.
+    private String type;
+
+    private String dataExpression;
+
+    private Integer dataScale = 0;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsChartVO.java
similarity index 70%
copy from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
copy to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsChartVO.java
index 8e25da1a..017d1b1b 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsChartVO.java
@@ -16,14 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.bigtop.manager.server.service;
+package org.apache.bigtop.manager.server.model.vo;
 
-import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
-import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import org.apache.bigtop.manager.server.enums.ChartValueTypeEnum;
 
-public interface MetricsService {
+import lombok.Data;
 
-    HostMetricsVO queryAgentsInfo(Long id, String interval);
+import java.util.List;
 
-    ClusterMetricsVO queryClustersInfo(Long clusterId, String interval);
+@Data
+public class ServiceMetricsChartVO {
+
+    private String title;
+
+    private ChartValueTypeEnum valueType;
+
+    private List<ServiceMetricsSeriesVO> series;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsSeriesVO.java
similarity index 70%
copy from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
copy to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsSeriesVO.java
index 8e25da1a..910e0ffd 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsSeriesVO.java
@@ -16,14 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.bigtop.manager.server.service;
+package org.apache.bigtop.manager.server.model.vo;
 
-import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
-import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import lombok.Data;
 
-public interface MetricsService {
+import java.util.List;
 
-    HostMetricsVO queryAgentsInfo(Long id, String interval);
+@Data
+public class ServiceMetricsSeriesVO {
 
-    ClusterMetricsVO queryClustersInfo(Long clusterId, String interval);
+    private String name;
+
+    private String type;
+
+    private List<String> data;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsVO.java
similarity index 70%
copy from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
copy to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsVO.java
index 8e25da1a..5bcd4963 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ServiceMetricsVO.java
@@ -16,14 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.bigtop.manager.server.service;
+package org.apache.bigtop.manager.server.model.vo;
 
-import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
-import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import lombok.Data;
 
-public interface MetricsService {
+import java.util.List;
 
-    HostMetricsVO queryAgentsInfo(Long id, String interval);
+@Data
+public class ServiceMetricsVO {
 
-    ClusterMetricsVO queryClustersInfo(Long clusterId, String interval);
+    private List<ServiceMetricsChartVO> charts;
+
+    private List<String> timestamps;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusProxy.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusProxy.java
index a41cfc0a..776658a5 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusProxy.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusProxy.java
@@ -18,8 +18,13 @@
  */
 package org.apache.bigtop.manager.server.prometheus;
 
+import org.apache.bigtop.manager.server.model.dto.ServiceChartDTO;
 import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
 import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import org.apache.bigtop.manager.server.model.vo.ServiceMetricsChartVO;
+import org.apache.bigtop.manager.server.model.vo.ServiceMetricsSeriesVO;
+import org.apache.bigtop.manager.server.model.vo.ServiceMetricsVO;
+import org.apache.bigtop.manager.server.utils.StackUtils;
 
 import org.springframework.http.MediaType;
 import org.springframework.util.CollectionUtils;
@@ -93,7 +98,7 @@ public class PrometheusProxy {
                 .block();
     }
 
-    public HostMetricsVO queryAgentsInfo(String agentIpv4, String interval) {
+    public HostMetricsVO queryHostMetrics(String agentIpv4, String interval) {
         timestampCache.set(getTimestampsList(processInternal(interval)));
 
         HostMetricsVO res = new HostMetricsVO();
@@ -147,7 +152,7 @@ public class PrometheusProxy {
         return res;
     }
 
-    public ClusterMetricsVO queryClustersInfo(List<String> agentIpv4s, String 
interval) {
+    public ClusterMetricsVO queryClusterMetrics(List<String> agentIpv4s, 
String interval) {
         timestampCache.set(getTimestampsList(processInternal(interval)));
 
         ClusterMetricsVO res = new ClusterMetricsVO();
@@ -253,6 +258,55 @@ public class PrometheusProxy {
         return res;
     }
 
+    public ServiceMetricsVO queryServiceMetrics(String clusterName, String 
serviceName, String interval) {
+        List<ServiceChartDTO> charts = 
StackUtils.SERVICE_CHARTS_MAP.get(serviceName);
+        if (CollectionUtils.isEmpty(charts)) {
+            return new ServiceMetricsVO();
+        }
+
+        List<String> timestamps = getTimestampsList(processInternal(interval));
+        ServiceMetricsVO res = new ServiceMetricsVO();
+        List<ServiceMetricsChartVO> resultCharts = new ArrayList<>();
+        for (ServiceChartDTO chart : charts) {
+            String params = chart.getDataExpression().replace("$cluster", 
clusterName);
+            PrometheusResponse response = queryRange(
+                    params,
+                    timestamps.get(0),
+                    timestamps.get(timestamps.size() - 1),
+                    number2Param(processInternal(interval)));
+
+            ServiceMetricsChartVO metrics = new ServiceMetricsChartVO();
+            List<ServiceMetricsSeriesVO> series = new ArrayList<>();
+            for (PrometheusResult result : response.getData().getResult()) {
+                List<String> emptyList = new 
ArrayList<>(Collections.nCopies(timestamps.size(), null));
+                String key = result.getMetric().get("instance");
+                for (List<String> value : result.getValues()) {
+                    String timestamp = value.get(0);
+                    int index = timestamps.indexOf(timestamp);
+                    String roundValue = new BigDecimal(value.get(1))
+                            .setScale(chart.getDataScale(), 
RoundingMode.HALF_UP)
+                            .toString();
+                    emptyList.set(index, roundValue);
+                }
+
+                ServiceMetricsSeriesVO seriesItem = new 
ServiceMetricsSeriesVO();
+                seriesItem.setName(key);
+                seriesItem.setData(emptyList);
+                seriesItem.setType(chart.getType());
+                series.add(seriesItem);
+            }
+
+            metrics.setSeries(series);
+            metrics.setTitle(chart.getTitle());
+            metrics.setValueType(chart.getValueType());
+            resultCharts.add(metrics);
+        }
+
+        res.setCharts(resultCharts);
+        res.setTimestamps(timestamps);
+        return res;
+    }
+
     public Map<String, BigDecimal> retrieveAgentCpu(String iPv4addr) {
         Map<String, BigDecimal> map = new HashMap<>();
         String params = 
String.format("agent_host_monitoring_cpu{iPv4addr=\"%s\"}", iPv4addr);
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
index 8e25da1a..4e9517f0 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java
@@ -20,10 +20,13 @@ package org.apache.bigtop.manager.server.service;
 
 import org.apache.bigtop.manager.server.model.vo.ClusterMetricsVO;
 import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import org.apache.bigtop.manager.server.model.vo.ServiceMetricsVO;
 
 public interface MetricsService {
 
-    HostMetricsVO queryAgentsInfo(Long id, String interval);
+    HostMetricsVO hostMetrics(Long id, String interval);
 
-    ClusterMetricsVO queryClustersInfo(Long clusterId, String interval);
+    ClusterMetricsVO clusterMetrics(Long clusterId, String interval);
+
+    ServiceMetricsVO serviceMetrics(Long serviceId, String interval);
 }
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 10519aef..976091a3 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
@@ -18,18 +18,23 @@
  */
 package org.apache.bigtop.manager.server.service.impl;
 
+import org.apache.bigtop.manager.dao.po.ClusterPO;
 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.po.ServicePO;
 import org.apache.bigtop.manager.dao.query.ComponentQuery;
+import org.apache.bigtop.manager.dao.repository.ClusterDao;
 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.dao.repository.ServiceDao;
 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.model.vo.ClusterMetricsVO;
 import org.apache.bigtop.manager.server.model.vo.HostMetricsVO;
+import org.apache.bigtop.manager.server.model.vo.ServiceMetricsVO;
 import org.apache.bigtop.manager.server.prometheus.PrometheusProxy;
 import org.apache.bigtop.manager.server.service.MetricsService;
 
@@ -44,28 +49,34 @@ import java.util.List;
 @Service
 public class MetricsServiceImpl implements MetricsService {
 
+    @Resource
+    private ClusterDao clusterDao;
+
     @Resource
     private HostDao hostDao;
 
     @Resource
     private ComponentDao componentDao;
 
+    @Resource
+    private ServiceDao serviceDao;
+
     @Resource
     private ServiceConfigDao serviceConfigDao;
 
     @Override
-    public HostMetricsVO queryAgentsInfo(Long id, String interval) {
+    public HostMetricsVO hostMetrics(Long id, String interval) {
         PrometheusProxy proxy = getProxy();
         if (proxy == null) {
             return new HostMetricsVO();
         }
 
         String ipv4 = hostDao.findById(id).getIpv4();
-        return proxy.queryAgentsInfo(ipv4, interval);
+        return proxy.queryHostMetrics(ipv4, interval);
     }
 
     @Override
-    public ClusterMetricsVO queryClustersInfo(Long clusterId, String interval) 
{
+    public ClusterMetricsVO clusterMetrics(Long clusterId, String interval) {
         PrometheusProxy proxy = getProxy();
         if (proxy == null) {
             return new ClusterMetricsVO();
@@ -74,7 +85,19 @@ public class MetricsServiceImpl implements MetricsService {
         List<String> ipv4s = hostDao.findAllByClusterId(clusterId).stream()
                 .map(HostPO::getIpv4)
                 .toList();
-        return proxy.queryClustersInfo(ipv4s, interval);
+        return proxy.queryClusterMetrics(ipv4s, interval);
+    }
+
+    @Override
+    public ServiceMetricsVO serviceMetrics(Long serviceId, String interval) {
+        PrometheusProxy proxy = getProxy();
+        if (proxy == null) {
+            return new ServiceMetricsVO();
+        }
+
+        ServicePO servicePO = serviceDao.findById(serviceId);
+        ClusterPO clusterPO = clusterDao.findById(servicePO.getClusterId());
+        return proxy.queryServiceMetrics(clusterPO.getName(), 
servicePO.getName(), interval);
     }
 
     private PrometheusProxy getProxy() {
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/StackUtils.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/StackUtils.java
index edd38fd6..85467cd1 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/StackUtils.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/StackUtils.java
@@ -29,6 +29,7 @@ import 
org.apache.bigtop.manager.server.exception.ServerException;
 import org.apache.bigtop.manager.server.model.converter.ServiceConverter;
 import org.apache.bigtop.manager.server.model.dto.ComponentDTO;
 import org.apache.bigtop.manager.server.model.dto.PropertyDTO;
+import org.apache.bigtop.manager.server.model.dto.ServiceChartDTO;
 import org.apache.bigtop.manager.server.model.dto.ServiceConfigDTO;
 import org.apache.bigtop.manager.server.model.dto.ServiceDTO;
 import org.apache.bigtop.manager.server.model.dto.StackDTO;
@@ -41,6 +42,7 @@ import 
org.apache.bigtop.manager.server.stack.xml.ServiceMetainfoXml;
 import org.apache.commons.lang3.EnumUtils;
 import org.apache.commons.lang3.StringUtils;
 
+import com.fasterxml.jackson.core.type.TypeReference;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -70,6 +72,8 @@ public class StackUtils {
 
     private static final String DEPENDENCY_FILE_NAME = "order.json";
 
+    private static final String CHARTS_FILE_NAME = "charts.json";
+
     public static final Map<String, List<ServiceConfigDTO>> SERVICE_CONFIG_MAP 
= new HashMap<>();
 
     public static final Map<String, Map<String, String>> SERVICE_TEMPLATE_MAP 
= new HashMap<>();
@@ -78,6 +82,8 @@ public class StackUtils {
 
     public static final DAG<String, ComponentCommandWrapper, DagGraphEdge> DAG 
= new DAG<>();
 
+    public static final Map<String, List<ServiceChartDTO>> SERVICE_CHARTS_MAP 
= new HashMap<>();
+
     private static boolean parsed = false;
 
     public static synchronized void parseStack() {
@@ -122,6 +128,7 @@ public class StackUtils {
                 parseServiceTemplates(file, serviceDTO.getName());
 
                 parseDag(file);
+                parseCharts(file, serviceDTO.getName());
             }
         }
 
@@ -205,6 +212,14 @@ public class StackUtils {
         }
     }
 
+    private static void parseCharts(File file, String serviceName) {
+        File chartsFile = new File(file.getAbsolutePath(), CHARTS_FILE_NAME);
+        if (chartsFile.exists()) {
+            List<ServiceChartDTO> charts = JsonUtils.readFromFile(chartsFile, 
new TypeReference<>() {});
+            SERVICE_CHARTS_MAP.put(serviceName, charts);
+        }
+    }
+
     private static ComponentCommandWrapper getCommandWrapper(String 
roleCommand) {
         String[] split = roleCommand.split(ROLE_COMMAND_SPLIT);
         String role = split[0];
diff --git 
a/bigtop-manager-server/src/main/resources/stacks/bigtop/3.3.0/services/zookeeper/charts.json
 
b/bigtop-manager-server/src/main/resources/stacks/bigtop/3.3.0/services/zookeeper/charts.json
new file mode 100644
index 00000000..3582f281
--- /dev/null
+++ 
b/bigtop-manager-server/src/main/resources/stacks/bigtop/3.3.0/services/zookeeper/charts.json
@@ -0,0 +1,34 @@
+[
+  {
+    "title": "Max Latency",
+    "valueType": "millisecond",
+    "type": "line",
+    "dataExpression": "max_latency{cluster=\"$cluster\"}"
+  },
+  {
+    "title": "Min Latency",
+    "valueType": "millisecond",
+    "type": "line",
+    "dataExpression": "min_latency{cluster=\"$cluster\"}"
+  },
+  {
+    "title": "Avg Latency",
+    "valueType": "millisecond",
+    "type": "line",
+    "dataExpression": "avg_latency{cluster=\"$cluster\"}"
+  },
+  {
+    "title": "Packets Received",
+    "valueType": "nps",
+    "type": "line",
+    "dataExpression": "increase(packets_received{cluster=\"$cluster\"}[1m])",
+    "dataScale": 2
+  },
+  {
+    "title": "Packets Sent",
+    "valueType": "nps",
+    "type": "line",
+    "dataExpression": "increase(packets_sent{cluster=\"$cluster\"}[1m])",
+    "dataScale": 2
+  }
+]
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/MetricsControllerTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/MetricsControllerTest.java
index b99d30ab..00b71953 100644
--- 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/MetricsControllerTest.java
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/MetricsControllerTest.java
@@ -69,9 +69,9 @@ class MetricsControllerTest {
         mockResponse.setCpuUsageCur("50%");
         mockResponse.setMemoryUsageCur("70%");
 
-        when(metricsService.queryAgentsInfo(hostId, 
interval)).thenReturn(mockResponse);
+        when(metricsService.hostMetrics(hostId, 
interval)).thenReturn(mockResponse);
 
-        ResponseEntity<HostMetricsVO> response = 
metricsController.queryAgentInfo(interval, hostId);
+        ResponseEntity<HostMetricsVO> response = 
metricsController.hostMetrics(interval, hostId);
 
         assertEquals("Mocked message", response.getMessage());
         assertTrue(response.isSuccess());
@@ -86,9 +86,9 @@ class MetricsControllerTest {
         mockResponse.setCpuUsageCur("60%");
         mockResponse.setMemoryUsageCur("80%");
 
-        when(metricsService.queryClustersInfo(clusterId, 
interval)).thenReturn(mockResponse);
+        when(metricsService.clusterMetrics(clusterId, 
interval)).thenReturn(mockResponse);
 
-        ResponseEntity<ClusterMetricsVO> response = 
metricsController.queryCluster(interval, clusterId);
+        ResponseEntity<ClusterMetricsVO> response = 
metricsController.clusterMetrics(interval, clusterId);
 
         assertEquals("Mocked message", response.getMessage());
         assertTrue(response.isSuccess());
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopParams.java
 
b/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopParams.java
index 22c27739..9c1798a5 100644
--- 
a/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopParams.java
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopParams.java
@@ -58,6 +58,8 @@ public class HadoopParams extends BigtopParams {
     private final String nodeManagerPidFile = hadoopPidDir + 
"/hadoop-hadoop-nodemanager.pid";
     private final String historyServerPidFile = hadoopPidDir + 
"/hadoop-hadoop-historyserver.pid";
 
+    private String hadoopConfContent;
+
     private String dfsDataDir;
     private String dfsNameNodeDir;
     private String dfsNameNodeCheckPointDir;
@@ -70,8 +72,8 @@ public class HadoopParams extends BigtopParams {
 
     public HadoopParams(ComponentCommandPayload componentCommandPayload) {
         super(componentCommandPayload);
-        globalParamsMap.put("hdfs_user", user());
-        globalParamsMap.put("hdfs_group", group());
+        globalParamsMap.put("hadoop_user", user());
+        globalParamsMap.put("hadoop_group", group());
         globalParamsMap.put("datanode_hosts", 
LocalSettings.componentHosts("datanode"));
         globalParamsMap.put("java_home", javaHome());
         globalParamsMap.put("hadoop_home", serviceHome());
@@ -80,9 +82,11 @@ public class HadoopParams extends BigtopParams {
         globalParamsMap.put("exclude_hosts", new ArrayList<>());
     }
 
-    public String hadoopLimits() {
+    @GlobalParams
+    public Map<String, Object> hadoopLimits() {
         Map<String, Object> hadoopConf = 
LocalSettings.configurations(getServiceName(), "hadoop.conf");
-        return (String) hadoopConf.get("content");
+        hadoopConfContent = hadoopConf.get("content").toString();
+        return hadoopConf;
     }
 
     public String workers() {
diff --git 
a/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopSetup.java
 
b/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopSetup.java
index c96b185d..a15dcf72 100644
--- 
a/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopSetup.java
+++ 
b/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/hadoop/HadoopSetup.java
@@ -109,7 +109,7 @@ public class HadoopSetup {
                 hadoopParams.getHadoopPidDir(), hadoopUser, hadoopGroup, 
Constants.PERMISSION_755, true);
 
         LinuxFileUtils.toFileByTemplate(
-                hadoopParams.hadoopLimits(),
+                hadoopParams.getHadoopConfContent(),
                 MessageFormat.format("{0}/hadoop.conf", 
HadoopParams.LIMITS_CONF_DIR),
                 Constants.ROOT_USER,
                 Constants.ROOT_USER,

Reply via email to