= MicroProfile Metrics `@Histogram`
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published

This is an example on how to use microprofile metrics in TomEE.

== Run the application:

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

Within the application, there is an enpoint that will give you a weather
histogram of the most recent New York City temperatures.

== Request:

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

== Response:

[source,javascript]
----
{
    "count":15,
    "max":55,
    "mean":44.4,
    "min":27,
    "p50":45.0,
    "p75":46.0,
    "p95":54.0,
    "p98":54.0,
    "p99":54.0,
    "p999":54.0,
    "stddev":7.0710678118654755,
    "unit":"degrees F"
}
----

== Histogram Feature

Microprofile metrics has a feature create a histogram of data.

To use this feature, inject a `MetricRegistry`, register the Histogram, and add
data to the histogram as shown below.

[source,java]
----
@Inject
private MetricRegistry registry;

@Inject
@Metric(name = "temperatures", description = "A histogram metrics example.",
    displayName = "Histogram of Recent New York Temperatures")
private Histogram histogram;

@Path("/histogram")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Histogram getTemperatures() {
    Metadata metadata = new Metadata("temperatures", MetricType.HISTOGRAM, "degrees F");
    metadata.setDescription("A histogram of recent New York temperatures.");
    final int[] RECENT_NEW_YORK_TEMPS = { 46, 45, 50, 46, 45, 27, 30, 48, 55, 54, 45, 41, 45, 43, 46 };
    histogram = registry.histogram(metadata);
    for(int temp : RECENT_NEW_YORK_TEMPS) {
        histogram.update(temp);
    }
    return histogram;
}
----

There are some Histogram configurations defined in the `@Metric` annotation:

*String name* Optional. The name of the metric. If not explicitly given the
name of the annotated object is used.

*String displayName* Optional. A human readable display name for metadata.

*String description* Optional. A description of the metric.

*String[] tags* Optional. An array of Strings in the = format to supply special
tags to a metric.

*boolean reusable* Denotes if a metric with a certain name can be registered in
more than one place. Does not apply to gauges or histograms.

=== For the histogram status:

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

=== Reponse:

[source,bash]
----
 Here are the most recent New York City temperatures.
----

=== Expected Prometheus format:

[source,text]
----
    # TYPE application:temperatures_degrees F summary histogram
    # TYPE application:temperatures_degrees F_count histogram
    application:temperatures_degrees F_count 15.0
    # TYPE application:temperatures_min_degrees F histogram
    application:temperatures_min_degrees F 27.0
    # TYPE application:temperatures_max_degrees F histogram
    application:temperatures_max_degrees F 55.0
    # TYPE application:temperatures_mean_degrees F histogram
    application:temperatures_mean_degrees F 44.4
    # TYPE application:temperatures_stddev_degrees F histogram
    application:temperatures_stddev_degrees F 7.0710678118654755
    # TYPE application:temperatures_degrees F histogram
    application:temperatures_degrees F{quantile="0.5"} 45.0
    # TYPE application:temperatures_degrees F histogram
    application:temperatures_degrees F{quantile="0.75"} 46.0
    # TYPE application:temperatures_degrees F histogram
    application:temperatures_degrees F{quantile="0.95"} 54.0
    # TYPE application:temperatures_degrees F histogram
    application:temperatures_degrees F{quantile="0.98"} 54.0
    # TYPE application:temperatures_degrees F histogram
    application:temperatures_degrees F{quantile="0.99"} 54.0
    # TYPE application:temperatures_degrees F histogram
    application:temperatures_degrees F{quantile="0.999"} 54.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures summary histogram
    # TYPE application:org_superbiz_histogram_weather_service_temperatures_count histogram
    application:org_superbiz_histogram_weather_service_temperatures_count 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures_min histogram
    application:org_superbiz_histogram_weather_service_temperatures_min 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures_max histogram
    application:org_superbiz_histogram_weather_service_temperatures_max 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures_mean histogram
    application:org_superbiz_histogram_weather_service_temperatures_mean NaN
    # TYPE application:org_superbiz_histogram_weather_service_temperatures_stddev histogram
    application:org_superbiz_histogram_weather_service_temperatures_stddev 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
    application:org_superbiz_histogram_weather_service_temperatures{quantile="0.5"} 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
    application:org_superbiz_histogram_weather_service_temperatures{quantile="0.75"} 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
    application:org_superbiz_histogram_weather_service_temperatures{quantile="0.95"} 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
    application:org_superbiz_histogram_weather_service_temperatures{quantile="0.98"} 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
    application:org_superbiz_histogram_weather_service_temperatures{quantile="0.99"} 0.0
    # TYPE application:org_superbiz_histogram_weather_service_temperatures histogram
    application:org_superbiz_histogram_weather_service_temperatures{quantile="0.999"} 0.0
----

=== Request:

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

=== Response:

[source,javascript]
----
{
    "org.superbiz.histogram.WeatherService.temperatures": {
        "count":0,
        "max":0,
        "min":0,
        "p50":0.0,
        "p75":0.0,
        "p95":0.0,
        "p98":0.0,
        "p99":0.0,
        "p999":0.0,
        "stddev":0.0,
        "unit":"none"
    }
}
----

== Metric Metadata:

A metric will have a metadata to provide information about it such as
`displayName`, `description`, `tags`, etc.

=== Request:

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

=== Response:

[source,javascript]
----
{
    "org.superbiz.histogram.WeatherService.temperatures": {
        "description": "A histogram metrics example.",
        "displayName":"Histogram of Recent New York Temperatures",
        "name":"org.superbiz.histogram.WeatherService.temperatures",
        "reusable":false,
        "tags":"",
        "type":"histogram",
        "typeRaw":"HISTOGRAM",
        "unit":"none"
    }
}
----

=== Test the application:

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