From d9d830f67d7949b947f22053ec4daca9db03ee10 Mon Sep 17 00:00:00 2001 From: Haotian Zhang Date: Tue, 15 Apr 2025 19:31:44 +0800 Subject: [PATCH] feat:support stat and event report with service discovery. (#1533) --- CHANGELOG.md | 1 + ...ushGatewayEventReporterConfigModifier.java | 5 ++- .../PushGatewayEventReporterProperties.java | 28 +++++++++++++ ...itional-spring-configuration-metadata.json | 12 ++++++ ...atewayEventReporterConfigModifierTest.java | 6 ++- ...ushGatewayEventReporterPropertiesTest.java | 6 ++- .../stat/config/PolarisStatProperties.java | 42 +++++++++++++++++++ .../stat/config/StatConfigModifier.java | 2 + ...itional-spring-configuration-metadata.json | 12 ++++++ .../config/PolarisStatPropertiesTest.java | 4 ++ .../stat/config/StatConfigModifierTest.java | 4 ++ 11 files changed, 118 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index daeaa945e..346ee0583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,3 +12,4 @@ - [fix:fix watch tsf config, fix bean refresh with RefreshScope and ConfigurationProperties.](https://github.com/Tencent/spring-cloud-tencent/pull/1511) - [docs:simplify GitHub Actions.](https://github.com/Tencent/spring-cloud-tencent/pull/1514) - [feat: support config event.](https://github.com/Tencent/spring-cloud-tencent/pull/1532) +- [feat:support stat and event report with service discovery.](https://github.com/Tencent/spring-cloud-tencent/pull/1533) diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifier.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifier.java index 175055afc..ec4b2df44 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifier.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifier.java @@ -20,7 +20,6 @@ package com.tencent.cloud.polaris.context.event; import com.tencent.cloud.common.constant.OrderConstant; import com.tencent.cloud.polaris.context.PolarisConfigModifier; import com.tencent.polaris.api.config.plugin.DefaultPlugins; -import com.tencent.polaris.api.utils.StringUtils; import com.tencent.polaris.factory.config.ConfigurationImpl; import com.tencent.polaris.plugins.event.pushgateway.PushGatewayEventReporterConfig; @@ -43,7 +42,7 @@ public class PushGatewayEventReporterConfigModifier implements PolarisConfigModi .add(DefaultPlugins.PUSH_GATEWAY_EVENT_REPORTER_TYPE); PushGatewayEventReporterConfig pushGatewayEventReporterConfig = new PushGatewayEventReporterConfig(); - if (!properties.isEnabled() || StringUtils.isBlank(properties.getAddress())) { + if (!properties.isEnabled()) { pushGatewayEventReporterConfig.setEnable(false); return; } @@ -53,6 +52,8 @@ public class PushGatewayEventReporterConfigModifier implements PolarisConfigModi pushGatewayEventReporterConfig.setAddress(properties.getAddress()); pushGatewayEventReporterConfig.setEventQueueSize(properties.getEventQueueSize()); pushGatewayEventReporterConfig.setMaxBatchSize(properties.getMaxBatchSize()); + pushGatewayEventReporterConfig.setNamespace(properties.getNamespace()); + pushGatewayEventReporterConfig.setService(properties.getService()); configuration.getGlobal().getEventReporter() .setPluginConfig(DefaultPlugins.PUSH_GATEWAY_EVENT_REPORTER_TYPE, pushGatewayEventReporterConfig); diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterProperties.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterProperties.java index 4854693d8..ab0cbe1ab 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterProperties.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterProperties.java @@ -47,6 +47,16 @@ public class PushGatewayEventReporterProperties { */ private int maxBatchSize = 100; + /** + * Namespace for push gateway event. Default is Polaris. + */ + private String namespace = "Polaris"; + + /** + * Service for push gateway event. Default is polaris.pushgateway. + */ + private String service = "polaris.pushgateway"; + public boolean isEnabled() { return enabled; } @@ -79,6 +89,22 @@ public class PushGatewayEventReporterProperties { this.maxBatchSize = maxBatchSize; } + public String getNamespace() { + return namespace; + } + + public void setNamespace(String namespace) { + this.namespace = namespace; + } + + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service; + } + @Override public String toString() { return "PushGatewayEventReporterProperties{" + @@ -86,6 +112,8 @@ public class PushGatewayEventReporterProperties { ", address='" + address + '\'' + ", eventQueueSize=" + eventQueueSize + ", maxBatchSize=" + maxBatchSize + + ", namespace='" + namespace + '\'' + + ", service='" + service + '\'' + '}'; } } diff --git a/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json index afc371b87..370f5b4c5 100644 --- a/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-tencent-polaris-context/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -74,6 +74,18 @@ "type": "java.lang.Integer", "description": "Max batch size for push gateway event. Default is 100.", "default": 100 + }, + { + "name": "spring.cloud.polaris.event.pushgateway.namespace", + "type": "java.lang.String", + "description": "Namespace for push gateway event. Default is Polaris.", + "defaultValue": "Polaris" + }, + { + "name": "spring.cloud.polaris.event.pushgateway.service", + "type": "java.lang.String", + "description": "Service for push gateway event. Default is polaris.pushgateway.", + "defaultValue": "polaris.pushgateway" } ], "hints": [] diff --git a/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifierTest.java b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifierTest.java index 091bdf6a8..f5acda82b 100644 --- a/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifierTest.java +++ b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterConfigModifierTest.java @@ -41,7 +41,9 @@ public class PushGatewayEventReporterConfigModifierTest { .withPropertyValues("spring.cloud.polaris.event.pushgateway.enabled=true") .withPropertyValues("spring.cloud.polaris.event.pushgateway.address=1.2.3.4:9091") .withPropertyValues("spring.cloud.polaris.event.pushgateway.eventQueueSize=123") - .withPropertyValues("spring.cloud.polaris.event.pushgateway.maxBatchSize=456"); + .withPropertyValues("spring.cloud.polaris.event.pushgateway.maxBatchSize=456") + .withPropertyValues("spring.cloud.polaris.event.pushgateway.namespace=test-namespace") + .withPropertyValues("spring.cloud.polaris.event.pushgateway.service=test-service"); @BeforeEach void setUp() { @@ -59,6 +61,8 @@ public class PushGatewayEventReporterConfigModifierTest { assertThat(config.getAddress()).isEqualTo("1.2.3.4:9091"); assertThat(config.getEventQueueSize()).isEqualTo(123); assertThat(config.getMaxBatchSize()).isEqualTo(456); + assertThat(config.getNamespace()).isEqualTo("test-namespace"); + assertThat(config.getService()).isEqualTo("test-service"); }); } } diff --git a/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterPropertiesTest.java b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterPropertiesTest.java index 112db0722..95366bcef 100644 --- a/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterPropertiesTest.java +++ b/spring-cloud-tencent-polaris-context/src/test/java/com/tencent/cloud/polaris/context/event/PushGatewayEventReporterPropertiesTest.java @@ -39,7 +39,9 @@ public class PushGatewayEventReporterPropertiesTest { .withPropertyValues("spring.cloud.polaris.event.pushgateway.enabled=true") .withPropertyValues("spring.cloud.polaris.event.pushgateway.address=1.2.3.4:9091") .withPropertyValues("spring.cloud.polaris.event.pushgateway.eventQueueSize=123") - .withPropertyValues("spring.cloud.polaris.event.pushgateway.maxBatchSize=456"); + .withPropertyValues("spring.cloud.polaris.event.pushgateway.maxBatchSize=456") + .withPropertyValues("spring.cloud.polaris.event.pushgateway.namespace=test-namespace") + .withPropertyValues("spring.cloud.polaris.event.pushgateway.service=test-service"); @BeforeEach void setUp() { @@ -54,6 +56,8 @@ public class PushGatewayEventReporterPropertiesTest { assertThat(properties.getAddress()).isEqualTo("1.2.3.4:9091"); assertThat(properties.getEventQueueSize()).isEqualTo(123); assertThat(properties.getMaxBatchSize()).isEqualTo(456); + assertThat(properties.getNamespace()).isEqualTo("test-namespace"); + assertThat(properties.getService()).isEqualTo("test-service"); }); } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatProperties.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatProperties.java index 8e917ca81..02a0c94d0 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatProperties.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatProperties.java @@ -50,6 +50,18 @@ public class PolarisStatProperties { @Value("${spring.cloud.polaris.stat.pushgateway.address:}") private String pushGatewayAddress; + /** + * PushGateway namespace. + */ + @Value("${spring.cloud.polaris.stat.pushgateway.namespace:Polaris}") + private String statNamespace = "Polaris"; + + /** + * PushGateway service. + */ + @Value("${spring.cloud.polaris.stat.pushgateway.service:polaris.pushgateway}") + private String statService = "polaris.pushgateway"; + /** * Push metrics interval. * unit: milliseconds default 60s. @@ -95,6 +107,22 @@ public class PolarisStatProperties { this.pushGatewayAddress = pushGatewayAddress; } + public String getStatNamespace() { + return statNamespace; + } + + public void setStatNamespace(String statNamespace) { + this.statNamespace = statNamespace; + } + + public String getStatService() { + return statService; + } + + public void setStatService(String statService) { + this.statService = statService; + } + public Long getPushGatewayPushInterval() { return pushGatewayPushInterval; } @@ -110,4 +138,18 @@ public class PolarisStatProperties { public void setOpenGzip(Boolean openGzip) { this.openGzip = openGzip; } + + @Override + public String toString() { + return "PolarisStatProperties{" + + "enabled=" + enabled + + ", path='" + path + '\'' + + ", pushGatewayEnabled=" + pushGatewayEnabled + + ", pushGatewayAddress='" + pushGatewayAddress + '\'' + + ", statNamespace='" + statNamespace + '\'' + + ", statService='" + statService + '\'' + + ", pushGatewayPushInterval=" + pushGatewayPushInterval + + ", openGzip=" + openGzip + + '}'; + } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifier.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifier.java index 6ab3d5a01..cd550142b 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifier.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifier.java @@ -51,6 +51,8 @@ public class StatConfigModifier implements PolarisConfigModifier { // push gateway prometheusHandlerConfig.setType("push"); prometheusHandlerConfig.setAddress(polarisStatProperties.getPushGatewayAddress()); + prometheusHandlerConfig.setNamespace(polarisStatProperties.getStatNamespace()); + prometheusHandlerConfig.setService(polarisStatProperties.getStatService()); prometheusHandlerConfig.setPushInterval(polarisStatProperties.getPushGatewayPushInterval()); prometheusHandlerConfig.setOpenGzip(polarisStatProperties.getOpenGzip()); } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-tencent-rpc-enhancement/src/main/resources/META-INF/additional-spring-configuration-metadata.json index e0af74e67..8b283025d 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-tencent-rpc-enhancement/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -79,6 +79,18 @@ "description": "If push gateway gzip open. default false.", "sourceType": "com.tencent.cloud.rpc.enhancement.stat.config.PolarisStatProperties", "defaultValue": false + }, + { + "name": "spring.cloud.polaris.stat.pushgateway.namespace", + "type": "java.lang.String", + "description": "PushGateway namespace.", + "defaultValue": "Polaris" + }, + { + "name": "spring.cloud.polaris.stat.pushgateway.service", + "type": "java.lang.String", + "description": "PushGateway service.", + "defaultValue": "polaris.pushgateway" } ] } diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatPropertiesTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatPropertiesTest.java index fc0aeb86f..4fda1442d 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatPropertiesTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/PolarisStatPropertiesTest.java @@ -38,6 +38,8 @@ public class PolarisStatPropertiesTest { .withPropertyValues("spring.cloud.polaris.stat.path=/xxx") .withPropertyValues("spring.cloud.polaris.stat.pushgateway.enabled=true") .withPropertyValues("spring.cloud.polaris.stat.pushgateway.address=127.0.0.1:9091") + .withPropertyValues("spring.cloud.polaris.stat.pushgateway.namespace=test-namespace") + .withPropertyValues("spring.cloud.polaris.stat.pushgateway.service=test-service") .withPropertyValues("spring.cloud.polaris.stat.pushgateway.push-interval=1000") .withPropertyValues("spring.cloud.gateway.enabled=false"); @@ -51,6 +53,8 @@ public class PolarisStatPropertiesTest { assertThat(polarisStatProperties.getPath()).isEqualTo("/xxx"); assertThat(polarisStatProperties.isPushGatewayEnabled()).isTrue(); assertThat(polarisStatProperties.getPushGatewayAddress()).isEqualTo("127.0.0.1:9091"); + assertThat(polarisStatProperties.getStatNamespace()).isEqualTo("test-namespace"); + assertThat(polarisStatProperties.getStatService()).isEqualTo("test-service"); assertThat(polarisStatProperties.getPushGatewayPushInterval().toString()).isEqualTo("1000"); }); } diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java index f18b5f29b..e2efef11b 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java @@ -55,6 +55,8 @@ public class StatConfigModifierTest { .withPropertyValues("spring.cloud.polaris.stat.pushgateway.address=127.0.0.1:9091") .withPropertyValues("spring.cloud.polaris.stat.pushgateway.push-interval=1000") .withPropertyValues("spring.cloud.polaris.stat.pushgateway.open-gzip=true") + .withPropertyValues("spring.cloud.polaris.stat.pushgateway.namespace=test-namespace") + .withPropertyValues("spring.cloud.polaris.stat.pushgateway.service=test-service") .withPropertyValues("spring.application.name=test") .withPropertyValues("spring.cloud.gateway.enabled=false"); @@ -93,6 +95,8 @@ public class StatConfigModifierTest { assertThat(prometheusHandlerConfig.getAddress()).isEqualTo("127.0.0.1:9091"); assertThat(prometheusHandlerConfig.getPushInterval()).isEqualTo(1000); assertThat(prometheusHandlerConfig.isOpenGzip()).isTrue(); + assertThat(prometheusHandlerConfig.getNamespace()).isEqualTo("test-namespace"); + assertThat(prometheusHandlerConfig.getService()).isEqualTo("test-service"); }); }