| = Métricas con MicroProfile `@Counted` (Contado) |
| :index-group: MicroProfile |
| :jbake-type: page |
| :jbake-status: published |
| |
| Este es un ejemplo sobre cómo utilizar las métricas de MicroProfile en TomEE. El |
| proyecto incluye un perfil de Docker que se puede usar para crear una imagen de |
| Docker. |
| |
| == Ejecute la aplicación: |
| |
| [source,bash] |
| ---- |
| $ mvn clean install tomee:run |
| ---- |
| |
| NOTE: Alternativamente, compile y ejecute la aplicación a través de Docker |
| (tenga en cuenta el uso del perfil de docker): |
| |
| [source,bash] |
| ---- |
| $ mvn -Pdocker docker:build |
| ---- |
| |
| [source,bash] |
| ---- |
| $ docker run -it --rm -p 8080:8080 --name=tomee-mp-metrics-counted tomee/mp-metrics-counted |
| ---- |
| |
| Dentro de la aplicación, hay un endpoint que te dará el estado del clima para |
| el día y la semana. |
| |
| == Obtenga el clima para la semana: |
| |
| [source,bash] |
| ---- |
| $ curl -X GET http://localhost:8080/mp-metrics-counted/weather/week/status |
| ---- |
| |
| IMPORTANT: Si ejecuta usando Docker, debido a que la aplicación está instalada |
| como la aplicación ROOT, elimine el nombre de la aplicación de la URL: |
| |
| [source,bash] |
| ---- |
| $ curl -X GET http://localhost:8080/weather/week/status |
| ---- |
| |
| == Response: |
| |
| [source,text] |
| ---- |
| Hi, today is a sunny day! |
| ---- |
| |
| == Usando `@Counted` |
| |
| Las métricas de MicroProfile tienen una función que se puede usar para contar |
| solicitudes a un servicio. |
| |
| Para utilizar esta función, debe anotar los métodos de los recursos JAX-RS con |
| `@Counted`. |
| |
| [source,java] |
| ---- |
| @Path("/weather") |
| @Produces(MediaType.APPLICATION_JSON) |
| @Consumes(MediaType.APPLICATION_JSON) |
| @ApplicationScoped |
| public class WeatherService { |
| |
| @Path("/day/status") |
| @Counted(monotonic = true, name = "weather_day_status", absolute = true) |
| @GET |
| @Produces(MediaType.TEXT_PLAIN) |
| public String dayStatus() { |
| return "Hi, today is a sunny day!"; |
| } |
| ... |
| } |
| ---- |
| |
| Hay algunas configuraciones, como parte de `@Counted`, que necesita saber: |
| |
| *String name* Opcional. Establece el nombre de la métrica. Si no se proporciona |
| explícitamente, se utiliza el nombre del objeto anotado. |
| |
| *boolean absolute* Si es verdadero, usa el nombre dado como el nombre absoluto |
| de la métrica. Si es falso, antepone el nombre del paquete y el nombre de la |
| clase antes del nombre dado. El valor predeterminado es falso. |
| |
| *String displayName* Opcional. Un nombre para mostrar legible para los |
| metadatos. |
| |
| *String description* Opcional. Una descripción de la métrica. |
| |
| *String[] tags* Opcional. Matriz de cadenas en el formato = para suministrar |
| etiquetas especiales a una métrica. |
| |
| *boolean reusable* Indica si una métrica con un nombre determinado se puede |
| registrar en más de un lugar. No se aplica a `@Gauges` (medidores). |
| |
| == Datos de la Métrica |
| |
| Verifique la métrica del contador haciendo una solicitud _GET_: |
| |
| === Formato Prometheus: |
| |
| [source,bash] |
| ---- |
| $ curl -X GET http://localhost:8080/mp-metrics-counted/metrics/application/weather_day_status |
| ---- |
| |
| === Respuesta Prometheus: |
| |
| [source,text] |
| ---- |
| # TYPE application:weather_day_status counter |
| application:weather_day_status 1.0 |
| ---- |
| |
| === Formato JSON: |
| |
| Para el formato json, agregue el encabezado `Accept: application/json` a la |
| solicitud HTTP. |
| |
| [source,bash] |
| ---- |
| $ curl -X GET -H "Accept: application/json" http://localhost:8080/mp-metrics-counted/metrics/application/weather_day_status |
| ---- |
| |
| === Respuesta JSON: |
| |
| [source,javascript] |
| ---- |
| { |
| "weather_day_status": { |
| "delegate": {}, |
| "unit": "none", |
| "count": 1 |
| } |
| } |
| ---- |
| |
| == Metadatos Métrica |
| |
| Una métrica tendrá metadatos para que pueda conocer más información al |
| respecto, como `displayName`,`description`, `tags`, etc. |
| |
| Verifique los metadatos de la métrica haciendo una solicitud HTTP _OPTIONS_: |
| |
| === Solicitud HTTP _OPTIONS_ |
| |
| [source,bash] |
| ---- |
| $ curl -X OPTIONS http://localhost:8080/mp-metrics-counted/metrics/application/weather_day_status |
| ---- |
| |
| === Respuesta: |
| |
| [source,javascript] |
| ---- |
| { |
| "weather_day_status": { |
| "unit": "none", |
| "displayName": "Weather Day Status", |
| "name": "weather_day_status", |
| "typeRaw": "COUNTER", |
| "description": "This metric shows the weather status of the day.", |
| "type": "counter", |
| "value": { |
| "unit": "none", |
| "displayName": "Weather Day Status", |
| "name": "weather_day_status", |
| "tagsAsString": "", |
| "typeRaw": "COUNTER", |
| "description": "This metric shows the weather status of the day.", |
| "type": "counter", |
| "reusable": false, |
| "tags": {} |
| }, |
| "reusable": false, |
| "tags": "" |
| } |
| } |
| ---- |
| |
| También puede probarlo utilizando WeatherServiceTest.java disponible en el |
| proyecto. |