Extract metrics package from gerrit-server top-level directory
Change-Id: I7c21b82de289ebc24b530d6b37abf6c33b4dec2f
This commit is contained in:
committed by
Dave Borowitz
parent
bd3f50e61b
commit
1f78f3efa1
16
javatests/com/google/gerrit/metrics/proc/BUILD
Normal file
16
javatests/com/google/gerrit/metrics/proc/BUILD
Normal file
@@ -0,0 +1,16 @@
|
||||
load("//tools/bzl:junit.bzl", "junit_tests")
|
||||
|
||||
junit_tests(
|
||||
name = "proc_tests",
|
||||
size = "small",
|
||||
srcs = glob(["**/*.java"]),
|
||||
deps = [
|
||||
"//java/com/google/gerrit/common:server",
|
||||
"//java/com/google/gerrit/lifecycle",
|
||||
"//java/com/google/gerrit/metrics",
|
||||
"//java/com/google/gerrit/metrics/dropwizard",
|
||||
"//lib:truth",
|
||||
"//lib/dropwizard:dropwizard-core",
|
||||
"//lib/guice",
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,188 @@
|
||||
// Copyright (C) 2015 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.metrics.proc;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import com.codahale.metrics.Counter;
|
||||
import com.codahale.metrics.Gauge;
|
||||
import com.codahale.metrics.Metric;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import com.google.gerrit.common.Version;
|
||||
import com.google.gerrit.lifecycle.LifecycleManager;
|
||||
import com.google.gerrit.metrics.CallbackMetric0;
|
||||
import com.google.gerrit.metrics.Counter0;
|
||||
import com.google.gerrit.metrics.Counter1;
|
||||
import com.google.gerrit.metrics.Description;
|
||||
import com.google.gerrit.metrics.Description.FieldOrdering;
|
||||
import com.google.gerrit.metrics.Field;
|
||||
import com.google.gerrit.metrics.MetricMaker;
|
||||
import com.google.gerrit.metrics.dropwizard.DropWizardMetricMaker;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
|
||||
public class ProcMetricModuleTest {
|
||||
@Rule public ExpectedException exception = ExpectedException.none();
|
||||
|
||||
@Inject MetricMaker metrics;
|
||||
|
||||
@Inject MetricRegistry registry;
|
||||
|
||||
@Test
|
||||
public void constantBuildLabel() {
|
||||
Gauge<String> buildLabel = gauge("build/label");
|
||||
assertThat(buildLabel.getValue()).isEqualTo(Version.getVersion());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void procUptime() {
|
||||
Gauge<Long> birth = gauge("proc/birth_timestamp");
|
||||
assertThat(birth.getValue())
|
||||
.isAtMost(TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis()));
|
||||
|
||||
Gauge<Long> uptime = gauge("proc/uptime");
|
||||
assertThat(uptime.getValue()).isAtLeast(1L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void counter0() {
|
||||
Counter0 cntr =
|
||||
metrics.newCounter("test/count", new Description("simple test").setCumulative());
|
||||
|
||||
Counter raw = get("test/count", Counter.class);
|
||||
assertThat(raw.getCount()).isEqualTo(0);
|
||||
|
||||
cntr.increment();
|
||||
assertThat(raw.getCount()).isEqualTo(1);
|
||||
|
||||
cntr.incrementBy(5);
|
||||
assertThat(raw.getCount()).isEqualTo(6);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void counter1() {
|
||||
Counter1<String> cntr =
|
||||
metrics.newCounter(
|
||||
"test/count", new Description("simple test").setCumulative(), Field.ofString("action"));
|
||||
|
||||
Counter total = get("test/count_total", Counter.class);
|
||||
assertThat(total.getCount()).isEqualTo(0);
|
||||
|
||||
cntr.increment("passed");
|
||||
Counter passed = get("test/count/passed", Counter.class);
|
||||
assertThat(total.getCount()).isEqualTo(1);
|
||||
assertThat(passed.getCount()).isEqualTo(1);
|
||||
|
||||
cntr.incrementBy("failed", 5);
|
||||
Counter failed = get("test/count/failed", Counter.class);
|
||||
assertThat(total.getCount()).isEqualTo(6);
|
||||
assertThat(passed.getCount()).isEqualTo(1);
|
||||
assertThat(failed.getCount()).isEqualTo(5);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void counterPrefixFields() {
|
||||
Counter1<String> cntr =
|
||||
metrics.newCounter(
|
||||
"test/count",
|
||||
new Description("simple test")
|
||||
.setCumulative()
|
||||
.setFieldOrdering(FieldOrdering.PREFIX_FIELDS_BASENAME),
|
||||
Field.ofString("action"));
|
||||
|
||||
Counter total = get("test/count_total", Counter.class);
|
||||
assertThat(total.getCount()).isEqualTo(0);
|
||||
|
||||
cntr.increment("passed");
|
||||
Counter passed = get("test/passed/count", Counter.class);
|
||||
assertThat(total.getCount()).isEqualTo(1);
|
||||
assertThat(passed.getCount()).isEqualTo(1);
|
||||
|
||||
cntr.incrementBy("failed", 5);
|
||||
Counter failed = get("test/failed/count", Counter.class);
|
||||
assertThat(total.getCount()).isEqualTo(6);
|
||||
assertThat(passed.getCount()).isEqualTo(1);
|
||||
assertThat(failed.getCount()).isEqualTo(5);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void callbackMetric0() {
|
||||
CallbackMetric0<Long> cntr =
|
||||
metrics.newCallbackMetric(
|
||||
"test/count", Long.class, new Description("simple test").setCumulative());
|
||||
|
||||
AtomicInteger invocations = new AtomicInteger(0);
|
||||
metrics.newTrigger(
|
||||
cntr,
|
||||
() -> {
|
||||
invocations.getAndIncrement();
|
||||
cntr.set(42L);
|
||||
});
|
||||
|
||||
// Triggers run immediately with DropWizard binding.
|
||||
assertThat(invocations.get()).isEqualTo(1);
|
||||
|
||||
Gauge<Long> raw = gauge("test/count");
|
||||
assertThat(raw.getValue()).isEqualTo(42);
|
||||
|
||||
// Triggers are debounced to avoid being fired too frequently.
|
||||
assertThat(invocations.get()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void invalidName1() {
|
||||
exception.expect(IllegalArgumentException.class);
|
||||
metrics.newCounter("invalid name", new Description("fail"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void invalidName2() {
|
||||
exception.expect(IllegalArgumentException.class);
|
||||
metrics.newCounter("invalid/ name", new Description("fail"));
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "cast"})
|
||||
private <V> Gauge<V> gauge(String name) {
|
||||
return (Gauge<V>) get(name, Gauge.class);
|
||||
}
|
||||
|
||||
private <M extends Metric> M get(String name, Class<M> type) {
|
||||
Metric m = registry.getMetrics().get(name);
|
||||
assertThat(m).named(name).isNotNull();
|
||||
assertThat(m).named(name).isInstanceOf(type);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
M result = (M) m;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
Injector injector = Guice.createInjector(new DropWizardMetricMaker.ApiModule());
|
||||
|
||||
LifecycleManager mgr = new LifecycleManager();
|
||||
mgr.add(injector);
|
||||
mgr.start();
|
||||
|
||||
injector.injectMembers(this);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user