From c452806dd08d02279c80bcef1a654333563d76c3 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Fri, 26 Jan 2024 09:45:08 -0700 Subject: [PATCH] erlang/elixir: update spec-compliance-matrix for metrics (#3823) --- spec-compliance-matrix.md | 238 +++++++++++++++++++------------------- 1 file changed, 119 insertions(+), 119 deletions(-) diff --git a/spec-compliance-matrix.md b/spec-compliance-matrix.md index 8614d69ecf4..c9950b9e5e3 100644 --- a/spec-compliance-matrix.md +++ b/spec-compliance-matrix.md @@ -96,125 +96,125 @@ formats is required. Implementing more than one format is optional. ## Metrics -| Feature | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|----|------|-----|--------|------|--------|-----|------|-----|------|-------| -| The API provides a way to set and get a global default `MeterProvider`. | X | + | + | + | + | | | + | + | + | - | | -| It is possible to create any number of `MeterProvider`s. | X | + | + | + | + | | | + | + | + | + | | -| `MeterProvider` provides a way to get a `Meter`. | | + | + | + | + | | | + | + | + | - | | -| `get_meter` accepts name, `version` and `schema_url`. | | + | + | + | + | | | + | + | + | - | | -| `get_meter` accepts `attributes`. | | | | | | | | + | + | + | | | -| When an invalid `name` is specified a working `Meter` implementation is returned as a fallback. | | + | + | + | + | | | | + | + | - | | -| The fallback `Meter` `name` property keeps its original invalid value. | X | - | - | + | + | | | | + | - | - | | -| Associate `Meter` with `InstrumentationScope`. | | | + | + | + | | | | + | + | | | -| The meter provides functions to create a new `Counter`. | | + | + | + | + | | | + | + | + | + | | -| The meter provides functions to create a new `AsynchronousCounter`. | | + | + | + | + | | | + | + | + | + | | -| The meter provides functions to create a new `Histogram`. | | + | + | + | + | | | + | + | + | + | | -| The meter provides functions to create a new `AsynchronousGauge`. | | + | + | + | + | | | + | + | + | + | | -| The meter provides functions to create a new `UpDownCounter`. | | + | + | + | + | | | + | + | + | + | | -| The meter provides functions to create a new `AsynchronousUpDownCounter`. | | + | + | + | + | | | + | + | + | + | | -| Instruments have `name` | | + | + | + | + | | | + | + | + | + | | -| Instruments have kind. | | + | + | + | + | | | + | + | + | + | | -| Instruments have an optional unit of measure. | | + | + | + | + | | | + | + | + | + | | -| Instruments have an optional description. | | + | + | + | + | | | + | + | + | + | | -| A valid instrument MUST be created and warning SHOULD be emitted when multiple instruments are registered under the same `Meter` using the same `name`. | | | + | + | + | | | | | | | | -| Duplicate instrument registration name conflicts are resolved by using the first-seen for the stream name. | | | + | | | | | | | | | | -| It is possible to register two instruments with same `name` under different `Meter`s. | | + | + | + | + | | | | + | + | + | | -| Instrument names conform to the specified syntax. | | + | + | + | + | | | | | + | | | -| Instrument units conform to the specified syntax. | | - | + | | + | | | | + | + | + | | -| Instrument descriptions conform to the specified syntax. | | - | + | | - | | | | | - | + | | -| Instrument supports the advisory ExplicitBucketBoundaries parameter. | | | + | | | | | | | | | | -| Instrument supports the advisory Attributes parameter. | | | + | | | | | | | | | | -| `create_counter` returns a `Counter`. | | + | + | + | + | | | + | + | + | + | | -| The API for `Counter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | + | + | + | | -| `Counter` has an `add` method. | | + | + | + | + | | | + | + | + | + | | -| The `add` method returns no (or dummy) value. | X | + | + | + | + | | | + | + | + | + | | -| The `add` method accepts optional attributes. | | + | + | + | + | | | + | + | + | + | | -| The `add` method accepts the increment amount. | | + | + | + | + | | | + | + | + | + | | -| The `add` method of `Counter` accepts only positive amounts. | | + | + | + | + | | | | + | + | - | | -| `create_asynchronous_counter` creates an `AsynchronousCounter`. | | + | + | + | + | | | + | + | + | + | | -| The API for `AsynchronousCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | + | + | + | | -| The API for `AsynchronousCounter` accepts a callback. | | + | + | + | + | | | + | + | + | + | | -| `create_up_down_counter` returns an `UpDownCounter`. | | + | + | + | + | | | + | + | + | + | | -| The API for `UpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | + | + | + | | -| `UpDownCounter` has an `add` method. | | + | + | + | + | | | + | + | + | + | | -| The `add` method returns no (or dummy) value. | X | + | + | + | + | | | + | + | + | + | | -| The `add` method accepts optional attributes. | | + | + | + | + | | | + | + | + | + | | -| The `add` method accepts the increment amount. | | + | + | + | + | | | + | + | + | + | | -| `create_asynchronous_up_down_counter` creates an `AsynchronousUpDownCounter`. | | + | + | + | + | | | + | + | + | + | | -| The API for `AsynchronousUpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | + | + | + | | -| The API for `AsynchronousUpDownCounter` accepts a callback. | | + | + | + | + | | | + | + | + | + | | -| `create_histogram` returns a `Histogram`. | | + | + | + | + | | | + | + | + | + | | -| The API for `Histogram` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | + | + | + | | -| `Histogram` has a `record` method. | | + | + | + | + | | | + | + | + | + | | -| The `record` method return no (or dummy) value. | X | + | + | + | + | | | + | + | + | + | | -| The `record` method accepts optional attributes. | | + | + | + | + | | | + | + | + | + | | -| The `record` method accepts a value. | | + | + | + | + | | | + | + | + | + | | -| The `record` method of `Histogram` accepts only positive amounts. | | - | + | + | + | | | | + | + | + | | -| `create_asynchronous_gauge` creates an `Asynchronous Gauge`. | | + | + | + | + | | | + | + | + | + | | -| The API for `AsynchronousGauge` accepts the name, unit and description of the instrument. | | + | + | + | + | | | + | + | + | + | | -| The API for `AsynchronousGauge` accepts a callback. | | + | + | + | + | | | + | + | + | + | | -| The callback function of an `Asynchronous` instrument does not block indefinitely. | X | - | - | + | - | | | | | + | ? | | -| The callback function reports `Measurement`s. | | + | + | + | + | | | | + | + | + | | -| There is a way to pass state to the callback. | X | + | + | | + | | | | | + | + | | -| All methods of `MeterProvider` are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | -| All methods of `Meter` are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | -| All methods of any instrument are safe to be called concurrently. | | + | + | + | - | | | | | + | + | | -| `MeterProvider` allows a `Resource` to be specified. | | + | + | + | + | | | + | + | + | + | | -| A specified `Resource` can be associated with all the produced metrics from any `Meter` from the `MeterProvider`. | | + | + | + | + | | | + | + | + | + | | -| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationLibrary` instance stored in the `Meter`. | | + | - | | + | | | | + | + | - | | -| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationScope` instance stored in the `Meter`. | | | + | + | | | | + | + | + | | | -| Configuration is managed solely by the `MeterProvider`. | | + | + | + | + | | | + | + | + | + | | -| The `MeterProvider` provides methods to update the configuration | X | - | - | - | + | | | | | - | + | | -| The updated configuration applies to all already returned `Meter`s. | if above | - | - | - | - | | | | | - | + | | -| There is a way to register `View`s with a `MeterProvider`. | | - | + | + | + | | | + | + | + | + | | -| The `View` instrument selection criteria is as specified. | | | + | + | + | | | + | + | + | + | | -| The `View` instrument selection criteria supports wildcards. | X | | + | + | + | | | | + | + | + | | -| The `View` instrument selection criteria supports the match-all wildcard. | | | + | + | + | | | | + | + | + | | -| The `View` instrument selection criteria supports a unit. | | + | | | + | | | | + | | | | -| The name of the `View` can be specified. | | | + | + | + | | | + | | + | + | | -| The `View` allows configuring the name description, attributes keys and aggregation of the resulting metric stream. | | | + | + | + | | | + | + | + | - | | -| The `View` allows configuring the exemplar reservoir of resulting metric stream. | X | | - | | - | | | | | | - | | -| The SDK allows more than one `View` to be specified per instrument. | X | | + | + | + | | | | + | + | + | | -| The `Drop` aggregation is available. | | + | + | + | + | | | | + | + | + | | -| The `Drop` aggregation drops all measurements and does not produce a metric stream. | | + | + | + | + | | | | + | - | + | | -| The `Default` aggregation is available. | | + | + | + | + | | | | + | + | + | | -| The `Default` aggregation uses the specified aggregation by instrument. | | + | + | + | + | | | | + | + | + | | -| The `Sum` aggregation is available. | | + | + | + | + | | | + | + | + | + | | -| The `Sum` aggregation performs as specified. | | + | + | + | + | | | + | + | + | + | | -| The `LastValue` aggregation is available. | | + | + | + | + | | | + | + | + | + | | -| The `LastValue` aggregation performs as specified. | | + | + | + | + | | | + | + | + | + | | -| The `ExplicitBucketHistogram` aggregation is available. | | - | + | + | + | | | + | + | + | + | | -| The `ExplicitBucketHistogram` aggregation performs as specified. | | - | + | + | + | | | + | + | + | + | | -| The `ExponentialBucketHistogram` aggregation is available. | | | | | | | | | | | + | | -| The `ExponentialBucketHistogram` aggregation performs as specified. | | | | | | | | | | | + | | -| The metrics Reader implementation supports registering metric Exporters | | | + | + | + | | | + | + | + | + | | -| The metrics Reader implementation supports configuring the default aggregation on the basis of instrument kind. | | | + | | + | | | | | - | - | | -| The metrics Reader implementation supports configuring the default temporality on the basis of instrument kind. | | | + | + | + | | | | + | + | | | -| The metrics Exporter has access to the aggregated metrics data (aggregated points, not raw measurements). | | + | + | + | + | | | | + | + | + | | -| The metrics Exporter `export` function can not be called concurrently from the same Exporter instance. | | + | + | + | - | | | | | + | + | | -| The metrics Exporter `export` function does not block indefinitely. | | + | + | + | - | | | | | + | + | | -| The metrics Exporter `export` function receives a batch of metrics. | | + | + | + | + | | | + | + | + | + | | -| The metrics Exporter `export` function returns `Success` or `Failure`. | | + | + | + | + | | | + | + | + | + | | -| The metrics Exporter provides a `ForceFlush` function. | | - | + | + | - | | | + | + | + | + | | -| The metrics Exporter `ForceFlush` can inform the caller whether it succeeded, failed or timed out. | | | + | + | - | | | + | | + | + | | -| The metrics Exporter provides a `shutdown` function. | | + | + | + | - | | | + | + | + | + | | -| The metrics Exporter `shutdown` function do not block indefinitely. | | + | + | + | - | | | | | + | + | | -| The metrics SDK samples `Exemplar`s from measurements. | | | + | | - | | | | | | - | | -| Exemplar sampling can be disabled. | | | - | | - | | | | | | - | | -| The metrics SDK samples measurements in the context of a sampled trace by default. | | | + | | - | | | | | | - | | -| Exemplars retain any attributes available in the measurement that are not preserved by aggregation or view configuration. | | | + | | - | | | | | | - | | -| Exemplars contain the associated trace id and span id of the active span in the Context when the measurement was taken. | | | + | | - | | | | | | - | | -| Exemplars contain the timestamp when the measurement was taken. | | | + | | - | | | | | | - | | -| The metrics SDK provides an `ExemplarReservoir` interface or extension point. | X | | - | | - | | | + | | | - | | -| An `ExemplarReservoir` has an `offer` method with access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | | + | | | - | | -| The metrics SDK provides a `SimpleFixedSizeExemplarReservoir` that is used by default for all aggregations except `ExplicitBucketHistogram`. | | | + | | - | | | + | | | - | | -| The default size of the `SimpleFixedSizeExemplarReservoir` is `1`. | | | | | | | | | | | | | -| The metrics SDK provides an `AlignedHistogramBucketExemplarReservoir` that is used by default for `ExplicitBucketHistogram` aggregation. | | | + | | - | | | | | | - | | -| The metrics SDK provides an `ExemplarFilter` interface or extension point. | X | | - | | - | | | + | | | - | | -| An `ExemplarFilter` has access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | | + | | | - | | -| A metric Producer accepts an optional metric Filter | | | | | | | | | | | | | -| The metric Reader implementation supports registering metric Filter and passing them its registered metric Producers | | | | | | | | | | | | | -| The metric SDK's metric Producer implementations uses the metric Filter | | | | | | | | | | | | | +| Feature | Optional | Go | Java | JS | Python | Ruby | Erlang | PHP | Rust | C++ | .NET | Swift | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|----|------|----|--------|------|--------|-----|------|-----|------|-------| +| The API provides a way to set and get a global default `MeterProvider`. | X | + | + | + | + | | + | + | + | + | - | | +| It is possible to create any number of `MeterProvider`s. | X | + | + | + | + | | + | + | + | + | + | | +| `MeterProvider` provides a way to get a `Meter`. | | + | + | + | + | | + | + | + | + | - | | +| `get_meter` accepts name, `version` and `schema_url`. | | + | + | + | + | | + | + | + | + | - | | +| `get_meter` accepts `attributes`. | | | | | | | | + | + | + | | | +| When an invalid `name` is specified a working `Meter` implementation is returned as a fallback. | | + | + | + | + | | + | | + | + | - | | +| The fallback `Meter` `name` property keeps its original invalid value. | X | - | - | + | + | | + | | + | - | - | | +| Associate `Meter` with `InstrumentationScope`. | | | + | + | + | | + | | + | + | | | +| The meter provides functions to create a new `Counter`. | | + | + | + | + | | + | + | + | + | + | | +| The meter provides functions to create a new `AsynchronousCounter`. | | + | + | + | + | | + | + | + | + | + | | +| The meter provides functions to create a new `Histogram`. | | + | + | + | + | | + | + | + | + | + | | +| The meter provides functions to create a new `AsynchronousGauge`. | | + | + | + | + | | + | + | + | + | + | | +| The meter provides functions to create a new `UpDownCounter`. | | + | + | + | + | | + | + | + | + | + | | +| The meter provides functions to create a new `AsynchronousUpDownCounter`. | | + | + | + | + | | + | + | + | + | + | | +| Instruments have `name` | | + | + | + | + | | + | + | + | + | + | | +| Instruments have kind. | | + | + | + | + | | + | + | + | + | + | | +| Instruments have an optional unit of measure. | | + | + | + | + | | + | + | + | + | + | | +| Instruments have an optional description. | | + | + | + | + | | + | + | + | + | + | | +| A valid instrument MUST be created and warning SHOULD be emitted when multiple instruments are registered under the same `Meter` using the same `name`. | | | + | + | + | | + | | | | | | +| Duplicate instrument registration name conflicts are resolved by using the first-seen for the stream name. | | | + | | | | + | | | | | | +| It is possible to register two instruments with same `name` under different `Meter`s. | | + | + | + | + | | + | | + | + | + | | +| Instrument names conform to the specified syntax. | | + | + | + | + | | + | | | + | | | +| Instrument units conform to the specified syntax. | | - | + | | + | | - | | + | + | + | | +| Instrument descriptions conform to the specified syntax. | | - | + | | - | | - | | | - | + | | +| Instrument supports the advisory ExplicitBucketBoundaries parameter. | | | + | | | | + | | | | | | +| Instrument supports the advisory Attributes parameter. | | | + | | | | - | | | | | | +| `create_counter` returns a `Counter`. | | + | + | + | + | | + | + | + | + | + | | +| The API for `Counter` accepts the name, unit and description of the instrument. | | + | + | + | + | | + | + | + | + | + | | +| `Counter` has an `add` method. | | + | + | + | + | | + | + | + | + | + | | +| The `add` method returns no (or dummy) value. | X | + | + | + | + | | + | + | + | + | + | | +| The `add` method accepts optional attributes. | | + | + | + | + | | + | + | + | + | + | | +| The `add` method accepts the increment amount. | | + | + | + | + | | + | + | + | + | + | | +| The `add` method of `Counter` accepts only positive amounts. | | + | + | + | + | | | | + | + | - | | +| `create_asynchronous_counter` creates an `AsynchronousCounter`. | | + | + | + | + | | + | + | + | + | + | | +| The API for `AsynchronousCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | + | + | + | + | + | | +| The API for `AsynchronousCounter` accepts a callback. | | + | + | + | + | | + | + | + | + | + | | +| `create_up_down_counter` returns an `UpDownCounter`. | | + | + | + | + | | + | + | + | + | + | | +| The API for `UpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | + | + | + | + | + | | +| `UpDownCounter` has an `add` method. | | + | + | + | + | | + | + | + | + | + | | +| The `add` method returns no (or dummy) value. | X | + | + | + | + | | + | + | + | + | + | | +| The `add` method accepts optional attributes. | | + | + | + | + | | + | + | + | + | + | | +| The `add` method accepts the increment amount. | | + | + | + | + | | + | + | + | + | + | | +| `create_asynchronous_up_down_counter` creates an `AsynchronousUpDownCounter`. | | + | + | + | + | | + | + | + | + | + | | +| The API for `AsynchronousUpDownCounter` accepts the name, unit and description of the instrument. | | + | + | + | + | | + | + | + | + | + | | +| The API for `AsynchronousUpDownCounter` accepts a callback. | | + | + | + | + | | + | + | + | + | + | | +| `create_histogram` returns a `Histogram`. | | + | + | + | + | | + | + | + | + | + | | +| The API for `Histogram` accepts the name, unit and description of the instrument. | | + | + | + | + | | + | + | + | + | + | | +| `Histogram` has a `record` method. | | + | + | + | + | | + | + | + | + | + | | +| The `record` method return no (or dummy) value. | X | + | + | + | + | | + | + | + | + | + | | +| The `record` method accepts optional attributes. | | + | + | + | + | | + | + | + | + | + | | +| The `record` method accepts a value. | | + | + | + | + | | + | + | + | + | + | | +| The `record` method of `Histogram` accepts only positive amounts. | | - | + | + | + | | + | | + | + | + | | +| `create_asynchronous_gauge` creates an `Asynchronous Gauge`. | | + | + | + | + | | + | + | + | + | + | | +| The API for `AsynchronousGauge` accepts the name, unit and description of the instrument. | | + | + | + | + | | + | + | + | + | + | | +| The API for `AsynchronousGauge` accepts a callback. | | + | + | + | + | | + | + | + | + | + | | +| The callback function of an `Asynchronous` instrument does not block indefinitely. | X | - | - | + | - | | + | | | + | ? | | +| The callback function reports `Measurement`s. | | + | + | + | + | | + | | + | + | + | | +| There is a way to pass state to the callback. | X | + | + | | + | | + | | | + | + | | +| All methods of `MeterProvider` are safe to be called concurrently. | | + | + | + | - | | + | | | + | + | | +| All methods of `Meter` are safe to be called concurrently. | | + | + | + | - | | + | | | + | + | | +| All methods of any instrument are safe to be called concurrently. | | + | + | + | - | | + | | | + | + | | +| `MeterProvider` allows a `Resource` to be specified. | | + | + | + | + | | | + | + | + | + | | +| A specified `Resource` can be associated with all the produced metrics from any `Meter` from the `MeterProvider`. | | + | + | + | + | | | + | + | + | + | | +| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationLibrary` instance stored in the `Meter`. | | + | - | | + | | | | + | + | - | | +| The supplied `name`, `version` and `schema_url` arguments passed to the `MeterProvider` are used to create an `InstrumentationScope` instance stored in the `Meter`. | | | + | + | | | + | + | + | + | | | +| Configuration is managed solely by the `MeterProvider`. | | + | + | + | + | | + | + | + | + | + | | +| The `MeterProvider` provides methods to update the configuration | X | - | - | - | + | | - | | | - | + | | +| The updated configuration applies to all already returned `Meter`s. | if above | - | - | - | - | | - | | | - | + | | +| There is a way to register `View`s with a `MeterProvider`. | | - | + | + | + | | + | + | + | + | + | | +| The `View` instrument selection criteria is as specified. | | | + | + | + | | + | + | + | + | + | | +| The `View` instrument selection criteria supports wildcards. | X | | + | + | + | | - | | + | + | + | | +| The `View` instrument selection criteria supports the match-all wildcard. | | | + | + | + | | + | | + | + | + | | +| The `View` instrument selection criteria supports a unit. | | + | | | + | | + | | + | | | | +| The name of the `View` can be specified. | | | + | + | + | | + | + | | + | + | | +| The `View` allows configuring the name description, attributes keys and aggregation of the resulting metric stream. | | | + | + | + | | + | + | + | + | - | | +| The `View` allows configuring the exemplar reservoir of resulting metric stream. | X | | - | | - | | - | | | | - | | +| The SDK allows more than one `View` to be specified per instrument. | X | | + | + | + | | + | | + | + | + | | +| The `Drop` aggregation is available. | | + | + | + | + | | + | | + | + | + | | +| The `Drop` aggregation drops all measurements and does not produce a metric stream. | | + | + | + | + | | + | | + | - | + | | +| The `Default` aggregation is available. | | + | + | + | + | | + | | + | + | + | | +| The `Default` aggregation uses the specified aggregation by instrument. | | + | + | + | + | | + | | + | + | + | | +| The `Sum` aggregation is available. | | + | + | + | + | | + | + | + | + | + | | +| The `Sum` aggregation performs as specified. | | + | + | + | + | | + | + | + | + | + | | +| The `LastValue` aggregation is available. | | + | + | + | + | | + | + | + | + | + | | +| The `LastValue` aggregation performs as specified. | | + | + | + | + | | + | + | + | + | + | | +| The `ExplicitBucketHistogram` aggregation is available. | | - | + | + | + | | + | + | + | + | + | | +| The `ExplicitBucketHistogram` aggregation performs as specified. | | - | + | + | + | | + | + | + | + | + | | +| The `ExponentialBucketHistogram` aggregation is available. | | | | | | | - | | | | + | | +| The `ExponentialBucketHistogram` aggregation performs as specified. | | | | | | | - | | | | + | | +| The metrics Reader implementation supports registering metric Exporters | | | + | + | + | | + | + | + | + | + | | +| The metrics Reader implementation supports configuring the default aggregation on the basis of instrument kind. | | | + | | + | | + | | | - | - | | +| The metrics Reader implementation supports configuring the default temporality on the basis of instrument kind. | | | + | + | + | | + | | + | + | | | +| The metrics Exporter has access to the aggregated metrics data (aggregated points, not raw measurements). | | + | + | + | + | | + | | + | + | + | | +| The metrics Exporter `export` function can not be called concurrently from the same Exporter instance. | | + | + | + | - | | + | | | + | + | | +| The metrics Exporter `export` function does not block indefinitely. | | + | + | + | - | | + | | | + | + | | +| The metrics Exporter `export` function receives a batch of metrics. | | + | + | + | + | | + | + | + | + | + | | +| The metrics Exporter `export` function returns `Success` or `Failure`. | | + | + | + | + | | + | + | + | + | + | | +| The metrics Exporter provides a `ForceFlush` function. | | - | + | + | - | | + | + | + | + | + | | +| The metrics Exporter `ForceFlush` can inform the caller whether it succeeded, failed or timed out. | | | + | + | - | | + | + | | + | + | | +| The metrics Exporter provides a `shutdown` function. | | + | + | + | - | | + | + | + | + | + | | +| The metrics Exporter `shutdown` function do not block indefinitely. | | + | + | + | - | | + | | | + | + | | +| The metrics SDK samples `Exemplar`s from measurements. | | | + | | - | | - | | | | - | | +| Exemplar sampling can be disabled. | | | - | | - | | - | | | | - | | +| The metrics SDK samples measurements in the context of a sampled trace by default. | | | + | | - | | - | | | | - | | +| Exemplars retain any attributes available in the measurement that are not preserved by aggregation or view configuration. | | | + | | - | | - | | | | - | | +| Exemplars contain the associated trace id and span id of the active span in the Context when the measurement was taken. | | | + | | - | | - | | | | - | | +| Exemplars contain the timestamp when the measurement was taken. | | | + | | - | | - | | | | - | | +| The metrics SDK provides an `ExemplarReservoir` interface or extension point. | X | | - | | - | | - | + | | | - | | +| An `ExemplarReservoir` has an `offer` method with access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | - | + | | | - | | +| The metrics SDK provides a `SimpleFixedSizeExemplarReservoir` that is used by default for all aggregations except `ExplicitBucketHistogram`. | | | + | | - | | - | + | | | - | | +| The default size of the `SimpleFixedSizeExemplarReservoir` is `1`. | | | | | | | - | | | | | | +| The metrics SDK provides an `AlignedHistogramBucketExemplarReservoir` that is used by default for `ExplicitBucketHistogram` aggregation. | | | + | | - | | - | | | | - | | +| The metrics SDK provides an `ExemplarFilter` interface or extension point. | X | | - | | - | | - | + | | | - | | +| An `ExemplarFilter` has access to the measurement value, attributes, `Context` and timestamp. | X | | - | | - | | - | + | | | - | | +| A metric Producer accepts an optional metric Filter | | | | | | | - | | | | | | +| The metric Reader implementation supports registering metric Filter and passing them its registered metric Producers | | | | | | | - | | | | | | +| The metric SDK's metric Producer implementations uses the metric Filter | | | | | | | - | | | | | | ## Logs