private StringBuilder toPrometheus(final String registryKey, final String keyBase, final String keyUnit, final Snapshot snapshot, final Metadata metadata) {
final Function<Map<String, String>, Metadata> metaFactory = tag -> new Metadata(metadata.getName(), metadata.getDisplayName(), metadata.getDescription(), metadata.getTypeRaw(), metadata.getUnit(),
Stream.concat(metadata.getTags().entrySet().stream(), tag.entrySet().stream())
.map(e -> e.getKey() + '=' + e.getValue())
.collect(joining(",")));
final String completeKey = keyBase + keyUnit;
return new StringBuilder()
.append(value(registryKey, keyBase + "_min" + keyUnit, snapshot.getMin(), metadata))
.append(value(registryKey, keyBase + "_max" + keyUnit, snapshot.getMax(), metadata))
.append(value(registryKey, keyBase + "_mean" + keyUnit, snapshot.getMean(), metadata))
.append(value(registryKey, keyBase + "_stddev" + keyUnit, snapshot.getStdDev(), metadata))
.append(value(registryKey, completeKey, snapshot.getMedian(), metaFactory.apply(singletonMap("quantile", "0.5"))))
.append(value(registryKey, completeKey, snapshot.get75thPercentile(), metaFactory.apply(singletonMap("quantile", "0.75"))))
.append(value(registryKey, completeKey, snapshot.get95thPercentile(), metaFactory.apply(singletonMap("quantile", "0.95"))))
.append(value(registryKey, completeKey, snapshot.get98thPercentile(), metaFactory.apply(singletonMap("quantile", "0.98"))))
.append(value(registryKey, completeKey, snapshot.get99thPercentile(), metaFactory.apply(singletonMap("quantile", "0.99"))))
.append(value(registryKey, completeKey, snapshot.get999thPercentile(), metaFactory.apply(singletonMap("quantile", "0.999"))));
}