<T extends com.codahale.metrics.Metric> void decorateMetricProducer(@Observes ProcessProducer<?, T> pp, BeanManager manager) { if (pp.getAnnotatedMember().isAnnotationPresent(Metric.class)) { String name = pp.getAnnotatedMember().getAnnotation(Metric.class).name(); Producer<T> producer = pp.getProducer(); pp.configureProducer().produceWith(context -> { MetricRegistry registry = manager.createInstance().select(MetricRegistry.class).get(); if (registry.getMetrics().containsKey(name)) return (T) registry.getMetrics().get(name); return registry.register(name, producer.produce(context)); }); } }
public class CounterFieldBean { @Inject @Metric(name = "counterName") private Counter counter; public void increment(long n) { counter.inc(n); } }
private <E extends AnnotatedElement & Member> String getName(Class<?> clazz, E elem, Object fieldValue) { com.codahale.metrics.annotation.Metric annotation = elem.getAnnotation(com.codahale.metrics.annotation.Metric.class); if(annotation == null) { throw new IllegalArgumentException(elem + " mut be an annotated with " + com.codahale.metrics.annotation.Metric.class); } return MetricNameUtil.chooseName(annotation.name(), annotation.absolute(), clazz, elem); }
public class HistogramFieldBean { @Inject @Metric(name = "histogramName") private Histogram histogram; public void update(long n) { histogram.update(n); } }
@Override public String of(AnnotatedMember<?> member) { if (member.isAnnotationPresent(Metric.class)) { Metric metric = member.getAnnotation(Metric.class); String name = metric.name().isEmpty() ? member.getJavaMember().getName() : of(metric.name()); return metric.absolute() | extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? name : MetricRegistry.name(member.getJavaMember().getDeclaringClass(), name); } else { return extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? member.getJavaMember().getName() : MetricRegistry.name(member.getJavaMember().getDeclaringClass(), member.getJavaMember().getName()); } }
@Produces @Metric(name = "not_registered_metric") Counter not_registered_metric(MetricRegistry registry, InjectionPoint ip) { return registry.counter("not_registered_metric"); } }
@Override public String of(AnnotatedMember<?> member) { if (member.isAnnotationPresent(Metric.class)) { Metric metric = member.getAnnotation(Metric.class); String name = metric.name().isEmpty() ? member.getJavaMember().getName() : of(metric.name()); return metric.absolute() | extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? name : MetricRegistry.name(member.getJavaMember().getDeclaringClass(), name); } else { return extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? member.getJavaMember().getName() : MetricRegistry.name(member.getJavaMember().getDeclaringClass(), member.getJavaMember().getName()); } }
public class TimerFieldBean { @Inject Timer timerWithoutAnnotation; @Inject @Metric(absolute = false) Timer timerWithExplicitNonAbsoluteName; @Inject @Metric Timer timerWithNoName; @Inject @Metric(name = "timerName") Timer timerWithName; @Inject @Metric(absolute = true) Timer timerWithAbsoluteDefaultName; @Inject @Metric(name = "timerAbsoluteName", absolute = true) Timer timerWithAbsoluteName; }
private String of(AnnotatedParameter<?> parameter) { if (parameter.isAnnotationPresent(Metric.class)) { Metric metric = parameter.getAnnotation(Metric.class); String name = metric.name().isEmpty() ? getParameterName(parameter) : of(metric.name()); return metric.absolute() | extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? name : MetricRegistry.name(parameter.getDeclaringCallable().getJavaMember().getDeclaringClass(), name); } else { return extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? getParameterName(parameter) : MetricRegistry.name(parameter.getDeclaringCallable().getJavaMember().getDeclaringClass(), getParameterName(parameter)); } }
@ApplicationScoped public class MetricProducerFieldBean { @Produces @Metric(name = "counter1", absolute = true) private final Counter counter1 = new Counter(); @Produces @Metric(name = "counter2", absolute = true) private final Counter counter2 = new Counter(); @Produces @Metric(name = "ratioGauge", absolute = true) private final Gauge<Double> gauge = () -> Ratio.of(counter1.getCount(), counter2.getCount()).getValue(); // TODO: add assertions in the corresponding test @Produces private final Histogram histogram = new Histogram(new SlidingTimeWindowReservoir(1L, TimeUnit.SECONDS)); @Produces @FooQualifier @Metric(name = "not_registered_metric", absolute = true) private final Counter not_registered_metric = new Counter(); }
private String of(AnnotatedParameter<?> parameter) { if (parameter.isAnnotationPresent(Metric.class)) { Metric metric = parameter.getAnnotation(Metric.class); String name = metric.name().isEmpty() ? getParameterName(parameter) : of(metric.name()); return metric.absolute() | extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? name : MetricRegistry.name(parameter.getDeclaringCallable().getJavaMember().getDeclaringClass(), name); } else { return extension.<Boolean>getParameter(UseAbsoluteName).orElse(false) ? getParameterName(parameter) : MetricRegistry.name(parameter.getDeclaringCallable().getJavaMember().getDeclaringClass(), getParameterName(parameter)); } }
@Produces @Metric(name = "cache-hits") Gauge<Double> cacheHitRatioGauge(Meter hits, Timer calls) { return () -> Ratio.of(hits.getCount(), calls.getCount()).getValue(); }