Only collect stats for enabled repositories
Currently stats are collected for all the repositories.
Allow collection only for the enabled repositories.
Bug: Issue 15972
Change-Id: Ifd638f97cdac401cea4a6dbdc554992810f88e76
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java
index fa00623..dfabe10 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCache.java
@@ -82,4 +82,8 @@
public static String getMetricName(String metricName, String projectName) {
return String.format("%s_%s", metricName, projectName).toLowerCase(Locale.ROOT);
}
+
+ public boolean shouldCollectStats(String projectName) {
+ return projects.stream().anyMatch(p -> p.equals(projectName));
+ }
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java
index ad970b5..1411c61 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java
@@ -23,19 +23,27 @@
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private final ExecutorService executor;
private final UpdateGitMetricsTask.Factory updateGitMetricsTaskFactory;
+ private GitRepoMetricsCache gitRepoMetricsCache;
@Inject
GitRepoUpdateListener(
@UpdateGitMetricsExecutor ExecutorService executor,
- UpdateGitMetricsTask.Factory updateGitMetricsTaskFactory) {
+ UpdateGitMetricsTask.Factory updateGitMetricsTaskFactory,
+ GitRepoMetricsCache gitRepoMetricsCache) {
this.executor = executor;
this.updateGitMetricsTaskFactory = updateGitMetricsTaskFactory;
+ this.gitRepoMetricsCache = gitRepoMetricsCache;
}
@Override
public void onGitReferenceUpdated(Event event) {
String projectName = event.getProjectName();
logger.atFine().log("Got an update for project %s", projectName);
+
+ if (!gitRepoMetricsCache.shouldCollectStats(projectName)) {
+ return;
+ }
+
UpdateGitMetricsTask updateGitMetricsTask = updateGitMetricsTaskFactory.create(projectName);
executor.execute(updateGitMetricsTask);
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java
index c2e4a4e..7a3cf5a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoMetricsCacheTest.java
@@ -22,16 +22,23 @@
import com.googlesource.gerrit.plugins.gitrepometrics.collectors.GitStats;
import java.io.IOException;
import java.util.Collections;
+import org.junit.Before;
import org.junit.Test;
public class GitRepoMetricsCacheTest {
GitRepoMetricsCache gitRepoMetricsCacheModule;
GitRepoMetricsConfig gitRepoMetricsConfig;
FakeMetricMaker fakeMetricMaker;
+ private ConfigSetupUtils configSetupUtils;
+ private final String enabledRepo = "enabledRepo";
+
+ @Before
+ public void setupRepo() throws IOException {
+ configSetupUtils = new ConfigSetupUtils(Collections.singletonList(enabledRepo));
+ }
@Test
public void shouldRegisterMetrics() throws IOException {
- ConfigSetupUtils configSetupUtils = new ConfigSetupUtils(Collections.singletonList("repo1"));
gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
fakeMetricMaker = new FakeMetricMaker();
gitRepoMetricsCacheModule = new GitRepoMetricsCache(fakeMetricMaker, gitRepoMetricsConfig);
@@ -39,6 +46,25 @@
assertThat(fakeMetricMaker.callsCounter).isEqualTo(GitStats.availableMetrics().size());
}
+ @Test
+ public void shouldCollectStatsForEnabledRepo() throws IOException {
+ gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
+ gitRepoMetricsCacheModule =
+ new GitRepoMetricsCache(new FakeMetricMaker(), gitRepoMetricsConfig);
+
+ assertThat(gitRepoMetricsCacheModule.shouldCollectStats(enabledRepo)).isTrue();
+ }
+
+ @Test
+ public void shouldNotCollectStatsForDisabledRepo() throws IOException {
+ String disabledRepo = "disabledRepo";
+ gitRepoMetricsConfig = configSetupUtils.getGitRepoMetricsConfig();
+ gitRepoMetricsCacheModule =
+ new GitRepoMetricsCache(new FakeMetricMaker(), gitRepoMetricsConfig);
+
+ assertThat(gitRepoMetricsCacheModule.shouldCollectStats(disabledRepo)).isFalse();
+ }
+
private class FakeMetricMaker extends DisabledMetricMaker {
Integer callsCounter;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
index 1975e8c..0747b23 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
@@ -24,6 +24,7 @@
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
+import com.google.gerrit.metrics.DisabledMetricMaker;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.testing.InMemoryModule;
import com.google.gerrit.testing.InMemoryRepositoryManager;
@@ -33,6 +34,7 @@
import com.google.inject.Injector;
import com.google.inject.TypeLiteral;
import java.io.IOException;
+import java.util.Collections;
import java.util.concurrent.ExecutorService;
import org.eclipse.jgit.lib.Repository;
import org.junit.Before;
@@ -48,11 +50,21 @@
private Repository repository;
ArgumentCaptor<UpdateGitMetricsTask> valueCapture =
ArgumentCaptor.forClass(UpdateGitMetricsTask.class);
+ private GitRepoMetricsCache gitRepoMetricsCache;
+
+ private final String disabledProject = "disabledProject";
+ private final Project.NameKey disabledProjectNameKey = Project.nameKey(disabledProject);
+ private Repository disabledRepository;
@Inject private UpdateGitMetricsTask.Factory updateGitMetricsTaskFactory;
@Before
public void setupRepo() throws IOException {
+ ConfigSetupUtils configSetupUtils =
+ new ConfigSetupUtils(Collections.singletonList(testProject));
+ gitRepoMetricsCache =
+ new GitRepoMetricsCache(
+ new DisabledMetricMaker(), configSetupUtils.getGitRepoMetricsConfig());
AbstractModule m =
new AbstractModule() {
@@ -63,6 +75,7 @@
bind(new TypeLiteral<String>() {})
.annotatedWith(PluginName.class)
.toInstance(ConfigSetupUtils.pluginName);
+ bind(GitRepoMetricsCache.class).toInstance(gitRepoMetricsCache);
}
};
Injector injector = Guice.createInjector(m);
@@ -70,12 +83,14 @@
reset(mockedExecutorService);
gitRepoUpdateListener =
- new GitRepoUpdateListener(mockedExecutorService, updateGitMetricsTaskFactory);
+ new GitRepoUpdateListener(
+ mockedExecutorService, updateGitMetricsTaskFactory, gitRepoMetricsCache);
repository = repoManager.createRepository(testProjectNameKey);
+ disabledRepository = repoManager.createRepository(disabledProjectNameKey);
}
@Test
- public void shouldUpdateMetrics() {
+ public void shouldUpdateMetricsIfProjectIsEnabled() {
doNothing().when(mockedExecutorService).execute(valueCapture.capture());
gitRepoUpdateListener.onGitReferenceUpdated(new TestEvent(testProject));
UpdateGitMetricsTask expectedUpdateGitMetricsTask =