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 =