package org.stagemonitor.web.metrics;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.stagemonitor.core.metrics.metrics2.Metric2Registry;
import org.stagemonitor.core.util.JsonUtils;
import org.stagemonitor.web.WebPlugin;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.stagemonitor.core.metrics.metrics2.MetricName.name;
public class StagemonitorMetricsServletTest {
private StagemonitorMetricsServlet servlet;
private Metric2Registry registry;
@Before
public void setUp() throws Exception {
registry = new Metric2Registry();
servlet = new StagemonitorMetricsServlet(registry, mock(WebPlugin.class), JsonUtils.getMapper());
}
@Test
public void getAllMetrics() throws Exception {
registry.counter(name("foo").tag("bar", "baz").build()).inc();
registry.counter(name("qux").tag("quux", "foo").build()).inc();
final MockHttpServletResponse resp = new MockHttpServletResponse();
servlet.doGet(new MockHttpServletRequest(), resp);
assertEquals("[" +
"{\"name\":\"foo\",\"tags\":{\"bar\":\"baz\"},\"values\":{\"count\":1}}," +
"{\"name\":\"qux\",\"tags\":{\"quux\":\"foo\"},\"values\":{\"count\":1}}" +
"]", resp.getContentAsString());
}
@Test
public void getFilteredMetrics() throws Exception {
registry.counter(name("foo").tag("bar", "baz").build()).inc();
registry.counter(name("qux").tag("quux", "foo").build()).inc();
final MockHttpServletResponse resp = new MockHttpServletResponse();
final MockHttpServletRequest req = new MockHttpServletRequest();
req.addParameter("metricNames[]", "foo");
servlet.doGet(req, resp);
assertEquals("[{\"name\":\"foo\",\"tags\":{\"bar\":\"baz\"},\"values\":{\"count\":1}}]", resp.getContentAsString());
}
@Test
public void getMeter() throws Exception {
registry.meter(name("foo").tag("bar", "baz").build()).mark();
final MockHttpServletResponse resp = new MockHttpServletResponse();
servlet.doGet(new MockHttpServletRequest(), resp);
final double mean_rate = JsonUtils.getMapper().readTree(resp.getContentAsString()).get(0).get("values").get("mean_rate").doubleValue();
assertTrue("Expected m1 rate of > 0, but got " + mean_rate, mean_rate > 0);
}
}