summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2019-10-25 12:14:54 +0200
committerOla Aunrønning <olaa@verizonmedia.com>2019-10-25 12:20:41 +0200
commit57fc9b631319ab522971c9272ecc6c84a9045343 (patch)
tree80f4308c27ca36ecf4976925b115c31e58de78b2 /container-core
parentcce1d7872328f95c32567da873b061d974b5c862 (diff)
Reuse same coredump/host-life gatherers
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/CoredumpGatherer.java12
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/FileWrapper.java27
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java9
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/MetricGatherer.java5
-rw-r--r--container-core/src/test/java/com/yahoo/container/jdisc/state/CoredumpGathererTest.java43
-rw-r--r--container-core/src/test/java/com/yahoo/container/jdisc/state/HostLifeGathererTest.java38
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;
+ }
+ }
+}