From e267958dd2fcbfaca95931740f7fb4ff57fbd650 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 9 May 2023 10:06:35 -0700 Subject: [PATCH] Update spec matrix for OTel Rust metrics (#3475) --- spec-compliance-matrix.md | 162 +++++++++++++++++++------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/spec-compliance-matrix.md b/spec-compliance-matrix.md index 50aed3bb86e..4d6a5beeb0d 100644 --- a/spec-compliance-matrix.md +++ b/spec-compliance-matrix.md @@ -97,105 +97,105 @@ formats is required. Implementing more than one format is optional. | 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. | | + | + | + | + | | | + | | + | + | | +| 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. | | + | + | + | + | | | + | + | + | + | | | Instruments have an optional advice. | | | | | | | | | | | | | | A valid instrument MUST be created and warning SHOULD be emitted 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. | | - | + | | + | | | | | + | + | | +| 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 advice supports ExplicitBucketBoundaries. | | | | | | | | | | | | | -| `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. | | + | + | + | + | | | | | + | + | | +| `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`. | | + | + | + | + | | | + | | + | + | | +| `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. | | + | | | | | | | | | | | +| 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 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 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 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 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 `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 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. | | | - | | - | | | | | | - | |