From d95baee87a16621277fbfb2c81c2822eccb06131 Mon Sep 17 00:00:00 2001 From: Diego Hurtado Date: Fri, 22 Oct 2021 10:37:55 +0200 Subject: [PATCH] Add some requested fixes --- spec-compliance-matrix.md | 211 ++++++++++++++++---------------------- 1 file changed, 86 insertions(+), 125 deletions(-) diff --git a/spec-compliance-matrix.md b/spec-compliance-matrix.md index bee06e7181f..e1ffe96e2bf 100644 --- a/spec-compliance-matrix.md +++ b/spec-compliance-matrix.md @@ -92,131 +92,92 @@ formats is required. Implementing more than one format is optional. **Status**: [Experimental](./specification/document-status.md) -| 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 | | | | | | | | | | | | | -| It is possible to create any number of MeterProviders | | | | | | | | | | | | | -| MeterProvider provides a way to get Meter | | | | | | | | | | | | | -| 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 | | | | | | | | | | | | | -| The fallback meter name property keeps its original invalid value | | | | | | | | | | | | | -| The API provides a way to set and get a global default MeterProvider | | | | | | | | | | | | | -| It is possible to create any number of MeterProviders | | | | | | | | | | | | | -| `get_meter` accepts name, version and schema_url | | | | | | | | | | | | | -| The fallback meter name property keeps its original invalid value. | | | | | | | | | | | | | -| New configuration applies to previously returned meters. | | | | | | | | | | | | | -| 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 Asynchronous Gauge | | | | | | | | | | | | | -| The meter provides functions to create a new UpDownCounter | | | | | | | | | | | | | -| The meter provides functions to create a new Asynchronous UpDownCounter | | | | | | | | | | | | | -| The instrument has name. | | | | | | | | | | | | | -| The instrument has kind. | | | | | | | | | | | | | -| The instrument has an optional unit of measure. | | | | | | | | | | | | | -| The instrument has an optional description. | | | | | | | | | | | | | -| The meter returns an error 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 Meters. | | | | | | | | | | | | | -| 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` object. | | | | | | | | | | | | | -| The API for creating a counter accepts the name of the instrument. | | | | | | | | | | | | | -| The API for creating a counter accepts the unit of the instrument. | | | | | | | | | | | | | -| The API for creating a counter accepts the description of the instrument. | | | | | | | | | | | | | -| The counter has an add method. | | | | | | | | | | | | | -| The add method returns `null` (this can vary depending on the language). | | | | | | | | | | | | | -| The add method accepts optional attributes. | | | | | | | | | | | | | -| The add method accepts the increment amount. | | | | | | | | | | | | | -| The add method accepts only positive amounts. | | | | | | | | | | | | | -| `create_asynchronous_counter` returns an `AsynchronousCounter` object. | | | | | | | | | | | | | -| The API ObservableCounter is an abstract class. | | | | | | | | | | | | | -| The API for creating an asynchronous counter accepts the name of the instrument. | | | | | | | | | | | | | -| The API for creating a asynchronous counter accepts the unit of the instrument. | | | | | | | | | | | | | -| The API for creating a asynchronous counter accepts the description of the instrument. | | | | | | | | | | | | | -| The API for creating a asynchronous counter accepts a callback. | | | | | | | | | | | | | -| The asynchronous counter has an add method. | | | | | | | | | | | | | -| The add method returns None. | | | | | | | | | | | | | -| The add method accepts optional attributes. | | | | | | | | | | | | | -| The add method accepts the increment amount. | | | | | | | | | | | | | -| The add method accepts only positive amounts. | | | | | | | | | | | | | -| The callback function of an Asynchronous Instrument has a timeout. | | | | | | | | | | | | | -| The callback function reports measurements. | | | | | | | | | | | | | -| There is a way to pass state to the callback. | | | | | | | | | | | | | -| All methods of MeterProvider are safe to be called concurrently. | | | | | | | | | | | | | -| all methods of Meter are safe to be called concurrently. | | | | | | | | | | | | | -| All methods of Instrument are safe to be called concurrently. | | | | | | | | | | | | | -| Test 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 can be managed by The MeterProvider. | | | | | | | | | | | | | -| The MeterProvider provides methods to update the configuration | | | | | | | | | | | | | -| The updated configuration applies to all already returned Meters. | | | | | | | | | | | | | -| There is a way to register Views with a MeterProvider | | | | | | | | | | | | | -| The view instrument selection criteria is as specified. | | | | | | | | | | | | | -| The name of the View can be specified. | | | | | | | | | | | | | -| The configuration for the metrics stream is as specified. | | | | | | | | | | | | | -| The specified logic is used to process Measurements made by an instrument. | | | | | | | | | | | | | -| The None aggregation is available. | | | | | | | | | | | | | -| The None aggregation drops all measurements. | | | | | | | | | | | | | -| The Default aggregation is available. | | | | | | | | | | | | | -| The Default aggregation uses the specified aggregation. | | | | | | | | | | | | | -| The Sum aggregation is available. | | | | | | | | | | | | | -| The Sum aggregation performs as specified. | | | | | | | | | | | | | -| The Last Value aggregation is available. | | | | | | | | | | | | | -| The Last Value 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. | | | | | | | | | | | | | -| A MeasurementProcessor allows hooks when a Measurement is recorded by an instrument. | | | | | | | | | | | | | -| A MeasurementProcessor has access to The Measurement, Instrument and Resource. | | | | | | | | | | | | | -| If a Measurement is reported by a synchronous Instrument, Then a MeasurementProcessor has access to the Baggage, Context and Span associated with the Measurement. | | | | | | | | | | | | | -| The metric SDK provides a mechanism to sample Exemplars from measurements. | | | | | | | | | | | | | -| The SDK allows an exemplar to be disabled. | | | | | | | | | | | | | -| A disabled exemplar does not cause any overhead. | | | | | | | | | | | | | -| By default The SDK only samples exemplars from the context of a sampled trace | | | | | | | | | | | | | -| Exemplar sampling can leverage the configuration of a metric aggregator. | | | | | | | | | | | | | -| The SDK provides extensible Exemplar sampling hooks. | | | | | | | | | | | | | -| The SDK provides an ExemplarFilter sampling hook. | | | | | | | | | | | | | -| The SDK provides an ExemplarReservoir sampling hook. | | | | | | | | | | | | | -| The Exemplarfilter provides a method to determine if a measurement should be sampled. | | | | | | | | | | | | | -| The interface has access to the value of the measurement, the complete set of attributes of the measurement, the context of the measurement and the timestamp of the measurement. | | | | | | | | | | | | | -| The ExemplarReservoir interface provides a method to offer measurements to the reservoir and another to collect accumulated Exemplars. | | | | | | | | | | | | | -| The offer method accepts measurements including value, Attributes, Context and timestamp. | | | | | | | | | | | | | -| The offer method has the ability to pull associated trace and span information without needing to record full context. | | | | | | | | | | | | | -| The offer method does not need to store all measurements it is given and can further sample beyond the ExemplarFilter. | | | | | | | | | | | | | -| The collect method returns accumulated Exemplars. | | | | | | | | | | | | | -| Exemplars retain any attributes available in The measurement that are not preserved by aggregation or view configuration. | | | | | | | | | | | | | -| Joining togeTher attributes on an Exemplar with those available on its associated metric data point result in the full set of attributes from the original sample measurement. | | | | | | | | | | | | | -| The ExemplarReservoir avoids allocations when sampling exemplars. | | | | | | | | | | | | | -| The SDK includes a SimpleFixedSizeExemplarReservoir. | | | | | | | | | | | | | -| The SDK includes an AlignedHistogramBucketExemplarReservoir. | | | | | | | | | | | | | -| By default fixed sized histogram aggregators use AlignedHistogramBucketExemplarReservoir. | | | | | | | | | | | | | -| All other aggregators use SimpleFixedSizeExemplarReservoir. | | | | | | | | | | | | | -| The SimpleFixedSizeExemplarReservoir takes a configuration parameter for the size of the reservoir pool. | | | | | | | | | | | | | -| The reservoir will accept measurements using an equivalent of the naive reservoir sampling algorithm. | | | | | | | | | | | | | -| The AlignedHistogramBucketExemplarReservoir takes a configuration parameter that is the configuration of an Histogram. | | | | | | | | | | | | | -| The implementation keeps the last seen measurement that falls within an Histogram bucket. | | | | | | | | | | | | | -| The reservoir will accept measurements by using the equivalent of the specified naive algorithm. | | | | | | | | | | | | | -| The metric exporter has access to the pre aggregated metrics data | | | | | | | | | | | | | -| The SDK provides a Push and a Pull Metric Exporter. | | | | | | | | | | | | | -| The Push exporter provides an export function. | | | | | | | | | | | | | -| The Push exporter export function can not be called concurrently from the same exporter instance. | | | | | | | | | | | | | -| The Push exporter export function does not block indefinitely. | | | | | | | | | | | | | -| The Push exporter export function receives a batch of metrics. | | | | | | | | | | | | | -| The Push exporter export function returns Success or Failure. | | | | | | | | | | | | | -| The Push exporter provides a ForceFlush function. | | | | | | | | | | | | | -| The Push exporter ForceFlush can inform the caller wether it succeeded, failed or timed out. | | | | | | | | | | | | | -| The Push exporter provides a ForceFlush function. | | | | | | | | | | | | | -| The Push exporter provides a shutdown function. | | | | | | | | | | | | | -| The Push exporter shutdown function return Failure after being called once. | | | | | | | | | | | | | -| The Push exporter shutdown function do not block indefinitely. | | | | | | | | | | | | | -| The SDK provides OTEL_METRICS_EXEMPLAR_FILTER. | | | | | | | | | | | | | -| The default value for OTEL_METRICS_EXEMPLAR_FILTER is WITH_SAMPLED_TRACE. | | | | | | | | | | | | | -| The value of NONE for OTEL_METRICS_EXEMPLAR_FILTER causes no measurements to be eligble for exemplar sampling. | | | | | | | | | | | | | -| The value of ALL for OTEL_METRICS_EXEMPLAR_FILTER causes all measurements to be eligble for exemplar sampling. | | | | | | | | | | | | | -| The value of WITH_SAMPLED_TRACE for OTEL_METRICS_EXEMPLAR_FILTER causes only measurements s with a sampled parent span in context to be eligble for exemplar sampling. | | | | | | | | | | | | | +Disclaimer: this list of features is still a work in progress, please refer to the specification if in any doubt. + +| 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`. | | | | | | | | | | | | | +| It is possible to create any number of `MeterProvider`s. | | | | | | | | | | | | | +| `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. | | | | | | | | | | | | | +| New configuration applies to previously returned `Meter`s. | | | | | | | | | | | | | +| 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` object. | | | | | | | | | | | | | +| The API for `Counter` accepts the name of the instrument. | | | | | | | | | | | | | +| The API for `Counter` accepts the unit of the instrument. | | | | | | | | | | | | | +| The API for `Counter` accepts the description of the instrument. | | | | | | | | | | | | | +| `Counter` has an `add` method. | | | | | | | | | | | | | +| The `add` method returns `null` (this can vary depending on the language). | | | | | | | | | | | | | +| 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` returns an `AsynchronousCounter` object. | | | | | | | | | | | | | +| The API for `AsynchronousCounter` accepts the name of the instrument. | | | | | | | | | | | | | +| The API for `AsynchronousCounter` accepts the unit of the instrument. | | | | | | | | | | | | | +| The API for `AsynchronousCounter` accepts the description of the instrument. | | | | | | | | | | | | | +| The API for `AsynchronousCounter` accepts a callback. | | | | | | | | | | | | | +| `AsynchronousCounter` has an `add` method. | | | | | | | | | | | | | +| The `add` method does not return a value or returns a `null` value. | | | | | | | | | | | | | +| The `add` method accepts optional attributes. | | | | | | | | | | | | | +| The `add` method accepts the increment amount. | | | | | | | | | | | | | +| The `add` method accepts only positive amounts. | | | | | | | | | | | | | +| 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. | | | | | | | | | | | | | +| 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 can be managed by the `MeterProvider`. | | | | | | | | | | | | | +| The `MeterProvider` provides methods to update the configuration` | | | | | | | | | | | | | +| The updated configuration applies to all already returned `Meter`s. | | | | | | | | | | | | | +| 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 configuration for the metrics stream is as specified. | | | | | | | | | | | | | +| The specified logic is used to process `Measurement`s made by an instrument. | | | | | | | | | | | | | +| The `None` aggregation is available. | | | | | | | | | | | | | +| The `None` aggregation drops all measurements. | | | | | | | | | | | | | +| The `Default` aggregation is available. | | | | | | | | | | | | | +| The `Default` aggregation uses the specified aggregation. | | | | | | | | | | | | | +| 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. | | | | | | | | | | | | | +| A `MeasurementProcessor` allows hooks when a Measurement is recorded by an instrument. | | | | | | | | | | | | | +| A `MeasurementProcessor` has access to The Measurement, Instrument and Resource. | | | | | | | | | | | | | +| If a Measurement is reported by a synchronous Instrument, Then a `MeasurementProcessor` has access to the `Baggage`, `Context` and `Span` associated with the `Measurement`. | | | | | | | | | | | | | +| The metrics exporter has access to the pre aggregated metrics data. | | | | | | | | | | | | | +| 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 wether it succeeded, failed or timed out. | | | | | | | | | | | | | +| The metrics exporter provides a `shutdown` function. | | | | | | | | | | | | | +| The metrics exporter `shutdown` function do not block indefinitely. | | | | | | | | | | | | | ## Resource