BIGTOP-4464: Optimize cluster/host metrics structure#240
Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR refactors the metrics subsystem to use strongly-typed VO classes instead of raw JsonNode, updates related controllers, services, and tests, and optimizes cluster service to include a service count.
- Switch metrics endpoints and service/DAO layers from JsonNode to HostMetricsVO and ClusterMetricsVO.
- Replace old ProxyUtils-based JSON handling with a new PrometheusProxy under
server/prometheususing PrometheusResponse/PrometheusResult. - Add
countByClusterIdto ServiceDao/mapper and update ClusterServiceImpl to settotalService; adjust mappers to remove outdated service joins.
Reviewed Changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ProxyUtilsTest.java | Removed legacy JSON-based tests for ProxyUtils |
| bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/ClusterServiceTest.java | Replaced RepoDao mock with ServiceDao and test totalService logic |
| bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/MetricsControllerTest.java | Updated tests to use HostMetricsVO and ClusterMetricsVO |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/ProxyUtils.java | Deleted obsolete ProxyUtils |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/MetricsServiceImpl.java | Changed return types to VO and removed JsonNode handling |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java | Added service count via ServiceDao, set totalService |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/MetricsService.java | Updated interface methods to return VO types |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/proxy/PrometheusProxy.java | Removed old proxy and migrated references to new package |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusResult.java | Added new result model |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusResponse.java | Added new response model |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusData.java | Added new data model |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusProxy.java | Introduced new PrometheusProxy implementation |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/HostMetricsVO.java | Added HostMetricsVO |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ClusterMetricsVO.java | Added ClusterMetricsVO |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/command/ServiceCommandReq.java | Removed @NotNull from installed to adjust validation |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/MetricsController.java | Updated endpoints to return VO and adjusted mappings |
| bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/helper/ComponentStageHelper.java | Modified INIT and PREPARE to use only the first hostname |
| bigtop-manager-dao/src/main/resources/mapper/postgresql/ServiceMapper.xml | Added countByClusterId select |
| bigtop-manager-dao/src/main/resources/mapper/postgresql/ClusterMapper.xml | Removed service join and total_service |
| bigtop-manager-dao/src/main/resources/mapper/mysql/ServiceMapper.xml | Added countByClusterId select |
| bigtop-manager-dao/src/main/resources/mapper/mysql/ClusterMapper.xml | Removed service join and total_service |
| bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ServiceDao.java | Declared countByClusterId method |
| bigtop-manager-agent/src/main/java/org/apache/bigtop/manager/agent/grpc/interceptor/TaskInterceptor.java | Added taskRequest flag to minimize MDC/cache leakage |
Comments suppressed due to low confidence (2)
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/command/ServiceCommandReq.java:40
- [nitpick] Removing @NotNull from the
installedfield disables null-check validation for a required parameter; consider retaining a constraint or handling null explicitly to prevent null pointer errors.
private Boolean installed;
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/prometheus/PrometheusProxy.java:44
- [nitpick] Consider adding unit tests for timestamp cache behavior, HTTP response parsing, and VO conversion in PrometheusProxy to ensure metrics are parsed and formatted correctly.
public class PrometheusProxy {
| stageContext = createStageContext(componentName, List.of(hostnames.get(0)), commandDTO); | ||
| stages.add(new ComponentInitStage(stageContext)); | ||
| break; | ||
| case PREPARE: | ||
| // Prepare phase runs after component started, client component shouldn't create this. | ||
| if (!StackUtils.isClientComponent(componentName)) { | ||
| stageContext = createStageContext(componentName, hostnames, commandDTO); | ||
| stageContext = createStageContext(componentName, List.of(hostnames.get(0)), commandDTO); |
There was a problem hiding this comment.
Restricting INIT and PREPARE stages to only the first hostname may skip running stages on other hosts; consider passing the full hostnames list or explicitly documenting that change.
No description provided.