You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by ivanjunckes <gi...@git.apache.org> on 2018/11/23 18:11:15 UTC

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timed example

GitHub user ivanjunckes opened a pull request:

    https://github.com/apache/tomee/pull/218

    TOMEE-2290 - Metrics timed example

    

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/ivanjunckes/tomee metrics-timed-example

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/tomee/pull/218.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #218
    
----
commit db9022e95a0b0ea119146226de10c233f0ff679c
Author: ivanjunckes <ij...@...>
Date:   2018-11-23T13:57:51Z

    adding dependencies

commit 533afa8cfa3f8c60d20683603be8b0033a5852e6
Author: ivanjunckes <ij...@...>
Date:   2018-11-23T14:02:52Z

    Adding jax-rs resource

commit 1b7baccd47ea7816bf7c03fb2946f25a4cb63e12
Author: ivanjunckes <ij...@...>
Date:   2018-11-23T15:32:27Z

    Merge branch 'master' of github.com:apache/tomee into metrics-timed-example

commit a87cf682cef5e6ae4c0f46409a9df5f8f4453bef
Author: ivanjunckes <ij...@...>
Date:   2018-11-23T18:08:47Z

    Adding test and a few changes

----


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236731537
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    +                .path("/weather/day/status")
    +                .get(String.class);
    +
    +        final String metricPath = "/metrics/application/weather_day_status";
    +        assertPrometheusFormat(metricPath);
    +        assertJsonFormat(metricPath);
    +    }
    +
    +    private void assertPrometheusFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.TEXT_PLAIN)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds summary timer"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds_count timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds_count 1.0"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_one_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_one_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_five_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_five_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_fifteen_min_rate_per_second time"));
    +        assertTrue(metric.contains("application:weather_day_status_fifteen_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_min_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_min_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_max_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_max_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_mean_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_mean_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_stddev_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_stddev_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.5\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.75\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.95\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.98\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.99\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.999\"}"));
    +    }
    +
    +    private void assertJsonFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.APPLICATION_JSON)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("count"));
    +        assertTrue(metric.contains("meanRate"));
    +        assertTrue(metric.contains("fifteenMinRate"));
    +        assertTrue(metric.contains("fiveMinRate"));
    +        assertTrue(metric.contains("oneMinRate"));
    +        assertTrue(metric.contains("min"));
    +        assertTrue(metric.contains("max"));
    +        assertTrue(metric.contains("mean"));
    +        assertTrue(metric.contains("stddev"));
    +        assertTrue(metric.contains("p50"));
    +        assertTrue(metric.contains("p75"));
    +        assertTrue(metric.contains("p95"));
    +        assertTrue(metric.contains("p98"));
    +        assertTrue(metric.contains("p99"));
    +        assertTrue(metric.contains("p999"));
    +
    +    }
    +
    +    @Test
    +    public void testTimedMetricMetadata() {
    +        final Response response = WebClient.create(base.toExternalForm())
    +                .path("/metrics/application/weather_day_status")
    +                .accept(MediaType.APPLICATION_JSON)
    +                .options();
    +        final String metaData = response.readEntity(String.class);
    +        JsonObject metadataJson = Json.createReader(new StringReader(metaData)).readObject();
    +
    +        final String expected = "{\n" +
    +                "  \"weather_day_status\": {\n" +
    +                "    \"description\": \"This metric shows the weather status of the day.\",\n" +
    +                "    \"displayName\": \"Weather Day Status\",\n" +
    +                "    \"name\": \"weather_day_status\",\n" +
    +                "    \"reusable\": false,\n" +
    +                "    \"tags\": \"\",\n" +
    +                "    \"type\": \"timer\",\n" +
    +                "    \"typeRaw\": \"TIMER\",\n" +
    +                "    \"unit\": \"nanoseconds\"\n" +
    +                "  }\n" +
    +                "}";
    +
    +        JsonObject expectedJson = Json.createReader(new StringReader(expected)).readObject();
    +        assertEquals(expectedJson, metadataJson);
    --- End diff --
    
    Done


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236343527
  
    --- Diff: examples/mp-metrics-timed/pom.xml ---
    @@ -0,0 +1,71 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    --- End diff --
    
    Done :) Tks


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by rmannibucau <gi...@git.apache.org>.
Github user rmannibucau commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236342580
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -157,7 +159,10 @@ private void assertJsonFormat(final String metricPath) {
             };
     
             Stream.of(expected)
    -                .forEach(text -> assertTrue("Expected: " + text + " to be present in " + metric, metric.contains(text)));
    +                .forEach(text ->
    +                        assertTrue(
    +                                "Expected: " + text + " to be present in " + metric,
    +                                expectedJson.getJsonObject("weather_day_status").get("count") != null));
    --- End diff --
    
    s/count/text/ ;)


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236338075
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    --- End diff --
    
    Done


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by rmannibucau <gi...@git.apache.org>.
Github user rmannibucau commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236248396
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    +                .path("/weather/day/status")
    +                .get(String.class);
    +
    +        final String metricPath = "/metrics/application/weather_day_status";
    +        assertPrometheusFormat(metricPath);
    +        assertJsonFormat(metricPath);
    +    }
    +
    +    private void assertPrometheusFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.TEXT_PLAIN)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds summary timer"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds_count timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds_count 1.0"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_one_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_one_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_five_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_five_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_fifteen_min_rate_per_second time"));
    +        assertTrue(metric.contains("application:weather_day_status_fifteen_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_min_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_min_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_max_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_max_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_mean_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_mean_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_stddev_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_stddev_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.5\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.75\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.95\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.98\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.99\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.999\"}"));
    +    }
    +
    +    private void assertJsonFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.APPLICATION_JSON)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("count"));
    +        assertTrue(metric.contains("meanRate"));
    +        assertTrue(metric.contains("fifteenMinRate"));
    +        assertTrue(metric.contains("fiveMinRate"));
    +        assertTrue(metric.contains("oneMinRate"));
    +        assertTrue(metric.contains("min"));
    +        assertTrue(metric.contains("max"));
    +        assertTrue(metric.contains("mean"));
    +        assertTrue(metric.contains("stddev"));
    +        assertTrue(metric.contains("p50"));
    +        assertTrue(metric.contains("p75"));
    +        assertTrue(metric.contains("p95"));
    +        assertTrue(metric.contains("p98"));
    +        assertTrue(metric.contains("p99"));
    +        assertTrue(metric.contains("p999"));
    +
    +    }
    +
    +    @Test
    +    public void testTimedMetricMetadata() {
    +        final Response response = WebClient.create(base.toExternalForm())
    +                .path("/metrics/application/weather_day_status")
    +                .accept(MediaType.APPLICATION_JSON)
    +                .options();
    +        final String metaData = response.readEntity(String.class);
    +        JsonObject metadataJson = Json.createReader(new StringReader(metaData)).readObject();
    +
    +        final String expected = "{\n" +
    +                "  \"weather_day_status\": {\n" +
    +                "    \"description\": \"This metric shows the weather status of the day.\",\n" +
    +                "    \"displayName\": \"Weather Day Status\",\n" +
    +                "    \"name\": \"weather_day_status\",\n" +
    +                "    \"reusable\": false,\n" +
    +                "    \"tags\": \"\",\n" +
    +                "    \"type\": \"timer\",\n" +
    +                "    \"typeRaw\": \"TIMER\",\n" +
    +                "    \"unit\": \"nanoseconds\"\n" +
    +                "  }\n" +
    +                "}";
    +
    +        JsonObject expectedJson = Json.createReader(new StringReader(expected)).readObject();
    +        assertEquals(expectedJson, metadataJson);
    --- End diff --
    
    this is not stable so either assert using keys (keys1.size() == keys2.size() && for all key value ==) or using another way to write the assertEquals


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by rmannibucau <gi...@git.apache.org>.
Github user rmannibucau commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236249672
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    +                .path("/weather/day/status")
    +                .get(String.class);
    +
    +        final String metricPath = "/metrics/application/weather_day_status";
    +        assertPrometheusFormat(metricPath);
    +        assertJsonFormat(metricPath);
    +    }
    +
    +    private void assertPrometheusFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.TEXT_PLAIN)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds summary timer"));
    --- End diff --
    
    as a general rule put a small description and the actual value in "message" parameter of the assert
    
    proposal:
    
         Stream.of("expected text 1", "expected text 2")
            .forEach(text -> assertTrue("Expected: " + text + " to be present in " + metric, metric.contains(text)));
    
    Also for an example you don't need to assert that much so just checking "application:weather_day_status_seconds_count 1.0" can be sufficient for the demonstration IMHO


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236337920
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    +                .path("/weather/day/status")
    +                .get(String.class);
    +
    +        final String metricPath = "/metrics/application/weather_day_status";
    +        assertPrometheusFormat(metricPath);
    +        assertJsonFormat(metricPath);
    +    }
    +
    +    private void assertPrometheusFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.TEXT_PLAIN)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds summary timer"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds_count timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds_count 1.0"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_one_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_one_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_five_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_five_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_fifteen_min_rate_per_second time"));
    +        assertTrue(metric.contains("application:weather_day_status_fifteen_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_min_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_min_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_max_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_max_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_mean_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_mean_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_stddev_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_stddev_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.5\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.75\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.95\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.98\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.99\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.999\"}"));
    +    }
    +
    +    private void assertJsonFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    --- End diff --
    
    Done


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by rmannibucau <gi...@git.apache.org>.
Github user rmannibucau commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236314041
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    --- End diff --
    
    WebClient is a CXF API, you can use the standard JAXRS Client https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client.html


---

[GitHub] tomee issue #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on the issue:

    https://github.com/apache/tomee/pull/218
  
    @brunobat your  branch seems to be old dated. Can you update it and try again?


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by rmannibucau <gi...@git.apache.org>.
Github user rmannibucau commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236342694
  
    --- Diff: examples/mp-metrics-timed/pom.xml ---
    @@ -0,0 +1,71 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    --- End diff --
    
    header ;)


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

    https://github.com/apache/tomee/pull/218


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by brunobat <gi...@git.apache.org>.
Github user brunobat commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236229984
  
    --- Diff: pom.xml ---
    @@ -208,7 +208,7 @@
         <microprofile.health.version>1.0</microprofile.health.version>
         <microprofile.health.impl.version>1.0.0</microprofile.health.impl.version>
         <microprofile.metrics.version>1.1</microprofile.metrics.version>
    -    <microprofile.metrics.impl.version>1.0.0</microprofile.metrics.impl.version>
    +    <microprofile.metrics.impl.version>1.0.1-SNAPSHOT</microprofile.metrics.impl.version>
    --- End diff --
    
    Hi @ivanjunckes I get an error here:
    `[ERROR] Failed to execute goal on project tomee-microprofile-webapp: Could not resolve dependencies for project org.apache.tomee:tomee-microprofile-webapp:war:8.0.0-SNAPSHOT: Failure to find org.apache.geronimo:geronimo-metrics:jar:1.0.1-SNAPSHOT in https://repository.apache.org/service/local/repositories/orgapachegeronimo-1067/content/ was cached in the local repository, resolution will not be reattempted until the update interval of Geronimo OpenAPI Staging has elapsed or updates are forced`
    The lib is not found in the maven repo.


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by rmannibucau <gi...@git.apache.org>.
Github user rmannibucau commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236248868
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    +                .path("/weather/day/status")
    +                .get(String.class);
    +
    +        final String metricPath = "/metrics/application/weather_day_status";
    +        assertPrometheusFormat(metricPath);
    +        assertJsonFormat(metricPath);
    +    }
    +
    +    private void assertPrometheusFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.TEXT_PLAIN)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds summary timer"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds_count timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds_count 1.0"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_one_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_one_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_five_min_rate_per_second timer"));
    +        assertTrue(metric.contains("application:weather_day_status_five_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_fifteen_min_rate_per_second time"));
    +        assertTrue(metric.contains("application:weather_day_status_fifteen_min_rate_per_second"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_min_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_min_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_max_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_max_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_mean_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_mean_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_stddev_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_stddev_seconds"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.5\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.75\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.95\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.98\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.99\"}"));
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds timer"));
    +        assertTrue(metric.contains("application:weather_day_status_seconds{quantile=\"0.999\"}"));
    +    }
    +
    +    private void assertJsonFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    --- End diff --
    
    maybe load it as JsonObject and assert keys(), will make it inline and more reasable


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236312514
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    --- End diff --
    
    What you mean by "Use the Client (jaxrs) instead of a cxf api?"?


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236337860
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    +                .path("/weather/day/status")
    +                .get(String.class);
    +
    +        final String metricPath = "/metrics/application/weather_day_status";
    +        assertPrometheusFormat(metricPath);
    +        assertJsonFormat(metricPath);
    +    }
    +
    +    private void assertPrometheusFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.TEXT_PLAIN)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds summary timer"));
    --- End diff --
    
    I think keeping extra tests will not hurt :)


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by rmannibucau <gi...@git.apache.org>.
Github user rmannibucau commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236248226
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    --- End diff --
    
    maybe use Client (jaxrs) instead of a cxf api - without forgetting to close the client ;)


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236338135
  
    --- Diff: pom.xml ---
    @@ -208,7 +208,7 @@
         <microprofile.health.version>1.0</microprofile.health.version>
         <microprofile.health.impl.version>1.0.0</microprofile.health.impl.version>
         <microprofile.metrics.version>1.1</microprofile.metrics.version>
    -    <microprofile.metrics.impl.version>1.0.0</microprofile.metrics.impl.version>
    +    <microprofile.metrics.impl.version>1.0.1-SNAPSHOT</microprofile.metrics.impl.version>
    --- End diff --
    
    Fixed


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236338450
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -0,0 +1,151 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + * <p/>
    + * http://www.apache.org/licenses/LICENSE-2.0
    + * <p/>
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +import org.apache.cxf.jaxrs.client.WebClient;
    +import org.jboss.arquillian.container.test.api.Deployment;
    +import org.jboss.arquillian.junit.Arquillian;
    +import org.jboss.arquillian.test.api.ArquillianResource;
    +import org.jboss.shrinkwrap.api.ShrinkWrap;
    +import org.jboss.shrinkwrap.api.asset.StringAsset;
    +import org.jboss.shrinkwrap.api.spec.WebArchive;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +
    +import javax.json.Json;
    +import javax.json.JsonObject;
    +import javax.ws.rs.core.MediaType;
    +import javax.ws.rs.core.Response;
    +import java.io.StringReader;
    +import java.net.URL;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +@RunWith(Arquillian.class)
    +public class WeatherServiceTest {
    +
    +    @Deployment(testable = false)
    +    public static WebArchive createDeployment() {
    +        final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, "test.war")
    +                .addClass(WeatherService.class)
    +                .addAsWebInfResource(new StringAsset("<beans/>"), "beans.xml");
    +        return webArchive;
    +    }
    +
    +    @ArquillianResource
    +    private URL base;
    +
    +    @Test
    +    public void testTimedMetric() {
    +        WebClient.create(base.toExternalForm())
    +                .path("/weather/day/status")
    +                .get(String.class);
    +
    +        final String metricPath = "/metrics/application/weather_day_status";
    +        assertPrometheusFormat(metricPath);
    +        assertJsonFormat(metricPath);
    +    }
    +
    +    private void assertPrometheusFormat(final String metricPath) {
    +        final String metric = WebClient.create(base.toExternalForm())
    +                .path(metricPath)
    +                .accept(MediaType.TEXT_PLAIN)
    +                .get(String.class);
    +
    +        assertTrue(metric.contains("# TYPE application:weather_day_status_seconds summary timer"));
    --- End diff --
    
    But added the suggestion using Stream


---

[GitHub] tomee pull request #218: TOMEE-2290 - Metrics timer example

Posted by ivanjunckes <gi...@git.apache.org>.
Github user ivanjunckes commented on a diff in the pull request:

    https://github.com/apache/tomee/pull/218#discussion_r236343729
  
    --- Diff: examples/mp-metrics-timed/src/test/java/WeatherServiceTest.java ---
    @@ -157,7 +159,10 @@ private void assertJsonFormat(final String metricPath) {
             };
     
             Stream.of(expected)
    -                .forEach(text -> assertTrue("Expected: " + text + " to be present in " + metric, metric.contains(text)));
    +                .forEach(text ->
    +                        assertTrue(
    +                                "Expected: " + text + " to be present in " + metric,
    +                                expectedJson.getJsonObject("weather_day_status").get("count") != null));
    --- End diff --
    
    Done :)


---