diff --git a/src/main/java/com/avaje/ebeaninternal/server/autofetch/service/DefaultAutoTuneService.java b/src/main/java/com/avaje/ebeaninternal/server/autofetch/service/DefaultAutoTuneService.java index 445b59715..d2d7242d5 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/autofetch/service/DefaultAutoTuneService.java +++ b/src/main/java/com/avaje/ebeaninternal/server/autofetch/service/DefaultAutoTuneService.java @@ -19,6 +19,8 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.List; @@ -39,6 +41,8 @@ public class DefaultAutoTuneService implements AutoTuneService { private final boolean profiling; + private final String serverName; + public DefaultAutoTuneService(SpiEbeanServer server, ServerConfig serverConfig) { AutoTuneConfig config = serverConfig.getAutoTuneConfig(); @@ -46,7 +50,7 @@ public class DefaultAutoTuneService implements AutoTuneService { this.profiling = config.isProfiling(); this.profileManager = new ProfileManager(config, server); this.queryTuner = new BaseQueryTuner(config, server, profileManager); - + this.serverName = server.getName(); this.skipCollectionOnShutdown = config.isSkipCollectionOnShutdown(); this.defaultGarbageCollectionWait = (long) config.getGarbageCollectionWait(); } @@ -78,16 +82,48 @@ public class DefaultAutoTuneService implements AutoTuneService { AutoTuneCollection autoTuneCollection = profileManager.profilingCollection(reset); List entries = autoTuneCollection.getEntries(); + for (AutoTuneCollection.Entry entry : entries) { saveProfilingEntry(document, entry); } + sortDocument(document); + SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd-HHmmss"); String now = df.format(new Date()); - File file = new File("ebean-autotune-profiling"+"-"+now+".xml"); + File file = new File("ebean-profiling"+"-"+serverName+"-"+now+".xml"); AutoTuneXmlWriter writer = new AutoTuneXmlWriter(); writer.write(document, file); + + logger.debug("profiling entries:{}", entries.size()); + } + + /** + * Set the diff and new entries by bean type followed by key. + */ + private void sortDocument(Autotune document) { + + ProfileDiff profileDiff = document.getProfileDiff(); + if (profileDiff != null) { + Collections.sort(profileDiff.getOrigin(), new OriginNameKeySort()); + } + ProfileNew profileNew = document.getProfileNew(); + if (profileNew != null) { + Collections.sort(profileNew.getOrigin(), new OriginNameKeySort()); + } + } + + class OriginNameKeySort implements Comparator { + + @Override + public int compare(Origin o1, Origin o2) { + int comp = o1.getBeanType().compareTo(o2.getBeanType()); + if (comp == 0) { + comp = o1.getKey().compareTo(o2.getKey()); + } + return comp; + } } private void saveProfilingEntry(Autotune document, AutoTuneCollection.Entry entry) { diff --git a/src/test/java/com/avaje/ebeaninternal/server/autofetch/TunedQueryInfoTest.java b/src/test/java/com/avaje/tests/autofetch/TunedQueryInfoTest.java similarity index 99% rename from src/test/java/com/avaje/ebeaninternal/server/autofetch/TunedQueryInfoTest.java rename to src/test/java/com/avaje/tests/autofetch/TunedQueryInfoTest.java index a27881bc5..5c4ff601f 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/autofetch/TunedQueryInfoTest.java +++ b/src/test/java/com/avaje/tests/autofetch/TunedQueryInfoTest.java @@ -1,4 +1,4 @@ -package com.avaje.ebeaninternal.server.autofetch; +package com.avaje.tests.autofetch; import java.util.List; import java.util.Set; diff --git a/src/test/java/com/avaje/ebeaninternal/server/autofetch/TunedQueryWithNullFetchedBeanTest.java b/src/test/java/com/avaje/tests/autofetch/TunedQueryWithNullFetchedBeanTest.java similarity index 97% rename from src/test/java/com/avaje/ebeaninternal/server/autofetch/TunedQueryWithNullFetchedBeanTest.java rename to src/test/java/com/avaje/tests/autofetch/TunedQueryWithNullFetchedBeanTest.java index 2e304b56b..501614941 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/autofetch/TunedQueryWithNullFetchedBeanTest.java +++ b/src/test/java/com/avaje/tests/autofetch/TunedQueryWithNullFetchedBeanTest.java @@ -1,4 +1,4 @@ -package com.avaje.ebeaninternal.server.autofetch; +package com.avaje.tests.autofetch; import java.util.List; import java.util.Set; diff --git a/src/test/java/com/avaje/ebeaninternal/server/transaction/TestAutoCommitDataSource.java b/src/test/java/com/avaje/tests/transaction/TestAutoCommitDataSource.java similarity index 97% rename from src/test/java/com/avaje/ebeaninternal/server/transaction/TestAutoCommitDataSource.java rename to src/test/java/com/avaje/tests/transaction/TestAutoCommitDataSource.java index b24b37316..75ec8d753 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/transaction/TestAutoCommitDataSource.java +++ b/src/test/java/com/avaje/tests/transaction/TestAutoCommitDataSource.java @@ -1,4 +1,4 @@ -package com.avaje.ebeaninternal.server.transaction; +package com.avaje.tests.transaction; import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.EbeanServer; diff --git a/src/test/java/com/avaje/ebeaninternal/server/transaction/TestBatchPersistCascade.java b/src/test/java/com/avaje/tests/transaction/TestBatchPersistCascade.java similarity index 98% rename from src/test/java/com/avaje/ebeaninternal/server/transaction/TestBatchPersistCascade.java rename to src/test/java/com/avaje/tests/transaction/TestBatchPersistCascade.java index 9e0cc9608..db66fb72f 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/transaction/TestBatchPersistCascade.java +++ b/src/test/java/com/avaje/tests/transaction/TestBatchPersistCascade.java @@ -1,4 +1,4 @@ -package com.avaje.ebeaninternal.server.transaction; +package com.avaje.tests.transaction; import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.Ebean; diff --git a/src/test/resources/ebean.properties b/src/test/resources/ebean.properties index 228b08aa6..12018186d 100644 --- a/src/test/resources/ebean.properties +++ b/src/test/resources/ebean.properties @@ -13,12 +13,6 @@ ebean.encryptKeyManager=com.avaje.tests.basic.encrypt.BasicEncyptKeyManager ebean.autotune.querytuning=true ebean.autotune.profiling=true -#ebean.autoTune.implicitmode=default_off -#ebean.autotune.implicitmode=default_onifempty -#ebean.autofetch.profiling.min=1 -#ebean.autofetch.profiling.base=10 -##ebean.autofetch.profiling.rate=0.05 -#ebean.autofetch.garbageCollectionOnShutdown=true ebean.ddl.generate=true