opentelemetry-instrumentation-trilogy 0.51.1 → 0.53.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 +12 -0
- data/README.md +11 -0
- data/lib/opentelemetry/instrumentation/trilogy/instrumentation.rb +1 -0
- data/lib/opentelemetry/instrumentation/trilogy/patches/client.rb +27 -15
- data/lib/opentelemetry/instrumentation/trilogy/version.rb +1 -1
- data/lib/opentelemetry/instrumentation/trilogy.rb +39 -0
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1714d43b908e2ef4f6af27fd1d92376e509ceed407df30ca7380028bba61b45
|
4
|
+
data.tar.gz: 1ee3f0f262b413e6b6a149cd2f99f01e2fdfd5c2f39b7a4897779b3366b1b3f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4730f45bf6c73dbd32f370229ab46d452a12f2ac8459e79bf15b83f8d99aeee4bae9243723e60522f2821c68f5a1d76363ba736923abd42832706534417d32f7
|
7
|
+
data.tar.gz: d0d8f471da5f50d9f4139c6fe31973d255a2f399add2d55e84ebe514ad3f688144491e3b58711e1a3c880142511c92c5648d83bd7ab95028b0c1accb2c767704
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Release History: opentelemetry-instrumentation-trilogy
|
2
2
|
|
3
|
+
### v0.53.0 / 2023-04-17
|
4
|
+
|
5
|
+
* BREAKING CHANGE: Drop support for EoL Ruby 2.7
|
6
|
+
|
7
|
+
* ADDED: Drop support for EoL Ruby 2.7
|
8
|
+
|
9
|
+
### v0.52.0 / 2023-03-06
|
10
|
+
|
11
|
+
* ADDED: Add with_attributes context propagation to Trilogy instrumentation
|
12
|
+
* ADDED: Add option to configure span name for trilogy
|
13
|
+
* FIXED: Ensure encoding errors handled during SQL obfuscation for Trilogy
|
14
|
+
|
3
15
|
### v0.51.1 / 2023-01-14
|
4
16
|
|
5
17
|
* DOCS: Fix gem homepage
|
data/README.md
CHANGED
@@ -40,6 +40,17 @@ OpenTelemetry::SDK.configure do |c|
|
|
40
40
|
end
|
41
41
|
```
|
42
42
|
|
43
|
+
The `trilogy` instrumentation allows the user to supply additional attributes via the `with_attributes` method. This makes it possible to supply additional attributes on trilogy spans. Attributes supplied in `with_attributes` supersede those automatically generated within `trilogy`'s automatic instrumentation. If you supply a `db.statement` attribute in `with_attributes`, this library's `:db_statement` configuration will not be applied.
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
require 'opentelemetry-instrumentation-trilogy'
|
47
|
+
|
48
|
+
client = Trilogy.new(:host => 'localhost', :username => 'root')
|
49
|
+
OpenTelemetry::Instrumentation::Trilogy.with_attributes('pizzatoppings' => 'mushrooms') do
|
50
|
+
client.query('SELECT 1')
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
43
54
|
## How can I get involved?
|
44
55
|
|
45
56
|
The `opentelemetry-instrumentation-trilogy` gem source is [on github][repo-github], along with related gems including `opentelemetry-api` and `opentelemetry-sdk`.
|
@@ -24,6 +24,7 @@ module OpenTelemetry
|
|
24
24
|
|
25
25
|
option :peer_service, default: nil, validate: :string
|
26
26
|
option :db_statement, default: :obfuscate, validate: %I[omit include obfuscate]
|
27
|
+
option :span_name, default: :statement_type, validate: %I[statement_type db_name db_operation_and_name]
|
27
28
|
|
28
29
|
private
|
29
30
|
|
@@ -56,7 +56,7 @@ module OpenTelemetry
|
|
56
56
|
def query(sql)
|
57
57
|
tracer.in_span(
|
58
58
|
database_span_name(sql),
|
59
|
-
attributes: client_attributes(sql),
|
59
|
+
attributes: client_attributes(sql).merge!(OpenTelemetry::Instrumentation::Trilogy.attributes),
|
60
60
|
kind: :client
|
61
61
|
) do
|
62
62
|
super(sql)
|
@@ -87,10 +87,14 @@ module OpenTelemetry
|
|
87
87
|
if sql.size > 2000
|
88
88
|
'SQL query too large to remove sensitive data ...'
|
89
89
|
else
|
90
|
-
obfuscated =
|
90
|
+
obfuscated = OpenTelemetry::Common::Utilities.utf8_encode(sql, binary: true)
|
91
|
+
obfuscated = obfuscated.gsub(FULL_SQL_REGEXP, '?')
|
91
92
|
obfuscated = 'Failed to obfuscate SQL query - quote characters remained after obfuscation' if detect_unmatched_pairs(obfuscated)
|
92
93
|
obfuscated
|
93
94
|
end
|
95
|
+
rescue StandardError => e
|
96
|
+
OpenTelemetry.handle_error(message: 'Failed to obfuscate SQL', exception: e)
|
97
|
+
'OpenTelemetry error: failed to obfuscate sql'
|
94
98
|
end
|
95
99
|
|
96
100
|
def detect_unmatched_pairs(obfuscated)
|
@@ -102,20 +106,27 @@ module OpenTelemetry
|
|
102
106
|
%r{'|"|\/\*|\*\/}.match(obfuscated)
|
103
107
|
end
|
104
108
|
|
105
|
-
def database_span_name(sql)
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
109
|
+
def database_span_name(sql) # rubocop:disable Metrics/CyclomaticComplexity
|
110
|
+
case config[:span_name]
|
111
|
+
when :statement_type
|
112
|
+
extract_statement_type(sql)
|
113
|
+
when :db_name
|
114
|
+
database_name
|
115
|
+
when :db_operation_and_name
|
116
|
+
op = OpenTelemetry::Instrumentation::Trilogy.attributes['db.operation']
|
117
|
+
name = database_name
|
118
|
+
if op && name
|
119
|
+
"#{op} #{name}"
|
120
|
+
elsif op
|
121
|
+
op
|
122
|
+
elsif name
|
123
|
+
name
|
124
|
+
end
|
125
|
+
end || 'mysql'
|
126
|
+
end
|
116
127
|
|
117
|
-
|
118
|
-
|
128
|
+
def database_name
|
129
|
+
connection_options[:database]
|
119
130
|
end
|
120
131
|
|
121
132
|
def net_peer_name
|
@@ -140,6 +151,7 @@ module OpenTelemetry
|
|
140
151
|
QUERY_NAME_RE.match(sql) { |match| match[1].downcase } unless sql.nil?
|
141
152
|
rescue StandardError => e
|
142
153
|
OpenTelemetry.logger.error("Error extracting sql statement type: #{e.message}")
|
154
|
+
nil
|
143
155
|
end
|
144
156
|
end
|
145
157
|
end
|
@@ -11,6 +11,45 @@ module OpenTelemetry
|
|
11
11
|
module Instrumentation
|
12
12
|
# Contains the OpenTelemetry instrumentation for the Trilogy gem
|
13
13
|
module Trilogy
|
14
|
+
extend self
|
15
|
+
|
16
|
+
CURRENT_ATTRIBUTES_KEY = Context.create_key('trilogy-attributes-hash')
|
17
|
+
|
18
|
+
private_constant :CURRENT_ATTRIBUTES_KEY
|
19
|
+
|
20
|
+
# Returns the attributes hash representing the Trilogy context found
|
21
|
+
# in the optional context or the current context if none is provided.
|
22
|
+
#
|
23
|
+
# @param [optional Context] context The context to lookup the current
|
24
|
+
# attributes hash. Defaults to Context.current
|
25
|
+
def attributes(context = nil)
|
26
|
+
context ||= Context.current
|
27
|
+
context.value(CURRENT_ATTRIBUTES_KEY) || {}
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns a context containing the merged attributes hash, derived from the
|
31
|
+
# optional parent context, or the current context if one was not provided.
|
32
|
+
#
|
33
|
+
# @param [optional Context] context The context to use as the parent for
|
34
|
+
# the returned context
|
35
|
+
def context_with_attributes(attributes_hash, parent_context: Context.current)
|
36
|
+
attributes_hash = attributes(parent_context).merge(attributes_hash)
|
37
|
+
parent_context.set_value(CURRENT_ATTRIBUTES_KEY, attributes_hash)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Activates/deactivates the merged attributes hash within the current Context,
|
41
|
+
# which makes the "current attributes hash" available implicitly.
|
42
|
+
#
|
43
|
+
# On exit, the attributes hash that was active before calling this method
|
44
|
+
# will be reactivated.
|
45
|
+
#
|
46
|
+
# @param [Span] span the span to activate
|
47
|
+
# @yield [Hash, Context] yields attributes hash and a context containing the
|
48
|
+
# attributes hash to the block.
|
49
|
+
def with_attributes(attributes_hash)
|
50
|
+
attributes_hash = attributes.merge(attributes_hash)
|
51
|
+
Context.with_value(CURRENT_ATTRIBUTES_KEY, attributes_hash) { |c, h| yield h, c }
|
52
|
+
end
|
14
53
|
end
|
15
54
|
end
|
16
55
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentelemetry-instrumentation-trilogy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.53.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: 2023-
|
11
|
+
date: 2023-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opentelemetry-api
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.22.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.22.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: opentelemetry-semantic_conventions
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,16 +112,16 @@ dependencies:
|
|
112
112
|
name: opentelemetry-test-helpers
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
117
|
+
version: '0.3'
|
118
118
|
type: :development
|
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.3'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: pry
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,14 +184,14 @@ dependencies:
|
|
184
184
|
requirements:
|
185
185
|
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: 1.
|
187
|
+
version: 1.48.1
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: 1.
|
194
|
+
version: 1.48.1
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: simplecov
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -275,10 +275,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby-contrib
|
|
275
275
|
licenses:
|
276
276
|
- Apache-2.0
|
277
277
|
metadata:
|
278
|
-
changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-trilogy/0.
|
278
|
+
changelog_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-trilogy/0.53.0/file/CHANGELOG.md
|
279
279
|
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/trilogy
|
280
280
|
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
|
281
|
-
documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-trilogy/0.
|
281
|
+
documentation_uri: https://rubydoc.info/gems/opentelemetry-instrumentation-trilogy/0.53.0
|
282
282
|
post_install_message:
|
283
283
|
rdoc_options: []
|
284
284
|
require_paths:
|
@@ -287,14 +287,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
287
287
|
requirements:
|
288
288
|
- - ">="
|
289
289
|
- !ruby/object:Gem::Version
|
290
|
-
version:
|
290
|
+
version: '3.0'
|
291
291
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
292
292
|
requirements:
|
293
293
|
- - ">="
|
294
294
|
- !ruby/object:Gem::Version
|
295
295
|
version: '0'
|
296
296
|
requirements: []
|
297
|
-
rubygems_version: 3.
|
297
|
+
rubygems_version: 3.2.33
|
298
298
|
signing_key:
|
299
299
|
specification_version: 4
|
300
300
|
summary: Trilogy instrumentation for the OpenTelemetry framework
|