summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2019-09-19 15:30:48 +0200
committerOla Aunrønning <olaa@verizonmedia.com>2019-09-19 15:45:37 +0200
commitf3775f6b4fc496d3b553eca168224bd0b1d61bd6 (patch)
treef2f5d1bb3f9dba81ce10c47e7d52caffe232aa3f /container-core
parenta5f2a502c0006d08d75cc7542d45b39f0d722c5a (diff)
Support array formatted metrics response
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java25
-rw-r--r--container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java15
2 files changed, 35 insertions, 5 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java
index e341b66e0f8..d7760ac9c91 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java
@@ -13,6 +13,7 @@ import com.yahoo.jdisc.handler.ResponseDispatch;
import com.yahoo.jdisc.handler.ResponseHandler;
import com.yahoo.jdisc.http.HttpHeaders;
import com.yahoo.metrics.MetricsPresentationConfig;
+import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -81,33 +82,47 @@ public class MetricsPacketsHandler extends AbstractRequestHandler {
@Override
protected Iterable<ByteBuffer> responseContent() {
- return Collections.singleton(ByteBuffer.wrap(buildMetricOutput()));
+ return Collections.singleton(ByteBuffer.wrap(buildMetricOutput(request.getUri().getQuery())));
}
}.dispatch(handler);
return null;
}
- private byte[] buildMetricOutput() {
+ private byte[] buildMetricOutput(String query) {
try {
- String output = getStatusPacket() + getAllMetricsPackets() + "\n";
+ if (query != null && query.equals("array-formatted")) {
+ return getMetricsArray();
+ }
+ String output = jsonToString(getStatusPacket()) + getAllMetricsPackets() + "\n";
return output.getBytes(StandardCharsets.UTF_8);
} catch (JSONException e) {
throw new RuntimeException("Bad JSON construction.", e);
}
}
+ private byte[] getMetricsArray() throws JSONException {
+ JSONObject root = new JSONObject();
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.put(getStatusPacket());
+ getPacketsForSnapshot(getSnapshot(), applicationName, timer.currentTimeMillis())
+ .forEach(jsonArray::put);
+ root.put("metrics", jsonArray);
+ return jsonToString(root)
+ .getBytes(StandardCharsets.UTF_8);
+ }
+
/**
* Exactly one status packet is added to the response.
*/
- private String getStatusPacket() throws JSONException {
+ private JSONObject getStatusPacket() throws JSONException {
JSONObject packet = new JSONObjectWithLegibleException();
packet.put(APPLICATION_KEY, applicationName);
StateMonitor.Status status = monitor.status();
packet.put(STATUS_CODE_KEY, status.ordinal());
packet.put(STATUS_MSG_KEY, status.name());
- return jsonToString(packet);
+ return packet;
}
private String jsonToString(JSONObject jsonObject) throws JSONException {
diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java b/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java
index 92330345b50..e933f042cec 100644
--- a/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java
+++ b/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java
@@ -122,6 +122,21 @@ public class MetricsPacketsHandlerTest extends StateHandlerTestBase {
assertEquals(3, packets.size());
}
+ @Test
+ public void get_metrics_in_json_array() throws Exception {
+ metric.add("counter", 1, null);
+ incrementCurrentTimeAndAssertSnapshot(SNAPSHOT_INTERVAL);
+ String response = requestAsString("http://localhost/metrics-packets?array-formatted");
+ List<JsonNode> responseJson = toJsonPackets(response);
+ assertEquals(1, responseJson.size());
+ JsonNode metricsNode = responseJson.get(0).get(METRICS_KEY);
+ assertEquals(2, metricsNode.size());
+
+ JsonNode counterPacket = metricsNode.get(1);
+ assertCountMetric(counterPacket, "counter.count", 1);
+
+ }
+
private List<JsonNode> incrementTimeAndGetJsonPackets() throws Exception {
incrementCurrentTimeAndAssertSnapshot(SNAPSHOT_INTERVAL);
String response = requestAsString("http://localhost/metrics-packets");