Revert "Decouple the number of repositories metrics from the cache"
Revert submission 425518
Reason for revert: See Issue 325029893, this metric should go into Gerrit core
Reverted changes: /q/submissionid:425518
Change-Id: I5777c1194bf416b62899222146b58ff1b246abdf
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/Module.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/Module.java
index fa024bd..899a33b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/Module.java
@@ -19,12 +19,10 @@
import com.google.gerrit.server.events.EventListener;
import com.google.inject.Inject;
import com.google.inject.Scopes;
-import com.google.inject.name.Names;
import com.googlesource.gerrit.plugins.gitrepometrics.collectors.FSMetricsCollector;
import com.googlesource.gerrit.plugins.gitrepometrics.collectors.GitRefsMetricsCollector;
import com.googlesource.gerrit.plugins.gitrepometrics.collectors.GitStatsMetricsCollector;
import com.googlesource.gerrit.plugins.gitrepometrics.collectors.MetricsCollector;
-import com.googlesource.gerrit.plugins.gitrepometrics.collectors.NumberOfProjectsCollector;
import java.util.concurrent.ScheduledExecutorService;
public class Module extends LifecycleModule {
@@ -54,10 +52,6 @@
DynamicSet.bind(binder(), MetricsCollector.class).to(FSMetricsCollector.class);
DynamicSet.bind(binder(), MetricsCollector.class).to(GitRefsMetricsCollector.class);
install(new UpdateGitMetricsTaskModule());
-
- bind(Long.class)
- .annotatedWith(Names.named(NumberOfProjectsCollector.NUM_PROJECTS))
- .toProvider(NumberOfProjectsCollector.class);
listener().to(RepoCountMetricRegister.class);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricRegister.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricRegister.java
index 8b54fef..221dda7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricRegister.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricRegister.java
@@ -14,31 +14,29 @@
package com.googlesource.gerrit.plugins.gitrepometrics;
+import javax.inject.Inject;
+
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Supplier;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.metrics.Description;
import com.google.gerrit.metrics.MetricMaker;
-import com.google.inject.Provider;
+import com.google.gerrit.server.project.ProjectCache;
import com.google.inject.Singleton;
-import com.google.inject.name.Named;
-import com.googlesource.gerrit.plugins.gitrepometrics.collectors.NumberOfProjectsCollector;
-import javax.inject.Inject;
@Singleton
public class RepoCountMetricRegister implements LifecycleListener {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
protected static final String REPO_COUNT_METRIC_NAME = "numberofprojects";
private final MetricMaker metricMaker;
- private final Provider<Long> numberOfProjectsProvider;
+ private final ProjectCache projectCache;
@VisibleForTesting
@Inject
- RepoCountMetricRegister(
- @Named(NumberOfProjectsCollector.NUM_PROJECTS) Provider<Long> numberOfProjectsProvider,
- MetricMaker metricMaker) {
+ RepoCountMetricRegister(ProjectCache projectCache, MetricMaker metricMaker) {
this.metricMaker = metricMaker;
- this.numberOfProjectsProvider = numberOfProjectsProvider;
+ this.projectCache = projectCache;
}
@Override
@@ -49,7 +47,12 @@
REPO_COUNT_METRIC_NAME,
Long.class,
new Description("Number of existing projects.").setGauge().setUnit("Count"),
- numberOfProjectsProvider::get);
+ new Supplier<Long>() {
+ @Override
+ public Long get() {
+ return (long) projectCache.all().size();
+ }
+ });
}
@Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/collectors/NumberOfProjectsCollector.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/collectors/NumberOfProjectsCollector.java
deleted file mode 100644
index 27c320b..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/collectors/NumberOfProjectsCollector.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2024 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.googlesource.gerrit.plugins.gitrepometrics.collectors;
-
-import com.google.gerrit.server.project.ProjectCache;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class NumberOfProjectsCollector implements Provider<Long> {
- public static final String NUM_PROJECTS = "num-projects";
- private final ProjectCache projectCache;
-
- @Inject
- NumberOfProjectsCollector(ProjectCache projectCache) {
- this.projectCache = projectCache;
- }
-
- @Override
- public Long get() {
- return (long) projectCache.all().size();
- }
-}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/FakeProjectCache.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/FakeProjectCache.java
new file mode 100644
index 0000000..96d8db9
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/FakeProjectCache.java
@@ -0,0 +1,44 @@
+// Copyright (C) 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.gitrepometrics;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.gerrit.entities.Project;
+import com.google.gerrit.entities.Project.NameKey;
+import com.google.gerrit.server.project.NullProjectCache;
+
+public class FakeProjectCache extends NullProjectCache {
+ private Set<Project.NameKey> projects;
+
+ @Override
+ public ImmutableSortedSet<NameKey> all() {
+ return ImmutableSortedSet.copyOf(projects);
+ }
+
+ public void setProjectCount(int projectCount) {
+ projects =
+ IntStream.range(0, projectCount)
+ .mapToObj(i -> NameKey.parse(String.valueOf(i)))
+ .collect(Collectors.toSet());
+ }
+
+ public FakeProjectCache(int count) {
+ setProjectCount(count);
+ }
+}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricTest.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricTest.java
index 725e8b7..bd84544 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/RepoCountMetricTest.java
@@ -16,22 +16,26 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import com.codahale.metrics.MetricRegistry;
-import com.google.common.base.Supplier;
import java.util.Optional;
-import java.util.concurrent.atomic.AtomicLong;
+
import org.junit.Before;
import org.junit.Test;
+import com.codahale.metrics.MetricRegistry;
+
+import com.google.common.base.Supplier;
+
public class RepoCountMetricTest {
private FakeMetricMaker fakeMetricMaker;
private MetricRegistry metricRegistry;
+ private FakeProjectCache fakeProjectCache;
private String repoCountMetricName;
@Before
public void setup() {
metricRegistry = new MetricRegistry();
fakeMetricMaker = new FakeMetricMaker(metricRegistry);
+ fakeProjectCache = new FakeProjectCache(0);
repoCountMetricName =
String.format(
"%s/%s/%s",
@@ -41,7 +45,7 @@
@Test
public void metricIsCorrectlyRegistered() {
RepoCountMetricRegister repoCountMetricRegister =
- new RepoCountMetricRegister(() -> 1L, fakeMetricMaker);
+ new RepoCountMetricRegister(fakeProjectCache, fakeMetricMaker);
repoCountMetricRegister.start();
@@ -52,9 +56,8 @@
@Test
public void metricIsUpdated() {
- AtomicLong numProjects = new AtomicLong();
RepoCountMetricRegister repoCountMetricRegister =
- new RepoCountMetricRegister(numProjects::get, fakeMetricMaker);
+ new RepoCountMetricRegister(fakeProjectCache, fakeMetricMaker);
repoCountMetricRegister.start();
@@ -66,7 +69,8 @@
assertTrue(!obj.isEmpty());
assertEquals(0, ((Long) obj.get().get()).longValue());
- numProjects.set(2);
+ fakeProjectCache.setProjectCount(2);
+
assertEquals(2, ((Long) obj.get().get()).longValue());
}
}