Add method to create and register EventMetrics

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132346375
This commit is contained in:
shikhman 2016-09-06 11:58:46 -07:00 committed by Ben McIlwain
parent 2ba9b01a13
commit 0538c1e210
3 changed files with 65 additions and 0 deletions

View file

@ -103,6 +103,33 @@ public interface MetricRegistry {
String valueDisplayName, String valueDisplayName,
ImmutableSet<LabelDescriptor> labels); ImmutableSet<LabelDescriptor> labels);
/**
* Returns a new {@link EventMetric}.
*
* <p>This metric type is intended for recording aspects of an "event" -- things like latency or
* payload size.
*
* <p>The metric's values are {@link Distribution} instances which are updated via {@link
* EventMetric#record(double, String...)}.
*
* <p>The metric is thread-safe. The metric will be registered at the time of creation and
* collected for subsequent write intervals.
*
* @param name name of the metric. Should be in the form of '/foo/bar'.
* @param description human readable description of the metric.
* @param valueDisplayName human readable description of the metric's value type.
* @param labels list of the metric's labels.
* @param distributionFitter fit to apply to the underlying {@link Distribution} instances of this
* metric.
* @throws IllegalStateException if a metric of the same name is already registered.
*/
EventMetric newEventMetric(
String name,
String description,
String valueDisplayName,
ImmutableSet<LabelDescriptor> labels,
DistributionFitter distributionFitter);
/** /**
* Fetches a snapshot of the currently registered metrics * Fetches a snapshot of the currently registered metrics
* *

View file

@ -42,6 +42,21 @@ public final class MetricRegistryImpl implements MetricRegistry {
return INSTANCE; return INSTANCE;
} }
@Override
public EventMetric newEventMetric(
String name,
String description,
String valueDisplayName,
ImmutableSet<LabelDescriptor> labels,
DistributionFitter distributionFitter) {
EventMetric metric =
new EventMetric(name, description, valueDisplayName, distributionFitter, labels);
registerMetric(name, metric);
logger.info("Registered new event metric: " + name);
return metric;
}
@Override @Override
@CanIgnoreReturnValue @CanIgnoreReturnValue
public <V> Metric<V> newGauge( public <V> Metric<V> newGauge(

View file

@ -138,6 +138,29 @@ public class MetricRegistryImplTest {
ImmutableSet.of(label))); ImmutableSet.of(label)));
} }
@Test
public void testNewEventMetric_createsEventMetric() {
DistributionFitter fitter = CustomFitter.create(ImmutableSet.of(0.0));
EventMetric testMetric =
MetricRegistryImpl.getDefault()
.newEventMetric(
"/test_metric",
"test_description",
"test_valuedisplayname",
ImmutableSet.of(label),
fitter);
assertThat(testMetric.getValueClass()).isSameAs(Distribution.class);
assertThat(testMetric.getMetricSchema())
.isEqualTo(
MetricSchema.create(
"/test_metric",
"test_description",
"test_valuedisplayname",
Kind.CUMULATIVE,
ImmutableSet.of(label)));
}
@Test @Test
public void testRegister_duplicateMetric_throwsException() { public void testRegister_duplicateMetric_throwsException() {
SettableMetric<Boolean> testMetric = SettableMetric<Boolean> testMetric =