foam-otel 3.0.0.alpha.11 → 3.0.0.alpha.12
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/README.md +1 -1
- data/lib/foam/otel/internal/exporters.rb +33 -19
- data/lib/foam/otel/version.rb +1 -1
- metadata +17 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b67fa02fd12d317a0bceff3c596f63d928b0187995d02e95191f9ecb05b7383e
|
|
4
|
+
data.tar.gz: 6933cac173a8df6fa83fe474f06fd59569d0da61eb4a78f16919c695561b63af
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a7080090c2024fda65b0bf8d76edbe311961ae7c26814cd3154c11e9c7735e9730c10e100468d1046acc94e1cb2b2d1518b50cdc72b631201187b271b167c722
|
|
7
|
+
data.tar.gz: 184764049f1395f94f270cec7054138cfd78c8f6b40c93c3cafafdcb4cd7a3754bfa1eed0851e47d1f96258f10e1dea51889624862e07f86579e42d73a26353a
|
data/README.md
CHANGED
|
@@ -443,7 +443,7 @@ Traces, metrics, and logs are flushed before the handler returns (including fail
|
|
|
443
443
|
|
|
444
444
|
## Pre-forking servers and threads
|
|
445
445
|
|
|
446
|
-
|
|
446
|
+
Call `init` once, in the process that forks: the master of Puma in cluster mode with `preload_app!` (the default since Puma 7), the master of Unicorn with `preload_app true`, or a worker that forks a child per job. Each child exports its own traces, logs, and metrics, carrying its own `process.pid`.
|
|
447
447
|
|
|
448
448
|
The current span and baggage are stored per fiber. A `Thread.new` or `Fiber.new` starts with none, so spans started inside it begin a new trace. To continue the trace, capture the context first and make it current inside the thread:
|
|
449
449
|
|
|
@@ -12,12 +12,16 @@ module Foam
|
|
|
12
12
|
# A copy has the before_send hook's edits, Foam's identity merged over its resource, and every
|
|
13
13
|
# sensitive value masked.
|
|
14
14
|
module ExportCopies
|
|
15
|
-
# Explicit path and
|
|
15
|
+
# Explicit path, headers, and compression so the SDK does not derive them from OTEL_* env.
|
|
16
16
|
def initialize(token:, redactor:, before_send: BeforeSend::NONE, stamp: {})
|
|
17
17
|
@redactor = redactor
|
|
18
18
|
@before_send = before_send
|
|
19
19
|
@stamp = OpenTelemetry::SDK::Resources::Resource.create(stamp)
|
|
20
|
-
super(
|
|
20
|
+
super(
|
|
21
|
+
endpoint: Endpoint.url(self.class::PATH),
|
|
22
|
+
headers: Constants.bearer_headers(token),
|
|
23
|
+
compression: "gzip"
|
|
24
|
+
)
|
|
21
25
|
end
|
|
22
26
|
|
|
23
27
|
# The encoder groups items by resource object, so items sharing one must share its
|
|
@@ -50,12 +54,6 @@ module Foam
|
|
|
50
54
|
def redacted_attributes(attributes)
|
|
51
55
|
attributes && @redactor.redact_attributes(attributes)
|
|
52
56
|
end
|
|
53
|
-
|
|
54
|
-
# The encoder derives a dropped count as the total minus what is present, so the copy's total
|
|
55
|
-
# must follow its size to keep the SDK's dropped count.
|
|
56
|
-
def total_recorded(original_total, original_list, list)
|
|
57
|
-
original_total - original_list&.size.to_i + list.size
|
|
58
|
-
end
|
|
59
57
|
end
|
|
60
58
|
|
|
61
59
|
class TraceExporter < OpenTelemetry::Exporter::OTLP::Exporter
|
|
@@ -70,8 +68,31 @@ module Foam
|
|
|
70
68
|
}.freeze
|
|
71
69
|
SUCCESS = OpenTelemetry::SDK::Trace::Export::SUCCESS
|
|
72
70
|
|
|
71
|
+
# The upstream span encoder, with a hash the hook added exported as a nested map, as it is in
|
|
72
|
+
# a log attribute. The upstream encoder has no case for a hash and sends an empty value.
|
|
73
|
+
module Encoder
|
|
74
|
+
include OpenTelemetry::Exporter::OTLP::Common
|
|
75
|
+
extend self
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def as_otlp_any_value(value)
|
|
80
|
+
return super unless value.is_a?(Hash)
|
|
81
|
+
|
|
82
|
+
values = value.map { |key, item| as_otlp_key_value(key.to_s, item) }
|
|
83
|
+
Opentelemetry::Proto::Common::V1::AnyValue.new(
|
|
84
|
+
kvlist_value: Opentelemetry::Proto::Common::V1::KeyValueList.new(values: values)
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
73
89
|
private
|
|
74
90
|
|
|
91
|
+
# The inherited method calls the upstream encoder directly.
|
|
92
|
+
def encode(span_data)
|
|
93
|
+
Encoder.as_encoded_etsr(span_data)
|
|
94
|
+
end
|
|
95
|
+
|
|
75
96
|
# The span as the hook left it, with its own, event, and link attributes and its status redacted; nil when
|
|
76
97
|
# the hook dropped it.
|
|
77
98
|
def redacted_copy(span, resource, &on_raise)
|
|
@@ -142,15 +163,10 @@ module Foam
|
|
|
142
163
|
)
|
|
143
164
|
end
|
|
144
165
|
|
|
145
|
-
#
|
|
146
|
-
#
|
|
147
|
-
def
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
values = value.map { |key, item| as_otlp_key_value(key.to_s, item) }
|
|
151
|
-
Opentelemetry::Proto::Common::V1::AnyValue.new(
|
|
152
|
-
kvlist_value: Opentelemetry::Proto::Common::V1::KeyValueList.new(values: values)
|
|
153
|
-
)
|
|
166
|
+
# The encoder derives a dropped count as the total minus what is present, so the copy's total
|
|
167
|
+
# must follow its size to keep the SDK's dropped count.
|
|
168
|
+
def total_recorded(original_total, original_list, list)
|
|
169
|
+
original_total - original_list&.size.to_i + list.size
|
|
154
170
|
end
|
|
155
171
|
end
|
|
156
172
|
|
|
@@ -172,8 +188,6 @@ module Foam
|
|
|
172
188
|
copy.severity_text = event[:severity_text]
|
|
173
189
|
copy.severity_number = event[:severity_number]
|
|
174
190
|
copy.attributes = redacted_attributes(event[:attributes])
|
|
175
|
-
copy.total_recorded_attributes =
|
|
176
|
-
total_recorded(record.total_recorded_attributes, record.attributes, copy.attributes)
|
|
177
191
|
copy.resource = resource
|
|
178
192
|
end
|
|
179
193
|
end
|
data/lib/foam/otel/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: foam-otel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.0.alpha.
|
|
4
|
+
version: 3.0.0.alpha.12
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Foam
|
|
@@ -16,56 +16,56 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 0.37.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 0.37.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: opentelemetry-exporter-otlp-logs
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.
|
|
33
|
+
version: 0.6.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.
|
|
40
|
+
version: 0.6.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: opentelemetry-exporter-otlp-metrics
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.
|
|
47
|
+
version: 0.13.0
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.
|
|
54
|
+
version: 0.13.0
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: opentelemetry-instrumentation-all
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0.
|
|
61
|
+
version: 0.97.0
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0.
|
|
68
|
+
version: 0.97.0
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: opentelemetry-instrumentation-logger
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -86,56 +86,56 @@ dependencies:
|
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 0.
|
|
89
|
+
version: 0.8.0
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 0.
|
|
96
|
+
version: 0.8.0
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: opentelemetry-logs-api
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.
|
|
103
|
+
version: 0.6.0
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0.
|
|
110
|
+
version: 0.6.0
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: opentelemetry-metrics-api
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
115
|
- - "~>"
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: 0.
|
|
117
|
+
version: 0.9.0
|
|
118
118
|
type: :runtime
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
122
|
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: 0.
|
|
124
|
+
version: 0.9.0
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: opentelemetry-metrics-sdk
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
129
|
- - "~>"
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: 0.
|
|
131
|
+
version: 0.20.0
|
|
132
132
|
type: :runtime
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
136
|
- - "~>"
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: 0.
|
|
138
|
+
version: 0.20.0
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: opentelemetry-sdk
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|