diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2019-10-25 12:14:54 +0200 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2019-10-25 12:20:41 +0200 |
commit | 57fc9b631319ab522971c9272ecc6c84a9045343 (patch) | |
tree | 80f4308c27ca36ecf4976925b115c31e58de78b2 /container-core | |
parent | cce1d7872328f95c32567da873b061d974b5c862 (diff) |
Reuse same coredump/host-life gatherers
Diffstat (limited to 'container-core')
6 files changed, 120 insertions, 14 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/CoredumpGatherer.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/CoredumpGatherer.java index 915cced842b..b0175c49f63 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/CoredumpGatherer.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/CoredumpGatherer.java @@ -20,13 +20,13 @@ public class CoredumpGatherer { private static final Path COREDUMP_PATH = Path.of(Defaults.getDefaults().underVespaHome("var/crash/processing")); - protected static JSONObject gatherCoredumpMetrics() { - int coredumps = getNumberOfCoredumps(); + public static JSONObject gatherCoredumpMetrics(FileWrapper fileWrapper) { + int coredumps = getNumberOfCoredumps(fileWrapper); JSONObject packet = new JSONObject(); try { packet.put("status_code", coredumps == 0 ? 0 : 1); - packet.put("status_msg", coredumps == 0 ? "OK" : String.format("Found %d coredumps", coredumps)); + packet.put("status_msg", coredumps == 0 ? "OK" : String.format("Found %d coredump(s)", coredumps)); packet.put("timestamp", Instant.now().getEpochSecond()); packet.put("application", "system-coredumps-processing"); @@ -34,10 +34,10 @@ public class CoredumpGatherer { return packet; } - private static int getNumberOfCoredumps() { + private static int getNumberOfCoredumps(FileWrapper fileWrapper) { try { - return (int) Files.walk(COREDUMP_PATH) - .filter(Files::isRegularFile) + return (int) fileWrapper.walkTree(COREDUMP_PATH) + .filter(fileWrapper::isRegularFile) .count(); } catch (NoSuchFileException e) { return 0; diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/FileWrapper.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/FileWrapper.java new file mode 100644 index 00000000000..6e22e02eb5b --- /dev/null +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/FileWrapper.java @@ -0,0 +1,27 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.container.jdisc.state; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Instant; +import java.util.stream.Stream; + +/** + * @author olaa + */ +public class FileWrapper { + + long getFileAgeInSeconds(Path path) throws IOException { + Instant lastModifiedTime = Files.getLastModifiedTime(path).toInstant(); + return Instant.now().getEpochSecond() - lastModifiedTime.getEpochSecond(); + } + + Stream<Path> walkTree(Path path) throws IOException { + return Files.walk(path); + } + + boolean isRegularFile(Path path) { + return Files.isRegularFile(path); + } +} diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java index 91d1c468d8a..080a5a8dc32 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java @@ -1,14 +1,11 @@ // Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.jdisc.state; -import com.yahoo.vespa.defaults.Defaults; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; -import java.time.Duration; import java.time.Instant; /** @@ -16,15 +13,15 @@ import java.time.Instant; */ public class HostLifeGatherer { - private static final Path UPTIME_PATH = Path.of(Defaults.getDefaults().underVespaHome("/proc")); + private static final Path UPTIME_PATH = Path.of("/proc"); - protected static JSONObject getHostLifePacket() { + public static JSONObject getHostLifePacket(FileWrapper fileWrapper) { long upTime; int statusCode = 0; String statusMessage = "OK"; try { - upTime = Files.getLastModifiedTime(UPTIME_PATH).toInstant().getEpochSecond(); + upTime = fileWrapper.getFileAgeInSeconds(UPTIME_PATH); } catch (IOException e) { upTime = 0; statusCode = 1; diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricGatherer.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricGatherer.java index 97fba188593..061ce7138ad 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricGatherer.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricGatherer.java @@ -13,10 +13,11 @@ import java.util.List; public class MetricGatherer { static List<JSONObject> getAdditionalMetrics() { + FileWrapper fileWrapper = new FileWrapper(); List<JSONObject> packetList = new ArrayList<>(); - packetList.add(CoredumpGatherer.gatherCoredumpMetrics()); + packetList.add(CoredumpGatherer.gatherCoredumpMetrics(fileWrapper)); if (System.getProperty("os.name").contains("nux")) - packetList.add(HostLifeGatherer.getHostLifePacket()); + packetList.add(HostLifeGatherer.getHostLifePacket(fileWrapper)); return packetList; } } diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/state/CoredumpGathererTest.java b/container-core/src/test/java/com/yahoo/container/jdisc/state/CoredumpGathererTest.java new file mode 100644 index 00000000000..c1f7d790fa5 --- /dev/null +++ b/container-core/src/test/java/com/yahoo/container/jdisc/state/CoredumpGathererTest.java @@ -0,0 +1,43 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.container.jdisc.state; + +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.Test; + +import java.nio.file.Path; +import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; + + +/** + * @author olaa + */ +public class CoredumpGathererTest { + + @Test + public void finds_one_coredump() throws JSONException { + JSONObject packet = CoredumpGatherer.gatherCoredumpMetrics(new MockFileWrapper()); + + assertEquals("system-coredumps-processing", packet.getString("application")); + assertEquals(1, packet.getInt("status_code")); + assertEquals("Found 1 coredump(s)", packet.getString("status_msg")); + + } + + static class MockFileWrapper extends FileWrapper { + + + @Override + Stream<Path> walkTree(Path path) { + return Stream.of(Path.of("dummy-path")); + } + + @Override + boolean isRegularFile(Path path) { + return true; + } + } + +} diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/state/HostLifeGathererTest.java b/container-core/src/test/java/com/yahoo/container/jdisc/state/HostLifeGathererTest.java new file mode 100644 index 00000000000..d025b9662d2 --- /dev/null +++ b/container-core/src/test/java/com/yahoo/container/jdisc/state/HostLifeGathererTest.java @@ -0,0 +1,38 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.container.jdisc.state; + +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.Test; + +import java.nio.file.Path; + +import static org.junit.Assert.assertEquals; + + +/** + * @author olaa + */ +public class HostLifeGathererTest { + + @Test + public void host_is_alive() throws JSONException { + JSONObject packet = HostLifeGatherer.getHostLifePacket(new MockFileWrapper()); + JSONObject metrics = packet.getJSONObject("metrics"); + assertEquals("host_life", packet.getString("application")); + assertEquals(0, packet.getInt("status_code")); + assertEquals("OK", packet.getString("status_msg")); + + assertEquals(123l, metrics.getLong("uptime")); + assertEquals(1, metrics.getInt("alive")); + + } + + static class MockFileWrapper extends FileWrapper { + + @Override + long getFileAgeInSeconds(Path path) { + return 123; + } + } +} |