
com.jonnymatts.prometheus.http.spring.HttpRequestMetricsConfiguration Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of http-metrics-spring-boot Show documentation
Show all versions of http-metrics-spring-boot Show documentation
Spring Boot integration for Prometheus HTTP metrics exporter
The newest version!
package com.jonnymatts.prometheus.http.spring;
import com.jonnymatts.prometheus.configuration.HistogramConfiguration;
import com.jonnymatts.prometheus.http.HttpRequestMetricFilter;
import com.jonnymatts.prometheus.http.configuration.HistogramConfigurationParser;
import io.prometheus.client.CollectorRegistry;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileInputStream;
import static java.lang.String.format;
import static java.nio.charset.Charset.defaultCharset;
/***
* Requires a single {@code CollectorRegistry} bean to present.
* */
@Configuration
public class HttpRequestMetricsConfiguration {
static final String DEFAULT_CONFIG_FILE_PATH = "/config/http-request-metric-config.yaml";
private @Autowired HttpRequestMetricFilter httpRequestMetricFilter;
private @Autowired CollectorRegistry collectorRegistry;
private Environment environment;
public HttpRequestMetricsConfiguration(Environment environment) {
this.environment = environment;
}
@PostConstruct
public void postConstruct() {
httpRequestMetricFilter.register(collectorRegistry);
}
@Bean
public FilterRegistrationBean filterRegistrationBean(HttpRequestMetricFilter httpRequestMetricFilter) {
return new FilterRegistrationBean(httpRequestMetricFilter);
}
@Bean
public HttpRequestMetricFilter httpRequestMetricFilter(HistogramConfigurationParser histogramConfigurationParser) {
final String configFileLocation = environment.getProperty("http.metrics.exporter.config.path", DEFAULT_CONFIG_FILE_PATH);
final File file = new File(configFileLocation);
final boolean fileDoesNotExist = !file.exists();
if(fileDoesNotExist && configFileLocation.equals(DEFAULT_CONFIG_FILE_PATH))
return new HttpRequestMetricFilter();
if(fileDoesNotExist)
throw new IllegalArgumentException(format("Error configuring HTTP metric exporter: file %s does not exist", file.getAbsolutePath()));
return new HttpRequestMetricFilter(parseFile(histogramConfigurationParser, file));
}
@Bean
public HistogramConfigurationParser histogramConfigurationParser() {
return new HistogramConfigurationParser();
}
private HistogramConfiguration parseFile(HistogramConfigurationParser histogramConfigurationParser, File file) {
try {
final String configBody = IOUtils.toString(new FileInputStream(file), defaultCharset());
return histogramConfigurationParser.parse(configBody);
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy