@Override public Timer timer(Metadata metadata) { return timer(metadata.getName()); }
@Override public Counter counter(Metadata metadata) { return counter(metadata.getName()); }
@Override public Meter meter(Metadata metadata) { return meter(metadata.getName()); }
@Override public <T extends Metric> T register(Metadata metadata, T metric) throws IllegalArgumentException { throw cannotRegister(metadata.getName()); }
@Override public Histogram histogram(Metadata metadata) { return histogram(metadata.getName()); }
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); }
static HelidonTimer create(String repoType, Metadata metadata, Clock clock) { return create(repoType, metadata, new TimerImpl(repoType, metadata.getName(), clock)); }
private static void register(BaseRegistry registry, Config config, Metadata meta, Metric metric) { if (registry.config.get(CONFIG_METRIC_ENABLED_BASE + meta.getName() + ".enabled").asBoolean().orElse(true)) { registry.register(meta, metric); } }
MetricImpl(String registryType, Metadata metadata) { super(metadata.getName(), metadata.getDisplayName(), metadata.getDescription(), metadata.getTypeRaw(), metadata.getUnit(), tagsToSimpleString(metadata)); this.registryType = registryType; }
@Override public String name() { return metadata.getName(); }
public String getName() { return value.getName(); }
private String toPrometheus(final Metadata metadata) { return metadata.getName() .replaceAll("[^\\w]+", "_") .replaceAll("(.)(\\p{Upper})", "$1_$2") .replace("__", "_") .replace(":_", ":") .toLowerCase(ROOT); }
@Override public Counter counter(Metadata metadata) { Map<String, com.codahale.metrics.Metric> metrics = metricRegistry.getMetrics(); if(metrics.containsKey(metadata.getName()) && metrics.get(metadata.getName()) instanceof MetricAdapter && ((MetricAdapter)metrics.get(metadata.getName())).getMetric() instanceof Counter) { return (Counter)((MetricAdapter)metrics.get(metadata.getName())).getMetric(); } return register(metadata, new CounterImpl()); }
@Override public Meter meter(Metadata metadata) { Map<String, com.codahale.metrics.Metric> metrics = metricRegistry.getMetrics(); if(metrics.containsKey(metadata.getName()) && metrics.get(metadata.getName()) instanceof MetricAdapter && ((MetricAdapter)metrics.get(metadata.getName())).getMetric() instanceof Meter) { return (Meter)((MetricAdapter)metrics.get(metadata.getName())).getMetric(); } return register(metadata, new MeterImpl()); }
@Override public Histogram histogram(Metadata metadata) { Map<String, com.codahale.metrics.Metric> metrics = metricRegistry.getMetrics(); if(metrics.containsKey(metadata.getName()) && metrics.get(metadata.getName()) instanceof MetricAdapter && ((MetricAdapter)metrics.get(metadata.getName())).getMetric() instanceof Histogram) { return (Histogram)((MetricAdapter)metrics.get(metadata.getName())).getMetric(); } return register(metadata, new HistogramImpl()); }
@Override public Timer timer(Metadata metadata) { Map<String, com.codahale.metrics.Metric> metrics = metricRegistry.getMetrics(); if(metrics.containsKey(metadata.getName()) && metrics.get(metadata.getName()) instanceof MetricAdapter && ((MetricAdapter)metrics.get(metadata.getName())).getMetric() instanceof Timer) { return (Timer)((MetricAdapter)metrics.get(metadata.getName())).getMetric(); } return register(metadata, new TimerImpl()); }
@Override public <T extends Metric> T register(final Metadata metadata, final T metric) throws IllegalArgumentException { final Holder<? extends Metric> holder = metrics.putIfAbsent(metadata.getName(), new Holder<>(metric, metadata)); if (holder != null && !metadata.isReusable() && !holder.metadata.isReusable()) { throw new IllegalArgumentException("'" + metadata.getName() + "' metric already exists and is not reusable"); } return metric; }
private <E extends Member & AnnotatedElement> Object applyInterceptor(InvocationContext context, E member) throws Exception { Metadata metadata = AnnotationMetadata.buildMetadata(bean.getBeanClass(), member, Metered.class); Meter meter = applicationRegistry.getMeters().get(metadata.getName()); if (meter == null) { throw new IllegalStateException("No meter with name [" + metadata.getName() + "] found in registry [" + applicationRegistry + "]"); } meter.mark(); return context.proceed(); } }
@SuppressWarnings("unchecked") @Produces public <T> Gauge<T> produceGauge(InjectionPoint injectionPoint) { Metadata m = AnnotationMetadata.buildProducerMetadata(injectionPoint); return () -> (T) applicationRegistry.getGauges().get(m.getName()).getValue(); } }
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()); } }