aboutsummaryrefslogtreecommitdiffstats
path: root/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/SystemPollerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/SystemPollerTest.java')
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/SystemPollerTest.java121
1 files changed, 118 insertions, 3 deletions
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/SystemPollerTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/SystemPollerTest.java
index 86e67309e5a..64b19b5d91b 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/SystemPollerTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/SystemPollerTest.java
@@ -1,12 +1,20 @@
// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.metricsproxy.service;
+import ai.vespa.metricsproxy.metric.Metric;
+import ai.vespa.metricsproxy.metric.Metrics;
+import ai.vespa.metricsproxy.metric.model.MetricId;
import org.junit.Test;
+import java.io.BufferedReader;
+import java.io.StringReader;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
/**
@@ -14,23 +22,88 @@ import static org.junit.Assert.assertThat;
*/
public class SystemPollerTest {
+ private static final String [] perProcStats = {
+ "131 (java) S 115 115 85 34816 115 1077952512 16819285 69606636 25448 8182 1310952 380185 256300 41075 20 0 69 0 39175 16913702912 2004355 18446744073709551615 94843481096192 94843481100104 140737227872512 0 0 0 0 4096 16796879 0 0 0 17 1 0 0 2 0 0 94843483200760 94843483201552 94843503726592 140737227877827 140737227878876 140737227878876 140737227882433 0\n",
+ "131 (java) S 115 115 85 34816 115 1077952512 16819325 69606636 25480 8182 1311491 380694 256300 41075 20 0 69 0 39175 16913702912 2004353 18446744073709551615 94843481096192 94843481100104 140737227872512 0 0 0 0 4096 16796879 0 0 0 17 1 0 0 2 0 0 94843483200760 94843483201552 94843503726592 140737227877827 140737227878876 140737227878876 140737227882433 0\n"
+ };
+ private static final String [] totalStats = {
+ String.join("\n",
+ "cpu 2262158 26 745678 139770640 28866 0 21092 0 0 0",
+ "cpu0 294842 1 83365 17489116 3671 0 2563 0 0 0",
+ "cpu1 273560 3 107315 17416254 3952 0 2970 0 0 0",
+ "cpu2 287921 1 100781 17444671 4149 0 2760 0 0 0",
+ "cpu3 292114 5 100488 17451934 4137 0 2427 0 0 0",
+ "cpu4 255834 1 91932 17502801 3267 0 2544 0 0 0",
+ "cpu5 280032 0 84827 17509603 3561 0 2641 0 0 0",
+ "cpu6 274831 12 96846 17459038 3189 0 2531 0 0 0",
+ "cpu7 303021 0 80121 17497220 2937 0 2653 0 0 0",
+ "intr 122075142 123 0 0 70 40110 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 986 0 1164882 0 18416 17418 0 3157177 1795096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
+ "ctxt 169897491",
+ "btime 1634013028",
+ "processes 214086",
+ "procs_running 1",
+ "procs_blocked 0",
+ "softirq 32035299 0 4526992 8 5339012 1156237 0 37 10929205 0 10083808"),
+ String.join("\n",
+ "cpu 2262521 26 746460 140037592 28870 0 21094 0 0 0",
+ "cpu0 294872 1 83431 17522597 3672 0 2564 0 0 0",
+ "cpu1 273619 3 107436 17449509 3952 0 2971 0 0 0",
+ "cpu2 287976 1 100893 17477999 4149 0 2760 0 0 0",
+ "cpu3 292150 5 100601 17485270 4137 0 2427 0 0 0",
+ "cpu4 255880 1 92024 17536168 3267 0 2544 0 0 0",
+ "cpu5 280088 0 84937 17542968 3564 0 2641 0 0 0",
+ "cpu6 274877 12 96944 17492406 3189 0 2531 0 0 0",
+ "cpu7 303058 0 80192 17530672 2937 0 2653 0 0 0",
+ "intr 122204990 123 0 0 70 40202 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 988 0 1165034 0 18438 17442 0 3160615 1797273 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0",
+ "ctxt 170103457",
+ "btime 1634013028",
+ "processes 214098",
+ "procs_running 2",
+ "procs_blocked 0",
+ "softirq 32061301 0 4533497 8 5339359 1156384 0 37 10947075 0 10084941")
+ };
+ private static final long [] PER_PROC_JIFFIES = {1691137, 1692185};
+
@Test
public void testSystemPoller() {
DummyService s = new DummyService(0, "id");
List<VespaService> services = new ArrayList<>();
services.add(s);
- SystemPoller poller = new SystemPoller(services, 60*5);
assertThat(s.isAlive(), is(false));
- long n = poller.getPidJiffies(s);
+ long n = SystemPoller.getPidJiffies(s);
assertThat(n, is(0L));
- long[] memusage = poller.getMemoryUsage(s);
+ long[] memusage = SystemPoller.getMemoryUsage(s);
assertThat(memusage[0], is(0L));
assertThat(memusage[1], is(0L));
}
@Test
+ public
+ void testPerProcessJiffies() {
+ assertEquals(PER_PROC_JIFFIES[0], SystemPoller.getPidJiffies(new BufferedReader(new StringReader(perProcStats[0]))));
+ assertEquals(PER_PROC_JIFFIES[1], SystemPoller.getPidJiffies(new BufferedReader(new StringReader(perProcStats[1]))));
+ }
+
+ @Test
+ public
+ void testTotalJiffies() {
+ SystemPoller.JiffiesAndCpus first = SystemPoller.getTotalSystemJiffies(new BufferedReader(new StringReader(totalStats[0])));
+ SystemPoller.JiffiesAndCpus second = SystemPoller.getTotalSystemJiffies(new BufferedReader(new StringReader(totalStats[1])));
+ assertEquals(8, first.cpus);
+ assertEquals(first.cpus, second.cpus);
+ assertEquals(142828460L, first.jiffies);
+ assertEquals(143096563L, second.jiffies);
+ assertEquals(142828460L/8, first.normalizedJiffies());
+ assertEquals(143096563L/8, second.normalizedJiffies());
+ SystemPoller.JiffiesAndCpus diff = second.diff(first);
+ assertEquals(8, diff.cpus);
+ assertEquals(268103L, diff.jiffies);
+ assertEquals(268103L/8, diff.normalizedJiffies());
+ }
+
+ @Test
public void testCPUJiffies() {
String line = "cpu1 102180864 789 56766899 12800020140 1654757 0 0";
CpuJiffies n = new CpuJiffies(line);
@@ -38,4 +111,46 @@ public class SystemPollerTest {
assertThat(n.getTotalJiffies(), is(12960623449L));
}
+ @Test
+ public void testMetricsComputation() {
+ SystemPoller.JiffiesAndCpus prev = SystemPoller.getTotalSystemJiffies(new BufferedReader(new StringReader(totalStats[0])));
+ Map<VespaService, Long> lastCpuJiffiesMetrics = new HashMap<>();
+ VespaService s1 = new VespaService("s1", "cfgId_1");
+ List<VespaService> services = List.of(s1);
+ lastCpuJiffiesMetrics.put(s1, SystemPoller.getPidJiffies(new BufferedReader(new StringReader(perProcStats[0]))));
+
+ SystemPoller.JiffiesAndCpus next = SystemPoller.updateMetrics(prev, 1,
+ new SystemPoller.GetJiffies() {
+ @Override
+ public SystemPoller.JiffiesAndCpus getTotalSystemJiffies() {
+ return SystemPoller.getTotalSystemJiffies(new BufferedReader(new StringReader(totalStats[1])));
+ }
+
+ @Override
+ public long getJiffies(VespaService service) {
+ return SystemPoller.getPidJiffies(new BufferedReader(new StringReader(perProcStats[1])));
+ }
+ },
+ services, lastCpuJiffiesMetrics);
+
+ assertEquals(8, prev.cpus);
+ assertEquals(prev.cpus, next.cpus);
+ assertEquals(142828460L, prev.jiffies);
+ assertEquals(143096563L, next.jiffies);
+ SystemPoller.JiffiesAndCpus diff = next.diff(prev);
+
+ Metrics m = s1.getSystemMetrics();
+ List<Metric> metricList = m.getMetrics();
+ assertEquals(4, metricList.size());
+ assertEquals(new Metric(MetricId.toMetricId("memory_virt"), 0L, 1), metricList.get(0));
+ assertEquals(new Metric(MetricId.toMetricId("memory_rss"), 0L, 1), metricList.get(1));
+ long diffProcJiffies = (PER_PROC_JIFFIES[1] - PER_PROC_JIFFIES[0]);
+ double expected = 100.0*diffProcJiffies/diff.normalizedJiffies();
+ assertEquals(3.1272380042969683, expected, 0.0000000000001);
+ double expected_util = 100.0*diffProcJiffies/diff.jiffies;
+ assertEquals(0.3908945442609743, expected_util, 0.0000000000001);
+ assertEquals(new Metric(MetricId.toMetricId("cpu"), expected, 1), metricList.get(2));
+ assertEquals(new Metric(MetricId.toMetricId("cpu.util"), expected_util, 1), metricList.get(3));
+ }
+
}