
helper.metrics.aws.micrometer-metric-publisher.mustache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scaffold-clean-architecture Show documentation
Show all versions of scaffold-clean-architecture Show documentation
Gradle plugin to create a clean application in Java that already works, It follows our best practices!
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