From 58c49b784a23948fea56b67183bc2499ddafe1a4 Mon Sep 17 00:00:00 2001 From: Andrew Azores Date: Thu, 29 Aug 2024 12:56:35 -0400 Subject: [PATCH] feat(about): reimplement git build info in /health (#589) --- pom.xml | 24 +++++++++ src/main/java/io/cryostat/BuildInfo.java | 65 ++++++++++++++++++++++++ src/main/java/io/cryostat/Health.java | 5 +- 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/cryostat/BuildInfo.java diff --git a/pom.xml b/pom.xml index e079583e8..6425a900c 100644 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,7 @@ 2.2.5 4.1.108.Final 3.6.0 + 3.3.0 3.7.1 4.8.6 @@ -345,6 +346,29 @@ + + org.codehaus.mojo + exec-maven-plugin + ${org.codehaus.mojo.exec.plugin.version} + + + generate-git-version + generate-resources + + exec + + + git + + rev-parse + --verify + HEAD + + ${project.build.directory}/classes/META-INF/gitinfo + + + + org.codehaus.mojo build-helper-maven-plugin diff --git a/src/main/java/io/cryostat/BuildInfo.java b/src/main/java/io/cryostat/BuildInfo.java new file mode 100644 index 000000000..dce54b9fb --- /dev/null +++ b/src/main/java/io/cryostat/BuildInfo.java @@ -0,0 +1,65 @@ +/* + * Copyright The Cryostat Authors. + * + * 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 io.cryostat; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.jboss.logging.Logger; + +@ApplicationScoped +public class BuildInfo { + + private static final String RESOURCE_LOCATION = "META-INF/gitinfo"; + + @Inject Logger logger; + + private final GitInfo gitinfo = new GitInfo(); + + @JsonProperty("git") + public GitInfo getGitInfo() { + return gitinfo; + } + + public class GitInfo { + public String getHash() { + try (BufferedReader br = + new BufferedReader( + new InputStreamReader( + Thread.currentThread() + .getContextClassLoader() + .getResourceAsStream(RESOURCE_LOCATION), + StandardCharsets.UTF_8))) { + return br.lines() + .findFirst() + .orElseThrow( + () -> + new IllegalStateException( + String.format( + "Resource file %s is empty", + RESOURCE_LOCATION))) + .trim(); + } catch (Exception e) { + logger.warn("Version retrieval exception", e); + return "unknown"; + } + } + } +} diff --git a/src/main/java/io/cryostat/Health.java b/src/main/java/io/cryostat/Health.java index 5e71539ff..097efdf75 100644 --- a/src/main/java/io/cryostat/Health.java +++ b/src/main/java/io/cryostat/Health.java @@ -64,8 +64,9 @@ class Health { @ConfigProperty(name = ConfigProperties.REPORTS_SIDECAR_URL) String reportsClientURL; - @Inject Logger logger; + @Inject BuildInfo buildInfo; @Inject WebClient webClient; + @Inject Logger logger; @GET @Blocking @@ -98,6 +99,8 @@ public Response health() { Map.of( "cryostatVersion", String.format("v%s", version), + "build", + buildInfo, "dashboardConfigured", dashboardURL.isPresent(), "dashboardAvailable",