All Downloads are FREE. Search and download functionalities are using the official Maven repository.

helper.metrics.aws.micrometer-metric-publisher.mustache Maven / Gradle / Ivy

Go to download

Gradle plugin to create a clean application in Java that already works, It follows our best practices!

There is a newer version: 3.20.10
Show newest version
package {{package}}.metrics.aws;

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tag;
{{#lombok}}
import lombok.AllArgsConstructor;
{{/lombok}}
import org.springframework.stereotype.Component;
import software.amazon.awssdk.metrics.MetricCollection;
import software.amazon.awssdk.metrics.MetricPublisher;

import java.time.Duration;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;

@Component
{{#lombok}}
@AllArgsConstructor
{{/lombok}}
public class MicrometerMetricPublisher implements MetricPublisher {
    private final ExecutorService service = Executors.newFixedThreadPool(10);
    private final MeterRegistry registry;
    {{^lombok}}

    public MicrometerMetricPublisher(MeterRegistry registry) {
        this.registry = registry;
    }
    {{/lombok}}

    @Override
    public void publish(MetricCollection metricCollection) {
        service.submit(() -> {
            List tags = buildTags(metricCollection);
            metricCollection.stream()
                    .filter(record -> record.value() instanceof Duration || record.value() instanceof Integer)
                    .forEach(record -> {
                        if (record.value() instanceof Duration) {
                            registry.timer(record.metric().name(), tags).record((Duration) record.value());
                        } else if (record.value() instanceof Integer) {
                            registry.counter(record.metric().name(), tags).increment((Integer) record.value());
                        }
                    });
        });
    }

    @Override
    public void close() {

    }

    private List buildTags(MetricCollection metricCollection) {
        return metricCollection.stream()
                .filter(record -> record.value() instanceof String || record.value() instanceof Boolean)
                .map(record -> Tag.of(record.metric().name(), record.value().toString()))
                .collect(Collectors.toList());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy