package eu.kielczewski.akanke.common.service.metric;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.metrics.Metric;
import org.springframework.boot.actuate.metrics.repository.MetricRepository;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import static net.logstash.logback.marker.Markers.append;
@Service
class MetricExporterService {
private static final Logger LOGGER = LoggerFactory.getLogger(MetricExporterService.class);
private final MetricRepository repository;
@Autowired
public MetricExporterService(@SuppressWarnings("SpringJavaAutowiringInspection") MetricRepository repository) {
this.repository = repository;
}
@Scheduled(initialDelay = 60000, fixedDelay = 60000)
void exportMetrics() {
LOGGER.debug("Exporting metrics");
repository.findAll().forEach(this::log);
}
private void log(Metric<?> m) {
LOGGER.info(append("metric", m), "Reporting metric {}={}", m.getName(), m.getValue());
repository.reset(m.getName());
}
}