Add PredicateCache statistics to query outputs Change-Id: Ie4f3c716b506cae4da3e46f04a7f747bafc4954c
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java b/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java index 6540ad2..21d1ed3 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java +++ b/src/main/java/com/googlesource/gerrit/plugins/task/PredicateCache.java
@@ -39,6 +39,11 @@ import org.eclipse.jgit.lib.Config; public class PredicateCache { + public static class Statistics { + protected long hits; + protected long misses; + } + protected final ChangeQueryBuilder cqb; protected final Set<String> cacheableByBranchPredicateClassNames; protected final CurrentUser user; @@ -46,6 +51,8 @@ protected final Map<String, ThrowingProvider<Predicate<ChangeData>, QueryParseException>> predicatesByQuery = new HashMap<>(); + protected Statistics statistics; + @Inject public PredicateCache( @GerritServerConfig Config config, @@ -60,6 +67,14 @@ config.getStringList(pluginName, "cacheable-predicates", "byBranch-className"))); } + public void initStatistics() { + statistics = new Statistics(); + } + + public Statistics getStatistics() { + return statistics; + } + public boolean matchWithExceptions(ChangeData c, String query) throws QueryParseException, StorageException { if ("true".equalsIgnoreCase(query)) { @@ -72,8 +87,14 @@ ThrowingProvider<Predicate<ChangeData>, QueryParseException> predProvider = predicatesByQuery.get(query); if (predProvider != null) { + if (statistics != null) { + statistics.hits++; + } return predProvider.get(); } + if (statistics != null) { + statistics.misses++; + } // never seen 'query' before try { Predicate<ChangeData> pred = cqb.parse(query);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java index e77b97a..0c6a05c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java +++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
@@ -54,6 +54,7 @@ public long numberOfChanges; public long numberOfNodes; public long numberOfTaskPluginAttributes; + public PredicateCache.Statistics predicateCache; } public static class TaskAttribute { @@ -315,6 +316,7 @@ public void initStatistics() { if (options.includeStatistics) { statistics = new Statistics(); + predicateCache.initStatistics(); } } @@ -323,6 +325,7 @@ statistics.numberOfChanges = pluginInfosByChange.size(); statistics.numberOfTaskPluginAttributes = pluginInfosByChange.values().stream().filter(tpa -> tpa != null).count(); + statistics.predicateCache = predicateCache.getStatistics(); } return statistics; }