diff --git a/spec-compliance-matrix.md b/spec-compliance-matrix.md index d26371642a7..95e1ab18ca9 100644 --- a/spec-compliance-matrix.md +++ b/spec-compliance-matrix.md @@ -96,107 +96,107 @@ Disclaimer: this list of features is still a work in progress, please refer to t | 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`. | | + | + | | | | | | | | - | | -| 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 | - | - | | | | | | | | - | | -| 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. | | + | + | | | | | | | | + | | -| An error is returned when multiple instruments are registered under the same `Meter` using the same `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. | | - | - | | | | | | | | + | | -| `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. | | - | - | | | | | | | | ? | | -| 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`. | | + | + | | | | | | | | - | | -| 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 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 `Histogram` aggregation is available. | | + | + | | | | | | | | + | | -| The `Histogram` aggregation performs as specified. | | + | + | | | | | | | | + | | -| The explicit bucket `Histogram` aggregation is available. | | - | + | | | | | | | | + | | -| The explicit bucket `Histogram` aggregation performs as specified. | | - | + | | | | | | | | + | | -| 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 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 | | | | | | | | | | - | | +| 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`. | | + | + | | + | | | | | | - | | +| 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 | - | - | | - | | | | | | - | | +| 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. | | + | + | | + | | | | | | + | | +| An error is returned when multiple instruments are registered under the same `Meter` using the same `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. | | - | - | | - | | | | | | + | | +| `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. | | - | - | | - | | | | | | ? | | +| 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`. | | + | + | | + | | | | | | - | | +| 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 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 `Histogram` aggregation is available. | | + | + | | - | | | | | | + | | +| The `Histogram` aggregation performs as specified. | | + | + | | - | | | | | | + | | +| The explicit bucket `Histogram` aggregation is available. | | - | + | | + | | | | | | + | | +| The explicit bucket `Histogram` aggregation performs as specified. | | - | + | | - | | | | | | + | | +| 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 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 | | | | - | | | | | | - | | ## Resource