001package io.ebeaninternal.server.autotune; 002 003import io.ebean.bean.ObjectGraphOrigin; 004import io.ebeaninternal.server.querydefn.OrmQueryDetail; 005 006import java.util.ArrayList; 007import java.util.List; 008 009/** 010 * Profiling information collected. 011 */ 012public class AutoTuneCollection { 013 014 final List<Entry> entries = new ArrayList<>(); 015 016 public Entry add(ObjectGraphOrigin origin, OrmQueryDetail detail, String sourceQuery) { 017 Entry entry = new Entry(origin, detail, sourceQuery); 018 entries.add(entry); 019 return entry; 020 } 021 022 public List<Entry> getEntries() { 023 return entries; 024 } 025 026 /** 027 * Profiling entry at a given origin point. 028 */ 029 public static class Entry { 030 031 /** 032 * Profiling origin point. 033 */ 034 private final ObjectGraphOrigin origin; 035 036 /** 037 * The tuned query detail. 038 */ 039 private final OrmQueryDetail detail; 040 041 /** 042 * The original/existing query detail. 043 */ 044 private final String originalQuery; 045 046 /** 047 * Summary execution statistics for queries related to this origin point. 048 */ 049 private final List<EntryQuery> queries = new ArrayList<>(); 050 051 public Entry(ObjectGraphOrigin origin, OrmQueryDetail detail, String originalQuery) { 052 this.origin = origin; 053 this.detail = detail; 054 this.originalQuery = originalQuery; 055 } 056 057 public void addQuery(EntryQuery entryQuery) { 058 queries.add(entryQuery); 059 } 060 061 public ObjectGraphOrigin getOrigin() { 062 return origin; 063 } 064 065 public OrmQueryDetail getDetail() { 066 return detail; 067 } 068 069 public String getOriginalQuery() { 070 return originalQuery; 071 } 072 073 public List<EntryQuery> getQueries() { 074 return queries; 075 } 076 077 } 078 079 /** 080 * Summary query execution statistics for the origin point. 081 */ 082 public static class EntryQuery { 083 084 final String path; 085 final long exeCount; 086 final long totalBeanLoaded; 087 final long totalMicros; 088 089 public EntryQuery(String path, long exeCount, long totalBeanLoaded, long totalMicros) { 090 this.path = path; 091 this.exeCount = exeCount; 092 this.totalBeanLoaded = totalBeanLoaded; 093 this.totalMicros = totalMicros; 094 } 095 096 /** 097 * Return the relative path with empty string for the origin query. 098 */ 099 public String getPath() { 100 return path; 101 } 102 103 public long getExeCount() { 104 return exeCount; 105 } 106 107 public long getTotalBeanLoaded() { 108 return totalBeanLoaded; 109 } 110 111 public long getTotalMicros() { 112 return totalMicros; 113 } 114 } 115}