private static String tagsToSimpleString(Metadata metadata) { // add tags HashMap<String, String> tags = metadata.getTags(); if (tags.isEmpty()) { return ""; } else { StringBuilder sb = new StringBuilder(); for (Map.Entry<String, String> entry : tags.entrySet()) { sb.append(entry.getKey()).append("=").append(entry.getValue()); sb.append(","); } sb.delete(sb.length() - 1, sb.length()); return sb.toString(); } }
public String getTags() { // not sure why tck expect it, sounds worse than native getTags for clients return value.getTags().entrySet().stream().map(e -> e.getKey() + '=' + e.getValue()).collect(joining(",")); } }
private StringBuilder value(final String registryKey, final String key, final double value, final Metadata metadata) { final String builtKey = registryKey + ':' + key; return new StringBuilder() .append(type(registryKey, key, metadata)) .append(keyMapping.getOrDefault(builtKey, builtKey)) .append(of(metadata.getTags()) .filter(t -> !t.isEmpty()) .map(t -> t.entrySet().stream() .map(e -> e.getKey() + "=\"" + e.getValue() + "\"") .collect(joining(",", "{", "}"))) .orElse("")) .append(' ').append(toPrometheusValue(metadata.getUnit(), value)).append("\n"); }
@Test public void addTagsTest() { metadata.addTags("colour=green,size=medium"); metadata.addTag("number=5"); Assert.assertNotNull(metadata); Assert.assertTrue(metadata.getTags().containsKey("size")); Assert.assertTrue(metadata.getTags().containsValue("green")); Assert.assertFalse(metadata.getTags().containsValue("blue")); Assert.assertTrue(metadata.getTags().containsKey("number")); }
@Override public void serialize(Metadata metadata, JsonGenerator json, SerializerProvider provider) throws IOException { json.writeStartObject(); json.writeStringField("unit", metadata.getUnit()); json.writeStringField("type", metadata.getType()); json.writeStringField("description", metadata.getDescription()); json.writeStringField("displayName", metadata.getDisplayName()); json.writeStringField("tags", getTagsAsStringNoQuotes(metadata.getTags())); json.writeEndObject(); }
@Test public void tagsTest() { Assert.assertNotNull(metadata); Assert.assertTrue(metadata.getTags().containsValue("blue")); }
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")))); }
private Holder(final T metric, final Metadata metadata) { this.metric = metric; this.metadata = new Metadata(metadata.getName(), metadata.getDisplayName(), metadata.getDescription(), metadata.getTypeRaw(), metadata.getUnit()); this.metadata.setReusable(metadata.isReusable()); this.metadata.setTags(metadata.getTags()); } }