Project

General

Profile

1
package eu.dnetlib.data.search.micrometer;
2

    
3
import io.micrometer.core.aop.TimedAspect;
4
import io.micrometer.core.instrument.Clock;
5
import io.micrometer.core.instrument.MeterRegistry;
6
import io.micrometer.core.instrument.Tag;
7
import io.micrometer.core.instrument.Tags;
8
import io.micrometer.prometheus.PrometheusConfig;
9
import io.micrometer.prometheus.PrometheusMeterRegistry;
10
import io.micrometer.spring.web.servlet.WebMvcTags;
11
import io.micrometer.spring.web.servlet.WebMvcTagsProvider;
12
import io.prometheus.client.CollectorRegistry;
13
import org.springframework.context.annotation.Bean;
14
import org.springframework.context.annotation.ComponentScan;
15
import org.springframework.context.annotation.Configuration;
16
import org.springframework.stereotype.Component;
17
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
18

    
19
import javax.servlet.http.HttpServletRequest;
20
import javax.servlet.http.HttpServletResponse;
21
import java.util.ArrayList;
22

    
23
@ComponentScan
24
@Configuration
25
@Component
26
@EnableWebMvc
27
public class MicrometerComponent {
28

    
29
    @Bean
30
    public Clock micrometerClock() {
31
        return Clock.SYSTEM;
32
    }
33

    
34
    @Bean
35
    public PrometheusConfig prometheusConfig() {
36
        return PrometheusConfig.DEFAULT;
37
    }
38

    
39
    @Bean
40
    public PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig config, CollectorRegistry collectorRegistry,
41
                                                           Clock clock) {
42
        return new PrometheusMeterRegistry(config, collectorRegistry, clock);
43
    }
44

    
45
    @Bean
46
    public CollectorRegistry collectorRegistry() {
47
        return new CollectorRegistry(true);
48
    }
49

    
50
    @Bean
51
    public TimedAspect timedAspect(MeterRegistry registry) {
52
        return new TimedAspect(registry);
53
    }
54

    
55
    @Bean
56
    public WebMvcTagsProvider webMvcTagsProvider() {
57
        return new WebMvcTagsProvider() {
58
            @Override
59
            public Iterable<Tag> httpLongRequestTags(HttpServletRequest httpServletRequest, Object o) {
60
                return new ArrayList<>();
61
            }
62

    
63
            @Override
64
            public Iterable<Tag> httpRequestTags(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Throwable throwable) {
65
                Tag uriTag = Tag.of("status", String.valueOf(httpServletResponse.getStatus()));
66
                return Tags.of(WebMvcTags.method(httpServletRequest), uriTag, WebMvcTags.exception(throwable), WebMvcTags.status(httpServletResponse));
67
            }
68
        };
69
    }
70

    
71
   /*@Bean
72
    public MappedInterceptor myInterceptor(PrometheusMeterRegistry prometheusMeterRegistry) {
73
        return new MappedInterceptor(null, new PrometheusRequestTimerInterceptor(prometheusMeterRegistry));
74
    }*/
75

    
76
}
(3-3/4)