diff --git a/src/main/java/io/ebean/metric/TimedMetric.java b/src/main/java/io/ebean/metric/TimedMetric.java index 6a142bfe2..fb2589273 100644 --- a/src/main/java/io/ebean/metric/TimedMetric.java +++ b/src/main/java/io/ebean/metric/TimedMetric.java @@ -22,6 +22,11 @@ public interface TimedMetric { */ void addSinceNanos(long startNanos); + /** + * Add a time event given the start nanos and bean count. + */ + void addSinceNanos(long startNanos, long beans); + /** * Return true if there are no metrics collected since the last collection. */ diff --git a/src/main/java/io/ebean/metric/TimedMetricMap.java b/src/main/java/io/ebean/metric/TimedMetricMap.java index 5b6fccdb2..55c0ab372 100644 --- a/src/main/java/io/ebean/metric/TimedMetricMap.java +++ b/src/main/java/io/ebean/metric/TimedMetricMap.java @@ -12,6 +12,11 @@ public interface TimedMetricMap { */ void addSinceNanos(String key, long startNanos); + /** + * Add a time event given the start nanos and beans. + */ + void addSinceNanos(String key, long startNanos, int beans); + /** * Add an execution for the given key. */ diff --git a/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java b/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java index cb1c4b4c4..065d44c8b 100644 --- a/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java +++ b/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java @@ -40,6 +40,11 @@ class DTimedMetric implements TimedMetric { add((System.nanoTime() - startNanos) / 1000L); } + @Override + public void addSinceNanos(long startNanos, long beans) { + add((System.nanoTime() - startNanos) / 1000L, beans); + } + /** * Add a value. Usually the value is Time or Bytes etc. */ diff --git a/src/main/java/io/ebeaninternal/server/profile/DTimedMetricMap.java b/src/main/java/io/ebeaninternal/server/profile/DTimedMetricMap.java index c5c4ffdc8..418e4d7e2 100644 --- a/src/main/java/io/ebeaninternal/server/profile/DTimedMetricMap.java +++ b/src/main/java/io/ebeaninternal/server/profile/DTimedMetricMap.java @@ -24,6 +24,11 @@ class DTimedMetricMap implements TimedMetricMap { add(key, (System.nanoTime() - startNanos)/1000L); } + @Override + public void addSinceNanos(String key, long startNanos, int beans) { + add(key, (System.nanoTime() - startNanos)/1000L, beans); + } + @Override public void add(String key, long exeMicros) { map.computeIfAbsent(key, (k) -> new DTimedMetric(metricType, name + key)).add(exeMicros); diff --git a/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java b/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java index 7b1c3f713..07a44265d 100644 --- a/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java +++ b/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java @@ -25,5 +25,15 @@ public class DTimedMetricMapTest { MetaTimedMetric timedMetric = visitor.getTimedMetrics().get(0); assertThat(timedMetric.getCount()).isEqualTo(1); assertThat(timedMetric.getTotal()).isGreaterThan(10); + + metricMap.addSinceNanos("some", nanos, 42); + + visitor = new BasicMetricVisitor(); + metricMap.visit(visitor); + + timedMetric = visitor.getTimedMetrics().get(0); + assertThat(timedMetric.getCount()).isEqualTo(1); + assertThat(timedMetric.getTotal()).isGreaterThan(10); + assertThat(timedMetric.getBeanCount()).isEqualTo(42); } } diff --git a/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java b/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java index 1ec6d4f55..b84800624 100644 --- a/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java +++ b/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java @@ -22,5 +22,12 @@ public class DTimedMetricTest { assertThat(stats.getTotal()).isGreaterThan(10); assertThat(stats.getMax()).isEqualTo(stats.getTotal()); + metric.addSinceNanos(start, 42); + + stats = metric.collect(true); + assertThat(stats.getCount()).isEqualTo(1); + assertThat(stats.getTotal()).isGreaterThan(10); + assertThat(stats.getMax()).isEqualTo(stats.getTotal()); + assertThat(stats.getBeanCount()).isEqualTo(42); } }