= Métricas com MicroProfile `@Metered`
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published

Este é um exemplo sobre como utilizar as métricas do MicroProfile em TomEE.

== Executando a aplicação:

[source,bash]
----
$ mvn clean install tomee:run
----

Dentro da aplicação, há um endpoint que vai fornecer o estado do clima para o dia e a semana.

== Obtendo o clima para semana:

[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-metered/weather/day/status
----

== Resposta:

[source,text]
----
Hi, today is a sunny day!
----

== Usando `@Metered`

As métricas do MicroProfile tem uma função que se pode usar para medir solicitações para um serviço.

Para utilizar esta função, você deve anotar os métodos dos recursos JAX-RS com `@Metered`.

[source,java]
----
@Path("/weather")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApplicationScoped
public class WeatherService {

    @Path("/day/status")
    @Metered(name = "dailyStatus",
             unit = MetricUnits.MINUTES,
             description = "Metrics to daily weather status method",
             absolute = true)
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String dayStatus() {
        return "Hi, today is a sunny day!";
    }
}
----

Existem algumas configurações, como parte do `@Metered`, que você precisa saber:

*String name* 
Opcional. Define o nome da métrica. Se não for fornecido
explicitamente, o nome do objeto anotado é usado.

*boolean absolute* Se verdadeiro, use o nome fornecido como o nome absoluto
da métrica. Se falso, ele prefixa o nome do pacote e o nome da classe antes do nome fornecido. 
O valor padrão é falso.

*String displayName* Opcional. Um nome de exibição legível para metadados.

*String description* Opcional. Uma descrição da métrica.

*String[] tags* Opcional. Matriz de cadeia no formato = para fornecer
etiquetas especiais para uma métrica.

*boolean reusable* Indica se uma métrica com um determinado nome pode ser
registrado em mais de um local. Não se aplica a gauges.

*String unit* Unidade da métrica. O valor padrão para `@Metered` é nanossegundos.

== Dados Métricos

Verifique a métrica `@Metered` fazendo uma solicitação _GET_:

== Formato Prometheus:

[source,bash]
----
$ curl -X GET http://localhost:8080/mp-metrics-metered/metrics/application/dailyStatus
----

== Resposta Prometheus:

[source,text]
----
# TYPE application:daily_status_seconds_count meter
application:daily_status_seconds_count 1.2E-7
# TYPE application:daily_status_rate_per_second meter
application:daily_status_rate_per_second 0.0
# TYPE application:daily_status_one_min_rate_per_second meter
application:daily_status_one_min_rate_per_second 1.3376002644204984E-19
# TYPE application:daily_status_five_min_rate_per_second meter
application:daily_status_five_min_rate_per_second 3.5942838529305413E-20
# TYPE application:daily_status_fifteen_min_rate_per_second meter
application:daily_status_fifteen_min_rate_per_second 3.4665766454142955E-21
----

== Formato JSON:

Para o formato json, adicione o cabeçalho `Accept: application/json` ao diretório
Solicitação HTTP.

== Resposta JSON

[source,javascript]
----
{
	"dailyStatus": {
		"count": 2,
		"fifteenMinRate": 5.77762774235716e-14,
		"fiveMinRate": 5.990473088217569e-13,
		"meanRate": 0,
		"oneMinRate": 2.229333774034164e-12,
		"unit": "minutes"
	}
}
----

== Metadatos Métrica

Uma métrica terá metadados para que você possa aprender mais sobre ela, como `displayName`,`description`, `tags`, etc.

Verifique os metadados da métrica fazendo uma solicitação HTTP _OPTIONS_:

== Solicitação HTTP _OPTIONS_

[source,bash]
----
$ curl -X OPTIONS http://localhost:8080/mp-metrics-metered/metrics/application/dailyStatus
----

== Resposta:

[source,javascript]
----
{
	"dailyStatus": {
		"description": "Metrics to daily weather status method",
		"displayName": "",
		"name": "dailyStatus",
		"reusable": false,
		"tags": "",
		"type": "meter",
		"typeRaw": "METERED",
		"unit": "minutes"
	}
}
----

== Teste o aplicativo:

[source,bash]
----
$ mvn test
----
