/** * Logs a sorted and readable list of meters using the debug level. Useful for debugging. * * @param meters The meters to be logged. */ public static void logMeters(final Collection<? extends Meter> meters) { if (!log.isDebugEnabled()) { return; } // The original collection is usually unmodifiable final List<Meter> sortedMeters = new ArrayList<>(meters); Collections.sort(sortedMeters, METER_COMPARATOR); log.debug("Found meters:"); for (final Meter meter : sortedMeters) { final Id id = meter.getId(); final String type = id.getType().name(); final String name = id.getName(); final Map<String, String> tagMap = new LinkedHashMap<>(); // Tags are already sorted for (final Tag tag : id.getTags()) { tagMap.put(tag.getKey(), tag.getValue()); } log.debug("- {} {} {}", type, name, tagMap); } }
private MeterType convert(io.micrometer.core.instrument.Meter.Type type) { switch (type) { case GAUGE: return MeterType.GAUGE; case TIMER: return MeterType.TIMER; case COUNTER: return MeterType.COUNTER; case LONG_TASK_TIMER: return MeterType.LONG_TASK_TIMER; case DISTRIBUTION_SUMMARY: return MeterType.DISTRIBUTION_SUMMARY; case OTHER: return MeterType.OTHER; default: throw new IllegalStateException("unknown type " + type.name()); } }
String writeDocument(Meter meter, Consumer<StringBuilder> consumer) { StringBuilder sb = new StringBuilder(INDEX_LINE); String timestamp = FORMATTER.format(Instant.ofEpochMilli(config().clock().wallTime())); String name = getConventionName(meter.getId()); String type = meter.getId().getType().toString().toLowerCase(); sb.append("{\"").append(config.timestampFieldName()).append("\":\"").append(timestamp).append('"') .append(",\"name\":\"").append(escapeJson(name)).append('"') .append(",\"type\":\"").append(type).append('"'); List<Tag> tags = getConventionTags(meter.getId()); for (Tag tag : tags) { sb.append(",\"").append(escapeJson(tag.getKey())).append("\":\"") .append(escapeJson(tag.getValue())).append('"'); } consumer.accept(sb); sb.append("}"); return sb.toString(); }