opentelemetry-metrics-api 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +26 -5
- data/lib/opentelemetry/internal/global_meter_provider.rb +37 -0
- data/lib/opentelemetry/metrics/global.rb +30 -0
- data/lib/opentelemetry/metrics/legacy_global_compat.rb +56 -0
- data/lib/opentelemetry/metrics/version.rb +1 -1
- data/lib/opentelemetry-metrics-api.rb +4 -24
- metadata +7 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '01447149549ce311507e50a73b1c25962ea229f9d30fee3878ca09b519e278ba'
|
|
4
|
+
data.tar.gz: c7cf8d92fd0a56ee620a0c465f10178dde5773652482ca02b607fd3db06d4884
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fb53b43bcbce42330ba77fc382e398f6972cbe7b643d346bd6afe63fc7e354fac8f0874bb56858fea667e5015e21a5c8ac2dcb15cb67a34b0da847b2f7b5d9e0
|
|
7
|
+
data.tar.gz: 6ffc9da9c4603ded64ba39f805bc73f4bd37dea3044e306e97f6a217e2efca1823801331c07083b146b2dd1807f42a95142ef8966811df6aba7d8b6443064bae
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Release History: opentelemetry-metrics-api
|
|
2
2
|
|
|
3
|
+
### v0.9.0 / 2026-10-05
|
|
4
|
+
|
|
5
|
+
* BREAKING CHANGE: Move the global meter provider behind an opt-in require (#2416)
|
|
6
|
+
* ADDED: Move the global meter provider behind an opt-in require (#2416)
|
|
7
|
+
|
|
3
8
|
### v0.8.0 / 2026-09-29
|
|
4
9
|
|
|
5
10
|
* BREAKING CHANGE: Update api for spec compliance (#2309)
|
data/README.md
CHANGED
|
@@ -22,18 +22,24 @@ This code is still under development and is not a complete implementation of the
|
|
|
22
22
|
|
|
23
23
|
## How do I get started?
|
|
24
24
|
|
|
25
|
-
Install the
|
|
25
|
+
Install the gems using:
|
|
26
26
|
|
|
27
27
|
```sh
|
|
28
|
-
gem install opentelemetry-
|
|
28
|
+
gem install opentelemetry-sdk
|
|
29
|
+
gem install opentelemetry-metrics-sdk
|
|
29
30
|
```
|
|
30
31
|
|
|
31
|
-
Or, if you use [bundler][bundler-home], include `opentelemetry-metrics-
|
|
32
|
+
Or, if you use [bundler][bundler-home], include `opentelemetry-sdk` and `opentelemetry-metrics-sdk` in your `Gemfile`. The SDK depends on `opentelemetry-metrics-api`.
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
Requiring `opentelemetry-metrics-sdk` defines the global `OpenTelemetry.meter_provider` accessor. Requiring `opentelemetry-metrics-api` on its own does not. See [Upgrading to 0.9.0](#upgrading-to-090).
|
|
35
|
+
|
|
36
|
+
Then, use the OpenTelemetry interfaces to produce metrics and other telemetry data. Following is a basic example.
|
|
34
37
|
|
|
35
38
|
```ruby
|
|
36
|
-
require 'opentelemetry
|
|
39
|
+
require 'opentelemetry/sdk'
|
|
40
|
+
require 'opentelemetry-metrics-sdk'
|
|
41
|
+
|
|
42
|
+
OpenTelemetry::SDK.configure
|
|
37
43
|
|
|
38
44
|
# Obtain the current default meter provider
|
|
39
45
|
provider = OpenTelemetry.meter_provider
|
|
@@ -50,6 +56,20 @@ histogram.record(123, attributes: {'foo' => 'bar'})
|
|
|
50
56
|
|
|
51
57
|
For additional examples, see the [examples on github][examples-github].
|
|
52
58
|
|
|
59
|
+
## Upgrading to 0.9.0
|
|
60
|
+
|
|
61
|
+
The Metrics API is experimental. To keep it off the public `OpenTelemetry` module until it stabilizes, `opentelemetry-metrics-api` 0.9.0 no longer defines `OpenTelemetry.meter_provider` or `OpenTelemetry.meter_provider=`. `opentelemetry-metrics-sdk` 0.20.0 and later define both when required.
|
|
62
|
+
|
|
63
|
+
- **Applications using `opentelemetry-metrics-sdk`:** Upgrade the SDK to 0.20.0 or later. No code changes are needed.
|
|
64
|
+
- **Code that requires only `opentelemetry-metrics-api`:** Calling `OpenTelemetry.meter_provider` raises `NoMethodError`. Require `opentelemetry-metrics-sdk`, or `opentelemetry/metrics/global` to define the accessors without the SDK.
|
|
65
|
+
- **Applications on `opentelemetry-metrics-sdk` 0.19.0 or earlier:** These versions allow `opentelemetry-metrics-api` 0.9.0, so bundler can pair them. A compatibility shim in the API keeps them working and logs this warning:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
opentelemetry-metrics-sdk 0.19.0 and earlier register the global meter provider through a compatibility shim in opentelemetry-metrics-api. Upgrade to opentelemetry-metrics-sdk 0.20.0 or later.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The shim will be removed in a future release ([#2414][2414]). Upgrade the SDK to clear the warning.
|
|
72
|
+
|
|
53
73
|
## How can I get involved?
|
|
54
74
|
|
|
55
75
|
The `opentelemetry-metrics-api` gem source is [on github][repo-github], along with related gems including `opentelemetry-metrics-sdk`.
|
|
@@ -76,3 +96,4 @@ The `opentelemetry-api` gem is distributed under the Apache 2.0 license. See [LI
|
|
|
76
96
|
[community-meetings]: https://github.com/open-telemetry/community#community-meetings
|
|
77
97
|
[discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
|
|
78
98
|
[1662]: https://github.com/open-telemetry/opentelemetry-ruby/issues/1662
|
|
99
|
+
[2414]: https://github.com/open-telemetry/opentelemetry-ruby/issues/2414
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright The OpenTelemetry Authors
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
|
|
7
|
+
module OpenTelemetry
|
|
8
|
+
# @api private
|
|
9
|
+
module Internal
|
|
10
|
+
@meter_provider = ProxyMeterProvider.new
|
|
11
|
+
@meter_provider_mutex = Mutex.new
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
# Registers the process-wide meter provider that instrumentation reads
|
|
15
|
+
# from. The public +OpenTelemetry.meter_provider+ accessor, defined in
|
|
16
|
+
# +opentelemetry/metrics/global+, delegates here.
|
|
17
|
+
#
|
|
18
|
+
# @param [MeterProvider] provider A meter provider to register as the
|
|
19
|
+
# global instance.
|
|
20
|
+
def meter_provider=(provider)
|
|
21
|
+
@meter_provider_mutex.synchronize do
|
|
22
|
+
if @meter_provider.instance_of?(ProxyMeterProvider)
|
|
23
|
+
OpenTelemetry.logger.debug("Upgrading default proxy meter provider to #{provider.class}")
|
|
24
|
+
@meter_provider.delegate = provider
|
|
25
|
+
end
|
|
26
|
+
@meter_provider = provider
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @return [Object, Metrics::MeterProvider] registered meter provider or a
|
|
31
|
+
# default no-op implementation of the meter provider.
|
|
32
|
+
def meter_provider
|
|
33
|
+
@meter_provider_mutex.synchronize { @meter_provider }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright The OpenTelemetry Authors
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
|
|
7
|
+
require 'opentelemetry-metrics-api'
|
|
8
|
+
|
|
9
|
+
# Defines the top-level accessors for the global meter provider. The Metrics
|
|
10
|
+
# API is unstable, so requiring +opentelemetry-metrics-api+ does not define
|
|
11
|
+
# these. Requiring +opentelemetry-metrics-sdk+ does.
|
|
12
|
+
#
|
|
13
|
+
# These are delegators. The provider itself lives in
|
|
14
|
+
# {OpenTelemetry::Internal}, so this file can be required at any point,
|
|
15
|
+
# before or after the SDK is configured.
|
|
16
|
+
module OpenTelemetry
|
|
17
|
+
# Register the global meter provider.
|
|
18
|
+
#
|
|
19
|
+
# @param [MeterProvider] provider A meter provider to register as the
|
|
20
|
+
# global instance.
|
|
21
|
+
def meter_provider=(provider)
|
|
22
|
+
Internal.meter_provider = provider
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @return [Object, Metrics::MeterProvider] registered meter provider or a
|
|
26
|
+
# default no-op implementation of the meter provider.
|
|
27
|
+
def meter_provider
|
|
28
|
+
Internal.meter_provider
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright The OpenTelemetry Authors
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
|
|
7
|
+
# Installs the top-level meter provider accessors on behalf of metrics SDKs
|
|
8
|
+
# released before those accessors moved out of this gem. Those versions assign
|
|
9
|
+
# and read +OpenTelemetry.meter_provider+ while configuring and after forking,
|
|
10
|
+
# and have no way to require +opentelemetry/metrics/global+ themselves.
|
|
11
|
+
#
|
|
12
|
+
# Such an SDK is always loaded by the time it reaches for the accessor, so the
|
|
13
|
+
# check cannot happen at require time. It happens on the miss instead.
|
|
14
|
+
#
|
|
15
|
+
# Removal is tracked in #2414.
|
|
16
|
+
module OpenTelemetry
|
|
17
|
+
module Metrics
|
|
18
|
+
# Detects a metrics SDK that predates {OpenTelemetry::Metrics::Global} and
|
|
19
|
+
# installs the accessors it expects. With no SDK loaded, +super+ raises
|
|
20
|
+
# NoMethodError, which is what a caller holding only the API is meant to
|
|
21
|
+
# get.
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
module LegacyGlobalCompat
|
|
25
|
+
ACCESSORS = %i[meter_provider meter_provider=].freeze
|
|
26
|
+
|
|
27
|
+
WARNING = 'opentelemetry-metrics-sdk 0.19.0 and earlier register the global meter ' \
|
|
28
|
+
'provider through a compatibility shim in opentelemetry-metrics-api. ' \
|
|
29
|
+
'Upgrade to opentelemetry-metrics-sdk 0.20.0 or later.'
|
|
30
|
+
|
|
31
|
+
# Keyed on MeterProvider rather than the SDK's Metrics namespace, which
|
|
32
|
+
# another gem could plausibly define without the SDK being present.
|
|
33
|
+
def self.handles?(name)
|
|
34
|
+
ACCESSORS.include?(name) && defined?(OpenTelemetry::SDK::Metrics::MeterProvider)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def method_missing(name, *, &)
|
|
40
|
+
return super unless LegacyGlobalCompat.handles?(name)
|
|
41
|
+
|
|
42
|
+
require 'opentelemetry/metrics/global'
|
|
43
|
+
return super unless singleton_class.method_defined?(name)
|
|
44
|
+
|
|
45
|
+
OpenTelemetry.logger.warn(WARNING)
|
|
46
|
+
public_send(name, *, &)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def respond_to_missing?(name, include_private = false)
|
|
50
|
+
LegacyGlobalCompat.handles?(name) || super
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
singleton_class.prepend(Metrics::LegacyGlobalCompat)
|
|
56
|
+
end
|
|
@@ -10,32 +10,12 @@ require 'opentelemetry/metrics/version'
|
|
|
10
10
|
require 'opentelemetry/internal/proxy_instrument'
|
|
11
11
|
require 'opentelemetry/internal/proxy_meter_provider'
|
|
12
12
|
require 'opentelemetry/internal/proxy_meter'
|
|
13
|
+
require 'opentelemetry/internal/global_meter_provider'
|
|
14
|
+
require 'opentelemetry/metrics/legacy_global_compat'
|
|
13
15
|
|
|
14
16
|
# OpenTelemetry is an open source observability framework, providing a
|
|
15
17
|
# general-purpose API, SDK, and related tools required for the instrumentation
|
|
16
18
|
# of cloud-native software, frameworks, and libraries.
|
|
17
19
|
#
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
@meter_provider = Internal::ProxyMeterProvider.new
|
|
21
|
-
|
|
22
|
-
# Register the global meter provider.
|
|
23
|
-
#
|
|
24
|
-
# @param [MeterProvider] provider A meter provider to register as the
|
|
25
|
-
# global instance.
|
|
26
|
-
def meter_provider=(provider)
|
|
27
|
-
@mutex.synchronize do
|
|
28
|
-
if @meter_provider.instance_of? Internal::ProxyMeterProvider
|
|
29
|
-
logger.debug("Upgrading default proxy meter provider to #{provider.class}")
|
|
30
|
-
@meter_provider.delegate = provider
|
|
31
|
-
end
|
|
32
|
-
@meter_provider = provider
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# @return [Object, Metrics::MeterProvider] registered meter provider or a
|
|
37
|
-
# default no-op implementation of the meter provider.
|
|
38
|
-
def meter_provider
|
|
39
|
-
@mutex.synchronize { @meter_provider }
|
|
40
|
-
end
|
|
41
|
-
end
|
|
20
|
+
# Requiring this gem makes the Metrics API available to instrumentation through
|
|
21
|
+
# {OpenTelemetry::Internal.meter_provider}.
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: opentelemetry-metrics-api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenTelemetry Authors
|
|
@@ -34,10 +34,12 @@ files:
|
|
|
34
34
|
- LICENSE
|
|
35
35
|
- README.md
|
|
36
36
|
- lib/opentelemetry-metrics-api.rb
|
|
37
|
+
- lib/opentelemetry/internal/global_meter_provider.rb
|
|
37
38
|
- lib/opentelemetry/internal/proxy_instrument.rb
|
|
38
39
|
- lib/opentelemetry/internal/proxy_meter.rb
|
|
39
40
|
- lib/opentelemetry/internal/proxy_meter_provider.rb
|
|
40
41
|
- lib/opentelemetry/metrics.rb
|
|
42
|
+
- lib/opentelemetry/metrics/global.rb
|
|
41
43
|
- lib/opentelemetry/metrics/instrument.rb
|
|
42
44
|
- lib/opentelemetry/metrics/instrument/counter.rb
|
|
43
45
|
- lib/opentelemetry/metrics/instrument/gauge.rb
|
|
@@ -46,6 +48,7 @@ files:
|
|
|
46
48
|
- lib/opentelemetry/metrics/instrument/observable_gauge.rb
|
|
47
49
|
- lib/opentelemetry/metrics/instrument/observable_up_down_counter.rb
|
|
48
50
|
- lib/opentelemetry/metrics/instrument/up_down_counter.rb
|
|
51
|
+
- lib/opentelemetry/metrics/legacy_global_compat.rb
|
|
49
52
|
- lib/opentelemetry/metrics/measurement.rb
|
|
50
53
|
- lib/opentelemetry/metrics/meter.rb
|
|
51
54
|
- lib/opentelemetry/metrics/meter_provider.rb
|
|
@@ -54,10 +57,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
|
|
|
54
57
|
licenses:
|
|
55
58
|
- Apache-2.0
|
|
56
59
|
metadata:
|
|
57
|
-
changelog_uri: https://rubydoc.info/gems/opentelemetry-metrics-api/0.
|
|
58
|
-
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-metrics-api/v0.
|
|
60
|
+
changelog_uri: https://rubydoc.info/gems/opentelemetry-metrics-api/0.9.0/file/CHANGELOG.md
|
|
61
|
+
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-metrics-api/v0.9.0/metrics_api
|
|
59
62
|
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
|
|
60
|
-
documentation_uri: https://rubydoc.info/gems/opentelemetry-metrics-api/0.
|
|
63
|
+
documentation_uri: https://rubydoc.info/gems/opentelemetry-metrics-api/0.9.0
|
|
61
64
|
rdoc_options: []
|
|
62
65
|
require_paths:
|
|
63
66
|
- lib
|