Merge branch 'stable-2.16'
* stable-2.16:
Add Metric containing Gerrit and Java version information
Change-Id: Ic06704d9bdf3d9e8e62b27969ed9039a61b96550
diff --git a/src/main/java/com/googlesource/gerrit/plugins/metricsreporterprometheus/GerritBuildInformationMetric.java b/src/main/java/com/googlesource/gerrit/plugins/metricsreporterprometheus/GerritBuildInformationMetric.java
new file mode 100644
index 0000000..0f567b5
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/metricsreporterprometheus/GerritBuildInformationMetric.java
@@ -0,0 +1,65 @@
+// Copyright (C) 2020 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.metricsreporterprometheus;
+
+import com.google.gerrit.common.Version;
+import io.prometheus.client.Counter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+
+public class GerritBuildInformationMetric {
+ static final Counter requests =
+ Counter.build()
+ .name("gerrit_build_info")
+ .help("Gerrit build information.")
+ .labelNames("javaversion", "version", "revision")
+ .register();
+
+ public void compute() {
+ GerritVersionInfo versionInfo = extractVersionComponents();
+ requests.labels(getJavaVersion(), versionInfo.version, versionInfo.revision);
+ }
+
+ private static String getJavaVersion() {
+ RuntimeMXBean mxBean = ManagementFactory.getRuntimeMXBean();
+ return String.format("%s(%s)", mxBean.getSpecVersion(), mxBean.getVmVersion());
+ }
+
+ private static GerritVersionInfo extractVersionComponents() {
+ GerritVersionInfo versionInfo = new GerritVersionInfo();
+ String fullVersion = Version.getVersion();
+
+ if (fullVersion == null) {
+ return versionInfo;
+ }
+
+ String[] versionComponents = fullVersion.split("-");
+
+ versionInfo.version = versionComponents[0];
+
+ if (versionComponents.length > 2) {
+ versionInfo.revision = versionComponents.length > 2 ? versionComponents[2].substring(1) : "";
+ } else {
+ versionInfo.revision = "";
+ }
+
+ return versionInfo;
+ }
+
+ private static class GerritVersionInfo {
+ String revision = "unknown";
+ String version = "unknown";
+ }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/metricsreporterprometheus/GerritPrometheusExporter.java b/src/main/java/com/googlesource/gerrit/plugins/metricsreporterprometheus/GerritPrometheusExporter.java
index b7c96cc..0dba67a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/metricsreporterprometheus/GerritPrometheusExporter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/metricsreporterprometheus/GerritPrometheusExporter.java
@@ -42,6 +42,7 @@
private static final String PROMETHEUS_BEARER_TOKEN = "prometheusBearerToken";
private static final String EXCLUDE_KEY = "excludeMetrics";
+ private final GerritBuildInformationMetric gerritBuildInfoMetric;
private final CapabilityChecker capabilityChecker;
private final String prometheusBearerToken;
@@ -54,6 +55,7 @@
this.capabilityChecker = capabilityChecker;
this.prometheusBearerToken =
cfgFactory.getFromGerritConfig(pluginName).getString(PROMETHEUS_BEARER_TOKEN);
+ this.gerritBuildInfoMetric = new GerritBuildInformationMetric();
List<Pattern> excludes =
Arrays.stream(cfgFactory.getFromGerritConfig(pluginName).getStringList(EXCLUDE_KEY))
@@ -73,6 +75,7 @@
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
if (capabilityChecker.canViewMetrics() || canExportUsingPrometheusBearerToken(req)) {
+ gerritBuildInfoMetric.compute();
super.service(req, res);
} else {
HttpServletResponse httpResponse = (HttpServletResponse) res;