com.yahoo.jdisc.application.MetricConsumer Maven / Gradle / Ivy
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.application;
import com.google.inject.ProvidedBy;
import com.google.inject.Provider;
import com.yahoo.jdisc.Metric;
import java.util.Map;
/**
* This interface defines the consumer counterpart of the {@link Metric} interface. All Metric objects contain their
* own thread local instance of this interface, so most implementations will require a registry of sorts to manage the
* aggregation of state across MetricConsumers.
*
* An {@link Application} needs to bind a {@link Provider} of this interface to an implementation, or else all calls
* to the Metric objects become no-ops. An implementation will look similar to:
*
*
* private final MyMetricRegistry myMetricRegistry = new MyMetricRegistry();
* void createContainer() {
* ContainerBuilder builder = containerActivator.newContainerBuilder();
* builder.guice().install(new MyGuiceModule());
* (...)
* }
* class MyGuiceModule extends com.google.inject.AbstractModule {
* void configure() {
* bind(MetricConsumer.class).toProvider(myMetricRegistry);
* (...)
* }
* }
* class MyMetricRegistry implements com.google.inject.Provider<MetricConsumer> {
* (...)
* }
*
*
* @author Simon Thoresen
*/
@ProvidedBy(MetricNullProvider.class)
public interface MetricConsumer {
/**
* Consume a call to Metric.set(String, Number, Metric.Context).
*
* @param key The name of the metric to modify.
* @param val The value to assign to the named metric.
* @param ctx The context to further describe this entry.
*/
public void set(String key, Number val, Metric.Context ctx);
/**
* Consume a call to Metric.add(String, Number, Metric.Context).
*
* @param key The name of the metric to modify.
* @param val The value to add to the named metric.
* @param ctx The context to further describe this entry.
*/
public void add(String key, Number val, Metric.Context ctx);
/**
* Creates a Metric.Context object that encapsulates the given properties. The returned Context object
* will be passed along every future call to set(String, Number, Metric.Context) and
* add(String, Number, Metric.Context) where the properties match those given here.
*
* @param properties The properties to incorporate in the context.
* @return The created context.
*/
public Metric.Context createContext(Map properties);
}