001package io.prometheus.client.spring.boot; 002 003import io.prometheus.client.exporter.common.TextFormat; 004import org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter; 005import org.springframework.boot.context.properties.ConfigurationProperties; 006import org.springframework.http.ResponseEntity; 007import org.springframework.web.bind.annotation.RequestHeader; 008import org.springframework.web.bind.annotation.RequestMapping; 009import org.springframework.web.bind.annotation.RequestMethod; 010import org.springframework.web.bind.annotation.RequestParam; 011import org.springframework.web.bind.annotation.ResponseBody; 012 013import java.util.Set; 014 015import static org.springframework.http.HttpHeaders.CONTENT_TYPE; 016 017@ConfigurationProperties("endpoints.prometheus") 018public class PrometheusMvcEndpoint extends EndpointMvcAdapter { 019 020 private final PrometheusEndpoint delgate; 021 022 public PrometheusMvcEndpoint(PrometheusEndpoint delegate) { 023 super(delegate); 024 this.delgate = delegate; 025 } 026 027 @RequestMapping( 028 method = {RequestMethod.GET}, 029 produces = { "*/*" } 030 ) 031 @ResponseBody 032 public ResponseEntity value( 033 @RequestParam(value = "name[]", required = false, defaultValue = "") Set<String> name, 034 @RequestHeader(value = "Accept", required = false, defaultValue = "") String accept) { 035 if (!getDelegate().isEnabled()) { 036 // Shouldn't happen - MVC endpoint shouldn't be registered when delegate's 037 // disabled 038 return getDisabledResponse(); 039 } 040 041 String contentType = TextFormat.chooseContentType(accept); 042 String result = delgate.writeRegistry(name, contentType); 043 return ResponseEntity.ok() 044 .header(CONTENT_TYPE, contentType) 045 .body(result); 046 } 047}