diff --git a/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java b/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java index 9bcf2d414..d4ffd4f29 100644 --- a/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java +++ b/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java @@ -37,6 +37,11 @@ public class BasicMetricVisitor extends AbstractMetricVisitor implements ServerM return name; } + @Override + public ServerMetricsAsJson asJson() { + return new MetricsAsJson(this); + } + @Override public List timedMetrics() { return timed; diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaInfoManager.java b/ebean-api/src/main/java/io/ebean/meta/MetaInfoManager.java index 8a925df93..f0bcdc586 100644 --- a/ebean-api/src/main/java/io/ebean/meta/MetaInfoManager.java +++ b/ebean-api/src/main/java/io/ebean/meta/MetaInfoManager.java @@ -16,17 +16,6 @@ public interface MetaInfoManager { */ ServerMetrics collectMetrics(); - /** - * Given the already collected metrics provide them in json form. - *

- * Expected to be used when we wish to collect the metrics and report them - * to some service and additionally format them as json for say output into - * an application log. - * - * @param metrics The already collected metrics - */ - ServerMetricsAsJson metricsAsJson(ServerMetrics metrics); - /** * Collect the metrics in raw JSON form. *

{@code
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java b/ebean-api/src/main/java/io/ebean/meta/MetricsAsJson.java
similarity index 80%
rename from ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
rename to ebean-api/src/main/java/io/ebean/meta/MetricsAsJson.java
index dd01c1198..55543d9a6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetricsAsJson.java
@@ -1,24 +1,13 @@
-package io.ebeaninternal.server.core;
-
-import io.ebean.Database;
-import io.ebean.meta.MetaCountMetric;
-import io.ebean.meta.MetaMetric;
-import io.ebean.meta.MetaQueryMetric;
-import io.ebean.meta.MetaTimedMetric;
-import io.ebean.meta.ServerMetrics;
-import io.ebean.meta.ServerMetricsAsJson;
-import io.ebean.meta.SortMetric;
+package io.ebean.meta;
 
 import java.io.IOException;
 import java.io.StringWriter;
 import java.util.Comparator;
 import java.util.List;
 
-final class DumpMetricsJson implements ServerMetricsAsJson {
+final class MetricsAsJson implements ServerMetricsAsJson {
 
-  private final Database database;
   private final ServerMetrics metrics;
-  private final String name;
   private Appendable writer;
   /**
    * By default, include sql and location attributes for the initial collection only.
@@ -31,16 +20,8 @@ final class DumpMetricsJson implements ServerMetricsAsJson {
   private int listCounter;
   private int objKeyCounter;
 
-  DumpMetricsJson(Database database) {
-    this.database = database;
-    this.name = database.name();
-    this.metrics = null;
-  }
-
-  DumpMetricsJson(ServerMetrics metrics) {
-    this.database = null;
+  MetricsAsJson(ServerMetrics metrics) {
     this.metrics = metrics;
-    this.name = metrics.name();
   }
 
   @Override
@@ -76,28 +57,24 @@ final class DumpMetricsJson implements ServerMetricsAsJson {
   @Override
   public String json() {
     writer = new StringWriter();
-    collect(obtainMetrics());
+    collect();
     return writer.toString();
   }
 
   @Override
   public void write(Appendable buffer) {
     writer = buffer;
-    collect(obtainMetrics());
+    collect();
   }
 
-  private ServerMetrics obtainMetrics() {
-    return metrics != null ? metrics :  database.metaInfo().collectMetrics();
-  }
-
-  private void collect(ServerMetrics serverMetrics) {
+  private void collect() {
     try {
       start();
-      for (MetaTimedMetric metric : serverMetrics.timedMetrics()) {
+      for (MetaTimedMetric metric : metrics.timedMetrics()) {
         logTimed(metric);
       }
 
-      List countMetrics = serverMetrics.countMetrics();
+      List countMetrics = metrics.countMetrics();
       if (!countMetrics.isEmpty()) {
         if (sortBy != null) {
           countMetrics.sort(SortMetric.COUNT_NAME);
@@ -107,7 +84,7 @@ final class DumpMetricsJson implements ServerMetricsAsJson {
         }
       }
 
-      List queryMetrics = serverMetrics.queryMetrics();
+      List queryMetrics = metrics.queryMetrics();
       if (!queryMetrics.isEmpty()) {
         if (sortBy != null) {
           queryMetrics.sort(sortBy);
@@ -126,7 +103,7 @@ final class DumpMetricsJson implements ServerMetricsAsJson {
     if (withHeader) {
       objStart();
       key("db");
-      val(name);
+      val(metrics.name());
       key("metrics");
       listStart();
     }
diff --git a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
index 3d2955638..385f4578d 100644
--- a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
+++ b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
@@ -12,6 +12,11 @@ public interface ServerMetrics {
    */
   String name();
 
+  /**
+   * Return ServerMetricsAsJson to build the metrics as JSON content.
+   */
+  ServerMetricsAsJson asJson();
+
   /**
    * Return timed metrics for Transactions, labelled SqlQuery, labelled SqlUpdate.
    */
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java
index efde5b22f..3dd8c84c4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java
@@ -47,14 +47,9 @@ final class DefaultMetaInfoManager implements MetaInfoManager {
     return visitBasic();
   }
 
-  @Override
-  public ServerMetricsAsJson metricsAsJson(ServerMetrics metrics) {
-    return new DumpMetricsJson(metrics);
-  }
-
   @Override
   public ServerMetricsAsJson collectMetricsAsJson() {
-    return new DumpMetricsJson(server);
+    return collectMetrics().asJson();
   }
 
   @Override
diff --git a/ebean-test/src/test/java/io/ebean/xtest/base/DtoQueryTest.java b/ebean-test/src/test/java/io/ebean/xtest/base/DtoQueryTest.java
index a97dbc39a..c1576f135 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/base/DtoQueryTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/base/DtoQueryTest.java
@@ -24,7 +24,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class DtoQueryTest extends BaseTestCase {
+class DtoQueryTest extends BaseTestCase {
 
   private static final Logger log = LoggerFactory.getLogger(DtoQueryTest.class);
 
@@ -32,8 +32,7 @@ public class DtoQueryTest extends BaseTestCase {
   private final AtomicInteger rowCount = new AtomicInteger();
 
   @Test
-  public void dto_findList_constructorMatch() {
-
+  void dto_findList_constructorMatch() {
     ResetBasicData.reset();
     resetAllMetrics();
 
@@ -57,8 +56,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findEach_constructorMatch() {
-
+  void dto_findEach_constructorMatch() {
     ResetBasicData.reset();
 
     LoggedSql.start();
@@ -71,8 +69,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findEachWhile_constructorMatch() {
-
+  void dto_findEachWhile_constructorMatch() {
     ResetBasicData.reset();
 
     LoggedSql.start();
@@ -93,7 +90,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findEachBatch() {
+  void dto_findEachBatch() {
     seedData(); // 15 rows inserted to fetch
 
     resetFindEachCounts();
@@ -145,8 +142,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findOneEmpty() {
-
+  void dto_findOneEmpty() {
     ResetBasicData.reset();
 
     Optional rob = server().findDto(DCust.class, "select id, name from o_customer where name = :name")
@@ -163,8 +159,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findOne() {
-
+  void dto_findOne() {
     ResetBasicData.reset();
 
     DCust fiona = server().findDto(DCust.class, "select id, name from o_customer where name = :name")
@@ -181,7 +176,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void setParameter() {
+  void setParameter() {
     ResetBasicData.reset();
 
     final List list =
@@ -195,7 +190,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void setParameters() {
+  void setParameters() {
     ResetBasicData.reset();
 
     final List list =
@@ -208,8 +203,7 @@ public class DtoQueryTest extends BaseTestCase {
 
   @ForPlatform(Platform.POSTGRES)
   @Test
-  public void dto_bindList_usingPostrgesAnyWithPositionedParameter() {
-
+  void dto_bindList_usingPostrgesAnyWithPositionedParameter() {
     ResetBasicData.reset();
 
     LoggedSql.start();
@@ -243,8 +237,7 @@ public class DtoQueryTest extends BaseTestCase {
 
   @ForPlatform(Platform.POSTGRES)
   @Test
-  public void sql_bindListParam_usingPostrgesAnyWithPositionedParameter() {
-
+  void sql_bindListParam_usingPostrgesAnyWithPositionedParameter() {
     ResetBasicData.reset();
 
     List ids = Arrays.asList(1, 2);
@@ -264,8 +257,7 @@ public class DtoQueryTest extends BaseTestCase {
 
   @ForPlatform(Platform.POSTGRES)
   @Test
-  public void sqlUpdate_bindListParam_usingPostrgesAnyWithPositionedParameter() {
-
+  void sqlUpdate_bindListParam_usingPostrgesAnyWithPositionedParameter() {
     ResetBasicData.reset();
 
     List ids = Arrays.asList(999999999, 999999998);
@@ -279,16 +271,12 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_queryPlanHits() {
-
+  void dto_queryPlanHits() {
     ResetBasicData.reset();
-
     resetAllMetrics();
 
     String[] names = {"Rob", "Fiona", "Shrek"};
-
     for (String name : names) {
-
       List custs = server().findDto(DCust.class, "select c3.id, c3.name from o_customer c3 where c3.name = :name")
         .setLabel("basic")
         .setParameter("name", name)
@@ -309,7 +297,6 @@ public class DtoQueryTest extends BaseTestCase {
     assertThat(queryMetric.count()).isEqualTo(3);
     assertThat(queryMetric.name()).isEqualTo("dto.DCust_basic");
 
-
     server().findDto(DCust.class, "select c4.id, c4.name from o_customer c4 where lower(c4.name) = :name")
       .setLabel("basic2")
       .setParameter("name", "rob")
@@ -322,13 +309,12 @@ public class DtoQueryTest extends BaseTestCase {
 
     log.info("stats " + stats);
 
-    String asJson = server().metaInfo().metricsAsJson(metric2).withHash(false).withNewLine(false).json();
+    String asJson = metric2.asJson().withHash(false).withNewLine(false).json();
     assertThat(asJson).contains("dto.DCust_basic2");
   }
 
   @Test
-  public void dto_findList_relaxedMode() {
-
+  void dto_findList_relaxedMode() {
     ResetBasicData.reset();
 
     List list = server().findDto(DCust3.class, "select id, name, 42 as total, '42' as something_we_cannot_map from o_customer")
@@ -340,8 +326,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findList_relaxedMode_defaultConstructor() {
-
+  void dto_findList_relaxedMode_defaultConstructor() {
     ResetBasicData.reset();
 
     List list = server().findDto(DCust2.class, "select id, '42' as something_we_cannot_map, name from o_customer")
@@ -353,8 +338,7 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findList_constructorPlusMatch() {
-
+  void dto_findList_constructorPlusMatch() {
     ResetBasicData.reset();
 
     String sql = "select c.id, c.name, count(o.id) as totalOrders " +
@@ -372,20 +356,17 @@ public class DtoQueryTest extends BaseTestCase {
   }
 
   @Test
-  public void dto_findList_setters() {
-
+  void dto_findList_setters() {
     ResetBasicData.reset();
 
     DtoQuery dtoQuery = server().findDto(DCust2.class, "select id, name from o_customer");
 
     List list = dtoQuery.findList();
-
     assertThat(list).isNotEmpty();
   }
 
   @Test
-  public void dto3_findList_constructorMatch() {
-
+  void dto3_findList_constructorMatch() {
     ResetBasicData.reset();
 
     List robs = server().findDto(DCust3.class, "select id, name, 42 as totalOrders from o_customer where name like ?")
@@ -393,21 +374,18 @@ public class DtoQueryTest extends BaseTestCase {
       .setMaxRows(10)
       .findList();
 
-
     log.info(robs.toString());
     assertThat(robs).isNotEmpty();
   }
 
   @Test
-  public void dto3_findList_settersMatch() {
-
+  void dto3_findList_settersMatch() {
     ResetBasicData.reset();
 
     List robs = server().findDto(DCust3.class, "select id, name from o_customer where name = :name")
       .setParameter("name", "Rob")
       .findList();
 
-
     log.info(robs.toString());
     assertThat(robs).isNotEmpty();
   }