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;
}