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()); } }
private MetricRegistry findRegistry(final String registry) { switch (Stream.of(MetricRegistry.Type.values()).filter(it -> it.getName().equals(registry)).findFirst() .orElseThrow(() -> new WebApplicationException(Response.Status.NOT_FOUND))) { case BASE: return baseRegistry; case VENDOR: return vendorRegistry; default: return applicationRegistry; } }
@GET @Produces(MediaType.APPLICATION_JSON) public Object getJson(@Context final SecurityContext securityContext, @Context final UriInfo uriInfo) { securityValidator.checkSecurity(securityContext, uriInfo); return Stream.of(MetricRegistry.Type.values()) .collect(toMap(MetricRegistry.Type::getName, it -> findRegistry(it.getName()).getMetrics().entrySet().stream() .collect(toMap(Map.Entry::getKey, m -> map(m.getValue()))))); }
break; default: throw new IllegalArgumentException("No definitions for " + scope.getName() + " supported");
@GET @Produces(MediaType.TEXT_PLAIN) public String getText(@Context final SecurityContext securityContext, @Context final UriInfo uriInfo) { securityValidator.checkSecurity(securityContext, uriInfo); return Stream.of(MetricRegistry.Type.values()) .map(type -> { final MetricRegistry metricRegistry = findRegistry(type.getName()); return prometheus.toText(metricRegistry, type.getName(), metricRegistry.getMetrics()); }) .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append) .toString(); }
public String type() { return type.getName(); }
@Override public Meter meter(Metadata metadata) { return getMetric(metadata, Meter.class, (name) -> HelidonMeter.create(type.getName(), metadata)); }
@Override public Histogram histogram(Metadata metadata) { return getMetric(metadata, Histogram.class, (name) -> HelidonHistogram.create(type.getName(), metadata)); }
@Override public Counter counter(Metadata metadata) { return getMetric(metadata, Counter.class, (name) -> HelidonCounter.create(type.getName(), metadata)); }
@Override public Timer timer(Metadata metadata) { return getMetric(metadata, Timer.class, (name) -> HelidonTimer.create(type.getName(), metadata)); }