MetricImpl(String registryType, Metadata metadata) { super(metadata.getName(), metadata.getDisplayName(), metadata.getDescription(), metadata.getTypeRaw(), metadata.getUnit(), tagsToSimpleString(metadata)); this.registryType = registryType; }
@Override public String unit() { return metadata.getUnit(); } }
public String getUnit() { return value.getUnit(); }
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"); }
@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(); }
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")))); }
@Override public Meter meter(final Metadata metadata) { Holder<? extends Metric> holder = metrics.get(metadata.getName()); if (holder == null) { holder = new Holder<>(new MeterImpl(metadata.getUnit()), metadata); final Holder<? extends Metric> existing = metrics.putIfAbsent(metadata.getName(), holder); if (existing != null) { holder = existing; } } else if (!metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and is not set as reusable"); } else if (!holder.metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and was not set as reusable"); } if (!Meter.class.isInstance(holder.metric)) { throw new IllegalArgumentException(holder.metric + " is not a meter"); } return Meter.class.cast(holder.metric); }
@Override public Timer timer(final Metadata metadata) { Holder<? extends Metric> holder = metrics.get(metadata.getName()); if (holder == null) { holder = new Holder<>(new TimerImpl(metadata.getUnit()), metadata); final Holder<? extends Metric> existing = metrics.putIfAbsent(metadata.getName(), holder); if (existing != null) { holder = existing; } } else if (!metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and is not set as reusable"); } else if (!holder.metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and was not set as reusable"); } if (!Timer.class.isInstance(holder.metric)) { throw new IllegalArgumentException(holder.metric + " is not a timer"); } return Timer.class.cast(holder.metric); }
@Override public Counter counter(final Metadata metadata) { Holder<? extends Metric> holder = metrics.get(metadata.getName()); if (holder == null) { holder = new Holder<>(new CounterImpl(metadata.getUnit()), metadata); final Holder<? extends Metric> existing = metrics.putIfAbsent(metadata.getName(), holder); if (existing != null) { holder = existing; } } else if (!metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and is not set as reusable"); } else if (!holder.metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and was not set as reusable"); } if (!Counter.class.isInstance(holder.metric)) { throw new IllegalArgumentException(holder.metric + " is not a counter"); } return Counter.class.cast(holder.metric); }
@Override public Histogram histogram(final Metadata metadata) { Holder<? extends Metric> holder = metrics.get(metadata.getName()); if (holder == null) { holder = new Holder<>(new HistogramImpl(metadata.getUnit()), metadata); final Holder<? extends Metric> existing = metrics.putIfAbsent(metadata.getName(), holder); if (existing != null) { holder = existing; } } else if (!metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and is not set as reusable"); } else if (!holder.metadata.isReusable()) { throw new IllegalArgumentException("Metric " + metadata.getName() + " already exists and was not set as reusable"); } if (!Histogram.class.isInstance(holder.metric)) { throw new IllegalArgumentException(holder.metric + " is not a histogram"); } return Histogram.class.cast(holder.metric); }
String unit = metricMetaData.getUnit();
@Override @Deprecated public <T extends Metric> T register(String name, T t, Metadata metadata) throws IllegalArgumentException { Metadata metadataCopy = new Metadata(name, metadata.getDisplayName(), metadata.getDescription(), metadata.getTypeRaw(), metadata.getUnit(), metadata.getTagsAsString()); metadataCopy.setReusable(metadata.isReusable()); metadataCopy.setName(name); return register(metadataCopy, t); }
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()); } }