From eed4e9ea56c5e07b46df42d7998482fb99bb0feb Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Mon, 4 Mar 2019 11:42:56 +0200 Subject: [PATCH] Permit use of https for configuring Prometheus push gateway See gh-16084 --- ...metheusMetricsExportAutoConfiguration.java | 17 +++++++++--- ...usMetricsExportAutoConfigurationTests.java | 27 +++++++++++++++++-- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java index 03f43a8dfd..7f15df7194 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.java @@ -16,6 +16,8 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus; +import java.net.MalformedURLException; +import java.net.URL; import java.time.Duration; import java.util.Map; @@ -119,13 +121,22 @@ public class PrometheusMetricsExportAutoConfiguration { PrometheusProperties prometheusProperties, Environment environment) { PrometheusProperties.Pushgateway properties = prometheusProperties .getPushgateway(); - PushGateway pushGateway = new PushGateway(properties.getBaseUrl()); Duration pushRate = properties.getPushRate(); String job = getJob(properties, environment); Map groupingKey = properties.getGroupingKey(); ShutdownOperation shutdownOperation = properties.getShutdownOperation(); - return new PrometheusPushGatewayManager(pushGateway, collectorRegistry, - pushRate, job, groupingKey, shutdownOperation); + return new PrometheusPushGatewayManager( + getPushGateway(properties.getBaseUrl()), collectorRegistry, pushRate, + job, groupingKey, shutdownOperation); + } + + private PushGateway getPushGateway(String url) { + try { + return new PushGateway(new URL(url)); + } + catch (MalformedURLException ex) { + return new PushGateway(url); + } } private String getJob(PrometheusProperties.Pushgateway properties, diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfigurationTests.java index b3b110389e..18305538a0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfigurationTests.java @@ -26,10 +26,12 @@ import org.springframework.boot.actuate.autoconfigure.web.server.ManagementConte import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusPushGatewayManager; import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScrapeEndpoint; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.test.util.ReflectionTestUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -151,8 +153,29 @@ public class PrometheusMetricsExportAutoConfigurationTests { .withPropertyValues( "management.metrics.export.prometheus.pushgateway.enabled=true") .withUserConfiguration(BaseConfiguration.class) - .run((context) -> assertThat(context) - .hasSingleBean(PrometheusPushGatewayManager.class)); + .run((context) -> hasGatewayURL(context, + "http://localhost:9091/metrics/job/")); + } + + @Test + public void withCustomPushGatewayURL() { + this.contextRunner + .withConfiguration( + AutoConfigurations.of(ManagementContextAutoConfiguration.class)) + .withPropertyValues( + "management.metrics.export.prometheus.pushgateway.enabled=true", + "management.metrics.export.prometheus.pushgateway.base-url=https://localhost:8080/push") + .withUserConfiguration(BaseConfiguration.class) + .run((context) -> hasGatewayURL(context, + "https://localhost:8080/push/metrics/job/")); + } + + private void hasGatewayURL(AssertableApplicationContext context, String url) { + assertThat(context).hasSingleBean(PrometheusPushGatewayManager.class); + PrometheusPushGatewayManager gatewayManager = context + .getBean(PrometheusPushGatewayManager.class); + Object pushGateway = ReflectionTestUtils.getField(gatewayManager, "pushGateway"); + assertThat(pushGateway).hasFieldOrPropertyWithValue("gatewayBaseURL", url); } @Configuration(proxyBeanMethods = false)