opentelemetry-metrics-sdk 0.1.0 → 0.2.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 +4 -0
- data/lib/opentelemetry/sdk/metrics/export/in_memory_metric_pull_exporter.rb +1 -1
- data/lib/opentelemetry/sdk/metrics/export/periodic_metric_reader.rb +100 -0
- data/lib/opentelemetry/sdk/metrics/export.rb +1 -0
- data/lib/opentelemetry/sdk/metrics/meter.rb +1 -1
- data/lib/opentelemetry/sdk/metrics/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce5f31c7463140b3dee9d8209ded3c831964b3b6a0edff4837ec5308481d6fc3
|
4
|
+
data.tar.gz: 4c900df8d7e8eb7f8c783ad73c11136a0931d21f447c75daaa254a51653e8cb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84702ecb88071fa4d30803cdc7e71656643eb73593a4783d98fef7d1350955d03c7a3b17e5a50a61e3cc10726eb25dd6e234170ea979347c42893fb0f18abd15
|
7
|
+
data.tar.gz: 6072767e9f13652e20e376971f8c327ef52b8ef2a8d0e149819574cc5caaae0addb4d313b583e894a3c71b06ddd2bf264c030bca58a41309a359895cc0b5f8eb
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
module SDK
|
9
|
+
module Metrics
|
10
|
+
module Export
|
11
|
+
# PeriodicMetricReader provides a minimal example implementation.
|
12
|
+
class PeriodicMetricReader < MetricReader
|
13
|
+
# Returns a new instance of the {PeriodicMetricReader}.
|
14
|
+
#
|
15
|
+
# @param [Integer] export_interval_millis the maximum interval time.
|
16
|
+
# Defaults to the value of the OTEL_METRIC_EXPORT_INTERVAL environment
|
17
|
+
# variable, if set, or 60_000.
|
18
|
+
# @param [Integer] export_timeout_millis the maximum export timeout.
|
19
|
+
# Defaults to the value of the OTEL_METRIC_EXPORT_TIMEOUT environment
|
20
|
+
# variable, if set, or 30_000.
|
21
|
+
# @param [MetricReader] exporter the (duck type) MetricReader to where the
|
22
|
+
# recorded metrics are pushed after certain interval.
|
23
|
+
#
|
24
|
+
# @return a new instance of the {PeriodicMetricReader}.
|
25
|
+
def initialize(export_interval_millis: Float(ENV.fetch('OTEL_METRIC_EXPORT_INTERVAL', 60_000)),
|
26
|
+
export_timeout_millis: Float(ENV.fetch('OTEL_METRIC_EXPORT_TIMEOUT', 30_000)),
|
27
|
+
exporter: nil)
|
28
|
+
super()
|
29
|
+
|
30
|
+
@export_interval = export_interval_millis / 1000.0
|
31
|
+
@export_timeout = export_timeout_millis / 1000.0
|
32
|
+
@exporter = exporter
|
33
|
+
@thread = nil
|
34
|
+
@continue = false
|
35
|
+
@mutex = Mutex.new
|
36
|
+
@export_mutex = Mutex.new
|
37
|
+
|
38
|
+
start
|
39
|
+
end
|
40
|
+
|
41
|
+
def shutdown(timeout: nil)
|
42
|
+
thread = lock do
|
43
|
+
@continue = false # force termination in next iteration
|
44
|
+
@thread
|
45
|
+
end
|
46
|
+
thread&.join(@export_interval)
|
47
|
+
@exporter.force_flush if @exporter.respond_to?(:force_flush)
|
48
|
+
@exporter.shutdown
|
49
|
+
Export::SUCCESS
|
50
|
+
rescue StandardError => e
|
51
|
+
OpenTelemetry.handle_error(exception: e, message: 'Fail to shutdown PeriodicMetricReader.')
|
52
|
+
Export::FAILURE
|
53
|
+
end
|
54
|
+
|
55
|
+
def force_flush(timeout: nil)
|
56
|
+
export(timeout: timeout)
|
57
|
+
Export::SUCCESS
|
58
|
+
rescue StandardError
|
59
|
+
Export::FAILURE
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def start
|
65
|
+
@continue = true
|
66
|
+
if @exporter.nil?
|
67
|
+
OpenTelemetry.logger.warn 'Missing exporter in PeriodicMetricReader.'
|
68
|
+
elsif @thread&.alive?
|
69
|
+
OpenTelemetry.logger.warn 'PeriodicMetricReader is still running. Please shutdown it if it needs to restart.'
|
70
|
+
else
|
71
|
+
@thread = Thread.new do
|
72
|
+
while @continue
|
73
|
+
sleep(@export_interval)
|
74
|
+
begin
|
75
|
+
Timeout.timeout(@export_timeout) do
|
76
|
+
export(timeout: @export_timeout)
|
77
|
+
end
|
78
|
+
rescue Timeout::Error => e
|
79
|
+
OpenTelemetry.handle_error(exception: e, message: 'PeriodicMetricReader timeout.')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def export(timeout: nil)
|
87
|
+
@export_mutex.synchronize do
|
88
|
+
collected_metrics = collect
|
89
|
+
@exporter.export(collected_metrics, timeout: timeout || @export_timeout) unless collected_metrics.empty?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def lock(&block)
|
94
|
+
@mutex.synchronize(&block)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -26,3 +26,4 @@ end
|
|
26
26
|
require 'opentelemetry/sdk/metrics/export/metric_reader'
|
27
27
|
require 'opentelemetry/sdk/metrics/export/in_memory_metric_pull_exporter'
|
28
28
|
require 'opentelemetry/sdk/metrics/export/console_metric_pull_exporter'
|
29
|
+
require 'opentelemetry/sdk/metrics/export/periodic_metric_reader'
|
@@ -28,7 +28,7 @@ module OpenTelemetry
|
|
28
28
|
|
29
29
|
# @api private
|
30
30
|
def add_metric_reader(metric_reader)
|
31
|
-
@instrument_registry.
|
31
|
+
@instrument_registry.each_value do |instrument|
|
32
32
|
instrument.register_with_new_metric_store(metric_reader.metric_store)
|
33
33
|
end
|
34
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentelemetry-metrics-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenTelemetry Authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opentelemetry-api
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
145
|
+
version: '1.65'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 1.
|
152
|
+
version: '1.65'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: simplecov
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -215,6 +215,7 @@ files:
|
|
215
215
|
- lib/opentelemetry/sdk/metrics/export/console_metric_pull_exporter.rb
|
216
216
|
- lib/opentelemetry/sdk/metrics/export/in_memory_metric_pull_exporter.rb
|
217
217
|
- lib/opentelemetry/sdk/metrics/export/metric_reader.rb
|
218
|
+
- lib/opentelemetry/sdk/metrics/export/periodic_metric_reader.rb
|
218
219
|
- lib/opentelemetry/sdk/metrics/instrument.rb
|
219
220
|
- lib/opentelemetry/sdk/metrics/instrument/counter.rb
|
220
221
|
- lib/opentelemetry/sdk/metrics/instrument/histogram.rb
|
@@ -234,10 +235,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
|
|
234
235
|
licenses:
|
235
236
|
- Apache-2.0
|
236
237
|
metadata:
|
237
|
-
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.
|
238
|
+
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.2.0/file.CHANGELOG.html
|
238
239
|
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/metrics_sdk
|
239
240
|
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
|
240
|
-
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.
|
241
|
+
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-metrics-sdk/v0.2.0
|
241
242
|
post_install_message:
|
242
243
|
rdoc_options: []
|
243
244
|
require_paths:
|