#1865 - ENH: Add metric collection for ORM insert update and delete

This commit is contained in:
rob bygrave
2019-11-19 20:27:04 +13:00
parent aa11095d17
commit 17ff04e2b9
14 changed files with 267 additions and 4 deletions
@@ -0,0 +1,79 @@
package io.ebeaninternal.server.deploy;
import io.ebean.meta.BasicMetricVisitor;
import io.ebean.meta.MetaTimedMetric;
import io.ebean.meta.MetricType;
import io.ebeaninternal.server.core.PersistRequest;
import org.junit.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class BeanIudMetricsTest {
@Test
public void addBatch() {
BeanIudMetrics iudMetrics = new BeanIudMetrics("one");
final long startNanos = System.nanoTime() - 10000;
iudMetrics.addBatch(PersistRequest.Type.INSERT, startNanos, 4);
BasicMetricVisitor basic = new BasicMetricVisitor();
iudMetrics.visit(basic);
List<MetaTimedMetric> timed = basic.getTimedMetrics();
assertThat(timed).hasSize(1);
assertThat(timed.get(0).getCount()).isEqualTo(4);
assertThat(timed.get(0).getName()).isEqualTo("iud.one.insertBatch");
assertThat(timed.get(0).getMetricType()).isEqualTo(MetricType.IUD);
iudMetrics.addBatch(PersistRequest.Type.UPDATE, startNanos, 1);
iudMetrics.addBatch(PersistRequest.Type.DELETE_SOFT, startNanos, 2);
iudMetrics.addBatch(PersistRequest.Type.DELETE, startNanos, 4);
iudMetrics.addBatch(PersistRequest.Type.DELETE_PERMANENT, startNanos, 8);
iudMetrics.addBatch(PersistRequest.Type.INSERT, startNanos, 16);
basic = new BasicMetricVisitor();
iudMetrics.visit(basic);
timed = basic.getTimedMetrics();
assertThat(timed).hasSize(3);
assertThat(timed.get(0).getCount()).isEqualTo(16);
assertThat(timed.get(0).getName()).isEqualTo("iud.one.insertBatch");
assertThat(timed.get(1).getCount()).isEqualTo(3);
assertThat(timed.get(1).getName()).isEqualTo("iud.one.updateBatch");
assertThat(timed.get(2).getCount()).isEqualTo(12);
assertThat(timed.get(2).getName()).isEqualTo("iud.one.deleteBatch");
}
@Test
public void addNoBatch() {
BeanIudMetrics iudMetrics = new BeanIudMetrics("one");
final long startNanos = System.nanoTime() - 10000;
iudMetrics.addNoBatch(PersistRequest.Type.INSERT, startNanos);
iudMetrics.addNoBatch(PersistRequest.Type.UPDATE, startNanos);
iudMetrics.addNoBatch(PersistRequest.Type.DELETE_SOFT, startNanos);
iudMetrics.addNoBatch(PersistRequest.Type.DELETE, startNanos);
iudMetrics.addNoBatch(PersistRequest.Type.DELETE_PERMANENT, startNanos);
BasicMetricVisitor basic = new BasicMetricVisitor();
iudMetrics.visit(basic);
List<MetaTimedMetric> timed = basic.getTimedMetrics();
assertThat(timed).hasSize(3);
assertThat(timed.get(0).getCount()).isEqualTo(1);
assertThat(timed.get(0).getName()).isEqualTo("iud.one.insert");
assertThat(timed.get(1).getCount()).isEqualTo(2);
assertThat(timed.get(1).getName()).isEqualTo("iud.one.update");
assertThat(timed.get(2).getCount()).isEqualTo(2);
assertThat(timed.get(2).getName()).isEqualTo("iud.one.delete");
}
}
@@ -30,4 +30,28 @@ public class DTimedMetricTest {
assertThat(stats.getMax()).isEqualTo(stats.getTotal());
assertThat(stats.getBeanCount()).isEqualTo(42);
}
@Test
public void addBatchSince() throws InterruptedException {
DTimedMetric metric = new DTimedMetric(MetricType.L2, "addSinceNanos");
long start = System.nanoTime();
Thread.sleep(10);
metric.addBatchSince(start, 5);
DTimeMetricStats stats = metric.collect(true);
assertThat(stats.getCount()).isEqualTo(5);
assertThat(stats.getTotal()).isGreaterThan(10000);
assertThat(stats.getMax()).isEqualTo(stats.getTotal() / 5);
assertThat(stats.getMax()).isGreaterThan(10000 / 5);
metric.addBatchSince(start, 2);
stats = metric.collect(true);
assertThat(stats.getCount()).isEqualTo(2);
assertThat(stats.getTotal()).isGreaterThan(10000);
assertThat(stats.getMax()).isEqualTo(stats.getTotal() / 2);
}
}