Support a naming convention function that can be applied to metrics names for reporting

For example, can apply a lower case underscore naming convention to the metrics names. This
can be done such that it doesn't have to be applied every time the metrics are collected and
reported.
This commit is contained in:
Rob Bygrave
2022-08-08 21:34:00 +12:00
parent 2f7b553d7c
commit c7bd6c8bde
19 changed files with 314 additions and 50 deletions
@@ -1,12 +1,55 @@
package io.ebeaninternal.server.profile;
import io.ebean.meta.BasicMetricVisitor;
import io.ebean.meta.MetaTimedMetric;
import io.ebean.metric.MetricFactory;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.function.Function;
import static org.assertj.core.api.Assertions.assertThat;
class BasicProfileLocationTest {
Function<String,String> naming = (String name) -> "prefix[" + name.replace('.', '-') + "]";
@Test
void metricNameFromOverride() {
DTimedProfileLocation loc = new DTimedProfileLocation(12, "", MetricFactory.get().createTimedMetric("a.b.c"));
loc.initWith("foo.label");
loc.add(42);
BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming);
loc.visit(visitor);
List<MetaTimedMetric> result = visitor.timedMetrics();
assertThat(result).hasSize(1);
assertThat(result.get(0).name()).isEqualTo("prefix[txn-named-foo-label]");
assertThat(result.get(0).total()).isEqualTo(42);
loc.add(21);
BasicMetricVisitor visitor2 = new BasicMetricVisitor("v", naming);
loc.visit(visitor2);
List<MetaTimedMetric> result2 = visitor2.timedMetrics();
assertThat(result2).hasSize(1);
assertThat(result2.get(0).name()).isEqualTo("prefix[txn-named-foo-label]");
assertThat(result2.get(0).total()).isEqualTo(21);
}
@Test
void metricNameFromTimed() {
DTimedProfileLocation loc = new DTimedProfileLocation(12, "foo", MetricFactory.get().createTimedMetric("a.b.c"));
loc.add(42);
BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming);
loc.visit(visitor);
List<MetaTimedMetric> result = visitor.timedMetrics();
assertThat(result).hasSize(1);
assertThat(result.get(0).name()).isEqualTo("prefix[a-b-c]");
}
@Test
void obtain() {
DProfileLocation loc = new DTimedProfileLocation(12, "foo", MetricFactory.get().createTimedMetric("junk"));
@@ -0,0 +1,43 @@
package io.ebeaninternal.server.profile;
import io.ebean.meta.BasicMetricVisitor;
import io.ebean.meta.MetaCountMetric;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.function.Function;
import static org.assertj.core.api.Assertions.assertThat;
class DCountMetricTest {
Function<String, String> naming = (String name) -> "prefix[" + name.replace('.', '-') + "]";
@Test
void visit() {
DCountMetric counter = new DCountMetric("org.hello");
counter.add(7);
{
BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming);
counter.visit(visitor);
List<MetaCountMetric> result = visitor.countMetrics();
assertThat(result).hasSize(1);
assertThat(result.get(0).name()).isEqualTo("prefix[org-hello]");
assertThat(result.get(0).count()).isEqualTo(7);
}
{
// second collection
counter.add(4);
counter.add(8);
BasicMetricVisitor visitor2 = new BasicMetricVisitor("v", naming);
counter.visit(visitor2);
List<MetaCountMetric> result2 = visitor2.countMetrics();
assertThat(result2).hasSize(1);
assertThat(result2.get(0).name()).isEqualTo("prefix[org-hello]");
assertThat(result2.get(0).count()).isEqualTo(12);
}
}
}
@@ -0,0 +1,47 @@
package io.ebeaninternal.server.profile;
import io.ebean.meta.BasicMetricVisitor;
import io.ebean.meta.MetaQueryMetric;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.function.Function;
import static org.assertj.core.api.Assertions.assertThat;
class DQueryPlanMetricTest {
Function<String, String> naming = (String name) -> "prefix[" + name.replace('.', '-') + "]";
@Test
void visit() {
DQueryPlanMeta meta = new DQueryPlanMeta(Object.class, "lab", null, "sql");
DTimedMetric metric = new DTimedMetric("org.timed.plan");
DQueryPlanMetric planMetric = new DQueryPlanMetric(meta, metric);
metric.add(560);
metric.add(260);
{
BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming);
planMetric.visit(visitor);
List<MetaQueryMetric> result = visitor.queryMetrics();
assertThat(result).hasSize(1);
assertThat(result.get(0).name()).isEqualTo("prefix[dto-Object_lab]");
assertThat(result.get(0).count()).isEqualTo(2);
assertThat(result.get(0).total()).isEqualTo(820);
}
metric.add(410);
{
BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming);
planMetric.visit(visitor);
List<MetaQueryMetric> result = visitor.queryMetrics();
assertThat(result).hasSize(1);
assertThat(result.get(0).name()).isEqualTo("prefix[dto-Object_lab]");
assertThat(result.get(0).count()).isEqualTo(1);
assertThat(result.get(0).total()).isEqualTo(410);
}
}
}
@@ -1,7 +1,12 @@
package io.ebeaninternal.server.profile;
import io.ebean.meta.BasicMetricVisitor;
import io.ebean.meta.MetaTimedMetric;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.function.Function;
import static org.assertj.core.api.Assertions.assertThat;
public class DTimedMetricTest {
@@ -52,4 +57,37 @@ public class DTimedMetricTest {
assertThat(stats.total()).isGreaterThan(10000);
assertThat(stats.max()).isEqualTo(stats.total() / 2);
}
Function<String, String> naming = (String name) -> "prefix[" + name.replace('.', '-') + "]";
@Test
void visit() {
DTimedMetric metric = new DTimedMetric("org.timed");
metric.add(560);
metric.add(500);
{
BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming);
metric.visit(visitor);
List<MetaTimedMetric> result = visitor.timedMetrics();
assertThat(result).hasSize(1);
assertThat(result.get(0).name()).isEqualTo("prefix[org-timed]");
assertThat(result.get(0).count()).isEqualTo(2);
assertThat(result.get(0).total()).isEqualTo(1060);
}
metric.add(160);
metric.add(100);
metric.add(150);
{
BasicMetricVisitor visitor = new BasicMetricVisitor("v", naming);
metric.visit(visitor);
List<MetaTimedMetric> result = visitor.timedMetrics();
assertThat(result).hasSize(1);
assertThat(result.get(0).name()).isEqualTo("prefix[org-timed]");
assertThat(result.get(0).count()).isEqualTo(3);
assertThat(result.get(0).total()).isEqualTo(410);
}
}
}