feat: support overrideHost configuration for ratelimit, event reporter and stat modules

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Haotian Zhang <928016560@qq.com>
pull/1804/head
Haotian Zhang 1 month ago
parent fe5a32bb56
commit bc969e883b

@ -50,6 +50,8 @@ public class PolarisRateLimitProperties {
private String limiterAddresses;
private String limiterOverrideHost;
private long remoteTaskInterval = 30L;
String getLimiterAddresses() {
@ -60,6 +62,14 @@ public class PolarisRateLimitProperties {
this.limiterAddresses = limiterAddresses;
}
String getLimiterOverrideHost() {
return limiterOverrideHost;
}
void setLimiterOverrideHost(String limiterOverrideHost) {
this.limiterOverrideHost = limiterOverrideHost;
}
public String getRejectRequestTips() {
return rejectRequestTips;
}

@ -43,6 +43,7 @@ public class RateLimitConfigModifier implements PolarisConfigModifier {
configuration.getProvider().getRateLimit()
.setLimiterAddresses(AddressUtils.parseHostPortList(polarisRateLimitProperties.getLimiterAddresses()));
configuration.getProvider().getRateLimit().setRemoteTaskIntervalMilli(polarisRateLimitProperties.getRemoteTaskInterval());
configuration.getProvider().getRateLimit().setLimiterOverrideHost(polarisRateLimitProperties.getLimiterOverrideHost());
}
@Override

@ -40,6 +40,11 @@
"type": "java.lang.Long",
"defaultValue": "30",
"description": "Remote limiter service task base interval. Unit: ms."
},
{
"name": "spring.cloud.polaris.ratelimit.limiterOverrideHost",
"type": "java.lang.String",
"description": "Override host for remote limiter service. When set, all limiter instance IPs will be replaced with this value while preserving original ports."
}
]
}

@ -34,7 +34,8 @@ public class PolarisRateLimitConfigModifierTest {
.withConfiguration(AutoConfigurations.of(TestApplication.class))
.withPropertyValues("spring.cloud.polaris.ratelimit.maxQueuingTime=500")
.withPropertyValues("spring.cloud.polaris.ratelimit.limiterAddresses=127.0.0.1:8080,127.0.0.1:8081")
.withPropertyValues("spring.cloud.polaris.ratelimit.remoteTaskInterval=50");
.withPropertyValues("spring.cloud.polaris.ratelimit.remoteTaskInterval=50")
.withPropertyValues("spring.cloud.polaris.ratelimit.limiterOverrideHost=127.0.0.1");
@BeforeEach
void setUp() {
@ -52,6 +53,7 @@ public class PolarisRateLimitConfigModifierTest {
assertThat(config.getLimiterAddresses().get(1)).isEqualTo("127.0.0.1:8081");
assertThat(config.getMaxQueuingTime()).isEqualTo(500);
assertThat(config.getRemoteTaskIntervalMilli()).isEqualTo(50);
assertThat(config.getLimiterOverrideHost()).isEqualTo("127.0.0.1");
});
}

@ -54,6 +54,7 @@ public class PolarisRateLimitPropertiesTest {
assertThat(polarisRateLimitProperties.getRemoteTaskInterval()).isEqualTo(50L);
List<String> limiterAddresses = AddressUtils.parseHostPortList(polarisRateLimitProperties.getLimiterAddresses());
assertThat(limiterAddresses.get(0)).isEqualTo("127.0.0.1:8080");
assertThat(polarisRateLimitProperties.getLimiterOverrideHost()).isEqualTo("127.0.0.1");
}

@ -4,3 +4,4 @@ spring.cloud.polaris.ratelimit.rejectHttpCode=419
spring.cloud.polaris.ratelimit.maxQueuingTime=500
spring.cloud.polaris.ratelimit.remoteTaskInterval=50
spring.cloud.polaris.ratelimit.limiterAddresses=127.0.0.1:8080,127.0.0.1:8081
spring.cloud.polaris.ratelimit.limiterOverrideHost=127.0.0.1

@ -55,6 +55,7 @@ public class PushGatewayEventReporterConfigModifier implements PolarisConfigModi
pushGatewayEventReporterConfig.setMaxBatchSize(properties.getMaxBatchSize());
pushGatewayEventReporterConfig.setNamespace(properties.getNamespace());
pushGatewayEventReporterConfig.setService(properties.getService());
pushGatewayEventReporterConfig.setOverrideHost(properties.getOverrideHost());
configuration.getGlobal().getEventReporter()
.setPluginConfig(DefaultPlugins.PUSH_GATEWAY_EVENT_REPORTER_TYPE, pushGatewayEventReporterConfig);

@ -58,6 +58,11 @@ public class PushGatewayEventReporterProperties {
*/
private String service = "polaris.pushgateway";
/**
* Override host for push gateway event reporter.
*/
private String overrideHost;
public boolean isEnabled() {
return enabled;
}
@ -106,6 +111,14 @@ public class PushGatewayEventReporterProperties {
this.service = service;
}
public String getOverrideHost() {
return overrideHost;
}
public void setOverrideHost(String overrideHost) {
this.overrideHost = overrideHost;
}
@Override
public String toString() {
return "PushGatewayEventReporterProperties{" +
@ -115,6 +128,7 @@ public class PushGatewayEventReporterProperties {
", maxBatchSize=" + maxBatchSize +
", namespace='" + namespace + '\'' +
", service='" + service + '\'' +
", overrideHost='" + overrideHost + '\'' +
'}';
}
}

@ -43,7 +43,8 @@ public class PushGatewayEventReporterConfigModifierTest {
.withPropertyValues("spring.cloud.polaris.event.pushgateway.eventQueueSize=123")
.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");
.withPropertyValues("spring.cloud.polaris.event.pushgateway.service=test-service")
.withPropertyValues("spring.cloud.polaris.event.pushgateway.overrideHost=127.0.0.1");
@BeforeEach
void setUp() {
@ -64,6 +65,7 @@ public class PushGatewayEventReporterConfigModifierTest {
assertThat(config.getMaxBatchSize()).isEqualTo(456);
assertThat(config.getNamespace()).isEqualTo("test-namespace");
assertThat(config.getService()).isEqualTo("test-service");
assertThat(config.getOverrideHost()).isEqualTo("127.0.0.1");
});
}
}

@ -44,7 +44,8 @@ public class PushGatewayEventReporterPropertiesTest {
.withPropertyValues("spring.cloud.polaris.event.pushgateway.eventQueueSize=123")
.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");
.withPropertyValues("spring.cloud.polaris.event.pushgateway.service=test-service")
.withPropertyValues("spring.cloud.polaris.event.pushgateway.overrideHost=127.0.0.1");
@BeforeEach
void setUp() {
@ -63,6 +64,7 @@ public class PushGatewayEventReporterPropertiesTest {
assertThat(properties.getMaxBatchSize()).isEqualTo(456);
assertThat(properties.getNamespace()).isEqualTo("test-namespace");
assertThat(properties.getService()).isEqualTo("test-service");
assertThat(properties.getOverrideHost()).isEqualTo("127.0.0.1");
});
}
}

@ -83,6 +83,12 @@ public class PolarisStatProperties {
*/
private List<String> pathRegexList = new ArrayList<>();
/**
* Override host for prometheus push gateway.
*/
@Value("${spring.cloud.polaris.stat.pushgateway.override-host:}")
private String pushGatewayOverrideHost;
public boolean isEnabled() {
return enabled;
}
@ -155,6 +161,14 @@ public class PolarisStatProperties {
this.pathRegexList = pathRegexList;
}
public String getPushGatewayOverrideHost() {
return pushGatewayOverrideHost;
}
public void setPushGatewayOverrideHost(String pushGatewayOverrideHost) {
this.pushGatewayOverrideHost = pushGatewayOverrideHost;
}
@Override
public String toString() {
return "PolarisStatProperties{" +
@ -167,6 +181,7 @@ public class PolarisStatProperties {
", pushGatewayPushInterval=" + pushGatewayPushInterval +
", openGzip=" + openGzip +
", pathRegexList=" + pathRegexList +
", pushGatewayOverrideHost='" + pushGatewayOverrideHost + '\'' +
'}';
}
}

@ -57,6 +57,7 @@ public class StatConfigModifier implements PolarisConfigModifier {
prometheusHandlerConfig.setService(polarisStatProperties.getStatService());
prometheusHandlerConfig.setPushInterval(polarisStatProperties.getPushGatewayPushInterval());
prometheusHandlerConfig.setOpenGzip(polarisStatProperties.getOpenGzip());
prometheusHandlerConfig.setOverrideHost(polarisStatProperties.getPushGatewayOverrideHost());
}
else {
// pull metrics

@ -44,6 +44,7 @@ public class PolarisStatPropertiesTest {
.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.polaris.stat.pushgateway.override-host=127.0.0.1")
.withPropertyValues("spring.cloud.gateway.enabled=false");
@Test
@ -61,6 +62,7 @@ public class PolarisStatPropertiesTest {
assertThat(polarisStatProperties.getStatNamespace()).isEqualTo("test-namespace");
assertThat(polarisStatProperties.getStatService()).isEqualTo("test-service");
assertThat(polarisStatProperties.getPushGatewayPushInterval().toString()).isEqualTo("1000");
assertThat(polarisStatProperties.getPushGatewayOverrideHost()).isEqualTo("127.0.0.1");
});
}

@ -57,6 +57,7 @@ public class StatConfigModifierTest {
.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.cloud.polaris.stat.pushgateway.override-host=127.0.0.1")
.withPropertyValues("spring.application.name=test")
.withPropertyValues("spring.cloud.gateway.enabled=false");
@ -97,6 +98,7 @@ public class StatConfigModifierTest {
assertThat(prometheusHandlerConfig.isOpenGzip()).isTrue();
assertThat(prometheusHandlerConfig.getNamespace()).isEqualTo("test-namespace");
assertThat(prometheusHandlerConfig.getService()).isEqualTo("test-service");
assertThat(prometheusHandlerConfig.getOverrideHost()).isEqualTo("127.0.0.1");
});
}

Loading…
Cancel
Save