private <T extends Metric, I extends MetricImpl> T getMetric(Metadata metadata, Class<T> type, Function<String, I> newInstanceCreator) { MetricImpl metric = allMetrics.get(metadata.getName()); if (metric != null) { if (metric.isReusable() != metadata.isReusable()) { throw new IllegalArgumentException("Metadata not re-usable for metric " + metadata.getName()); } } else { metric = newInstanceCreator.apply(metadata.getName()); metric.setReusable(metadata.isReusable()); allMetrics.put(metadata.getName(), metric); } if (!(type.isAssignableFrom(metric.getClass()))) { throw new IllegalArgumentException("Attempting to get " + metadata.getType() + ", but metric registered under this name is " + metric); } return type.cast(metric); }
private <T extends Metric> MetricImpl toImpl(Metadata metadata, T metric) { switch (metadata.getTypeRaw()) { case COUNTER: return HelidonCounter.create(type.getName(), metadata, (Counter) metric); case GAUGE: return HelidonGauge.create(type.getName(), metadata, (Gauge<?>) metric); case HISTOGRAM: return HelidonHistogram.create(type.getName(), metadata, (Histogram) metric); case METERED: return HelidonMeter.create(type.getName(), metadata, (Meter) metric); case TIMER: return HelidonTimer.create(type.getName(), metadata, (Timer) metric); case INVALID: default: throw new IllegalArgumentException("Unexpected metric type " + metadata.getType() + ": " + metric.getClass() .getName()); } }
public String getType() { return value.getType(); }
private StringBuilder type(final String registryKey, final String key, final Metadata metadata) { final String builtKey = registryKey + ':' + key; final StringBuilder builder = new StringBuilder() .append("# TYPE ").append(keyMapping.getOrDefault(builtKey, builtKey)); if (metadata != null) { builder.append(' ').append(metadata.getType()); } return builder.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(); }