From d83cdc9a543601a2537c0ce8f3987c8e135b4e1b Mon Sep 17 00:00:00 2001 From: David Latorre Date: Mon, 3 Dec 2018 18:28:51 +0000 Subject: [PATCH 1/3] Version metric cannot be a String as some users want to send the metrics to graphite. --- .../main/java/com/hotels/styx/Version.java | 29 +++++++++++++++++++ .../java/com/hotels/styx/VersionTest.java | 6 ++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/components/proxy/src/main/java/com/hotels/styx/Version.java b/components/proxy/src/main/java/com/hotels/styx/Version.java index 174a2f00e1..f84b3661df 100644 --- a/components/proxy/src/main/java/com/hotels/styx/Version.java +++ b/components/proxy/src/main/java/com/hotels/styx/Version.java @@ -23,8 +23,12 @@ import java.io.InputStreamReader; import java.io.Reader; import java.util.Objects; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static com.google.common.base.Objects.toStringHelper; +import static java.lang.Integer.parseInt; import static org.slf4j.LoggerFactory.getLogger; /** @@ -32,6 +36,8 @@ */ public class Version { private static final Logger LOG = getLogger(Version.class); + private static final Pattern VERSION_FORMAT = Pattern.compile("(\\d+)\\.(\\d+)[-.](\\d+).*"); + private final String releaseTag; @@ -74,6 +80,29 @@ public String releaseVersion() { return releaseTag.substring(firstDot + 1); } + public Optional buildNumber() { + String releaseVersion = releaseVersion(); + Optional buildNumberAsString = extractFinalInt(releaseVersion); + return buildNumberAsString.flatMap(this::parseInteger); + } + + private Optional extractFinalInt(String versionString) { + Matcher m = VERSION_FORMAT.matcher(versionString); + if (!m.matches()){ + return Optional.empty(); + } else { + return Optional.of(m.group(3)); + } + } + + private Optional parseInteger(String string) { + try { + return Optional.of(parseInt(string)); + } catch (NumberFormatException e) { + return Optional.empty(); + } + } + @Override diff --git a/components/proxy/src/test/java/com/hotels/styx/VersionTest.java b/components/proxy/src/test/java/com/hotels/styx/VersionTest.java index 3e07aa2900..c7157fc7d3 100644 --- a/components/proxy/src/test/java/com/hotels/styx/VersionTest.java +++ b/components/proxy/src/test/java/com/hotels/styx/VersionTest.java @@ -17,9 +17,10 @@ import org.testng.annotations.Test; +import java.util.Optional; + import static com.hotels.styx.Version.newVersion; import static com.hotels.styx.Version.readVersionFrom; -import static com.hotels.styx.support.matchers.IsOptional.isPresent; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -30,11 +31,12 @@ public class VersionTest { public void readBuildInfoFromTheSpecifiedPath() { Version version = readVersionFrom("/version.json"); assertThat(version.releaseTag(), containsString("STYX")); - assertThat(version.releaseVersion(), is("0.0-125")); + assertThat(version.buildNumber(), is(Optional.of(125))); } @Test public void willCreateAnEmptyBuildInfoIfFailsToRead() { assertThat(readVersionFrom("version.txt"), is(newVersion())); } + } \ No newline at end of file From 249c4428b9cc3139f5ee9a9b43469043c526c68b Mon Sep 17 00:00:00 2001 From: David Latorre Date: Thu, 6 Dec 2018 10:00:27 +0000 Subject: [PATCH 2/3] Fix checkstyle violations --- components/proxy/src/main/java/com/hotels/styx/Version.java | 4 +--- .../java/com/hotels/styx/proxy/ProxyConnectorFactory.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/components/proxy/src/main/java/com/hotels/styx/Version.java b/components/proxy/src/main/java/com/hotels/styx/Version.java index f84b3661df..0497e1b177 100644 --- a/components/proxy/src/main/java/com/hotels/styx/Version.java +++ b/components/proxy/src/main/java/com/hotels/styx/Version.java @@ -88,7 +88,7 @@ public Optional buildNumber() { private Optional extractFinalInt(String versionString) { Matcher m = VERSION_FORMAT.matcher(versionString); - if (!m.matches()){ + if (!m.matches()) { return Optional.empty(); } else { return Optional.of(m.group(3)); @@ -103,8 +103,6 @@ private Optional parseInteger(String string) { } } - - @Override public String toString() { return toStringHelper(this) diff --git a/components/proxy/src/main/java/com/hotels/styx/proxy/ProxyConnectorFactory.java b/components/proxy/src/main/java/com/hotels/styx/proxy/ProxyConnectorFactory.java index 0e7114b237..dce2426621 100644 --- a/components/proxy/src/main/java/com/hotels/styx/proxy/ProxyConnectorFactory.java +++ b/components/proxy/src/main/java/com/hotels/styx/proxy/ProxyConnectorFactory.java @@ -71,7 +71,7 @@ class ProxyConnectorFactory implements ServerConnectorFactory { MetricRegistry metrics, HttpErrorStatusListener errorStatusListener, String unwiseCharacters, - ResponseEnhancer responseEnhancer, + ResponseEnhancer responseEnhancer, boolean requestTracking) { this.serverConfig = requireNonNull(serverConfig); this.metrics = requireNonNull(metrics); From 532f09a5d00a7b3fd00f3f81e795d89485af8d47 Mon Sep 17 00:00:00 2001 From: David Latorre Date: Thu, 20 Dec 2018 14:12:20 +0000 Subject: [PATCH 3/3] Missing changes for Version metric. --- .../com/hotels/styx/startup/CoreMetrics.java | 17 ++++++++++++++--- .../hotels/styx/startup/CoreMetricsTest.java | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/components/proxy/src/main/java/com/hotels/styx/startup/CoreMetrics.java b/components/proxy/src/main/java/com/hotels/styx/startup/CoreMetrics.java index 985a45e892..932ed1446b 100644 --- a/components/proxy/src/main/java/com/hotels/styx/startup/CoreMetrics.java +++ b/components/proxy/src/main/java/com/hotels/styx/startup/CoreMetrics.java @@ -30,6 +30,7 @@ import java.lang.management.RuntimeMXBean; import java.time.Duration; +import java.util.Optional; import static java.lang.String.format; import static java.lang.management.ManagementFactory.getPlatformMBeanServer; @@ -46,13 +47,23 @@ private CoreMetrics() { } public static void registerCoreMetrics(Version buildInfo, MetricRegistry metrics) { - registerVersionMetric(metrics, buildInfo.releaseVersion()); + registerVersionMetric(buildInfo, metrics); registerJvmMetrics(metrics); metrics.register("os", new OperatingSystemMetricSet()); } - private static void registerVersionMetric(MetricRegistry metricRegistry, String versionNumber) { - Gauge versionGauge = () -> versionNumber; + private static void registerVersionMetric(Version buildInfo, MetricRegistry metrics) { + Optional buildNumber = buildInfo.buildNumber(); + + if (buildNumber.isPresent()) { + registerVersionMetric(metrics, buildNumber.get()); + } else { + LOG.warn("Could not acquire build number from release version: {}", buildInfo); + } + } + + private static void registerVersionMetric(MetricRegistry metricRegistry, Integer buildNumber) { + Gauge versionGauge = () -> buildNumber; metricRegistry.scope("styx").register("version.buildnumber", versionGauge); } diff --git a/components/proxy/src/test/java/com/hotels/styx/startup/CoreMetricsTest.java b/components/proxy/src/test/java/com/hotels/styx/startup/CoreMetricsTest.java index 539e3afcd2..54158a9e42 100644 --- a/components/proxy/src/test/java/com/hotels/styx/startup/CoreMetricsTest.java +++ b/components/proxy/src/test/java/com/hotels/styx/startup/CoreMetricsTest.java @@ -37,7 +37,7 @@ public void registersVersionMetric() { Gauge gauge = metrics.getGauges().get("styx.version.buildnumber"); - assertThat(gauge.getValue(), is("1.2.3")); + assertThat(gauge.getValue(), is(3)); } @Test