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