Add Preloader statistics to query outputs
Change-Id: Ie0ca5a3581c1063b8cbbde8f6d8c64b2f3ffe9fe
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java b/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java
index b240c3b..1de4c76 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/Preloader.java
@@ -29,9 +29,17 @@
/** Use to pre-load a task definition with values from its preload-task definition. */
public class Preloader {
+ public static class Statistics {
+ protected long hits;
+ protected long misses;
+ protected long preloaded;
+ }
+
protected final TaskConfigFactory taskConfigFactory;
protected final Map<TaskExpressionKey, Optional<Task>> optionalTaskByExpression = new HashMap<>();
+ protected Statistics statistics;
+
@Inject
public Preloader(TaskConfigFactory taskConfigFactory) {
this.taskConfigFactory = taskConfigFactory;
@@ -68,9 +76,15 @@
throws ConfigInvalidException, IOException {
Optional<Task> task = optionalTaskByExpression.get(expression.key);
if (task == null) {
+ if (statistics != null) {
+ statistics.misses++;
+ }
task = preloadOptionalTask(expression);
optionalTaskByExpression.put(expression.key, task);
}
+ if (statistics != null) {
+ statistics.hits++;
+ }
return task;
}
@@ -83,6 +97,9 @@
public Task preload(Task definition) throws ConfigInvalidException, IOException {
String expression = definition.preloadTask;
if (expression != null) {
+ if (statistics != null) {
+ statistics.preloaded++;
+ }
Optional<Task> preloadFrom =
getOptionalTask(new TaskExpression(definition.file(), expression));
if (preloadFrom.isPresent()) {
@@ -195,4 +212,12 @@
extended.putAll(map);
return extended;
}
+
+ public void initStatistics() {
+ statistics = new Statistics();
+ }
+
+ public Statistics getStatistics() {
+ return statistics;
+ }
}
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 0c6a05c..e683034 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
@@ -55,6 +55,7 @@
public long numberOfNodes;
public long numberOfTaskPluginAttributes;
public PredicateCache.Statistics predicateCache;
+ public Preloader.Statistics preloader;
}
public static class TaskAttribute {
@@ -317,6 +318,7 @@
if (options.includeStatistics) {
statistics = new Statistics();
predicateCache.initStatistics();
+ definitions.preloader.initStatistics();
}
}
@@ -326,6 +328,7 @@
statistics.numberOfTaskPluginAttributes =
pluginInfosByChange.values().stream().filter(tpa -> tpa != null).count();
statistics.predicateCache = predicateCache.getStatistics();
+ statistics.preloader = definitions.preloader.getStatistics();
}
return statistics;
}