opentelemetry-instrumentation-redis 0.22.0 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a33c472d6172a70e079b09ca58e340541e41cd03bd0b094dbc97d752bb5931f
4
- data.tar.gz: 57120d158754a6b4285922be18a550bf56559d71c10c9497abb1347a205b5a9f
3
+ metadata.gz: a27919563509bb9c0d19f5bc59e1d8ead18713a166791473b8bbd6ff5f3ca78a
4
+ data.tar.gz: 2649f5632d81c557b9a0cd8ad6431650c11d9b91ff705cb1eb3419407384e422
5
5
  SHA512:
6
- metadata.gz: 4fdbfd22cb02c38ae3896847e220a888da7297290348bd45389813eb282239ce4a9539993495c8cd4de77491f9858f4eaf5f6da8af9944dd812de72b2926c2ad
7
- data.tar.gz: 4a1da8c573db60a787c23de5fc1c755fc24a275e557dc73a0c31a67f104e457f901411fa7e7d9521f23b6c5c4fbca8960a15d09cb84f7aaa02244d950094bb75
6
+ metadata.gz: 4a7aa1b2145bd567b87fa1cc6d51ac12d2accc52d05e58dc17a8cfe9f6225cd28c80ba4d1e8facc3f2991fe78f0b6835f26d152437e0d02db86e3e96f39750b7
7
+ data.tar.gz: 96c048eaa579ca59c1010950a36119e80695401218721ca95179d2dca7ba399a9c1bec16e68b4e22a152f433c12d053082fd601ff57c48702b0d4941fb7089b9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Release History: opentelemetry-instrumentation-redis
2
2
 
3
+ ### v0.24.0 / 2022-09-14
4
+
5
+ * ADDED: Redis-rb 5.0 and redis-client support
6
+
7
+ ### v0.23.0 / 2022-06-09
8
+
9
+ * Upgrading Base dependency version
10
+ * FIXED: Broken test file requirements
11
+
12
+ ### v0.22.1 / 2022-06-09
13
+
14
+ * Upgrading Base dependency version
15
+ * FIXED: Broken test file requirements
16
+
3
17
  ### v0.22.0 / 2022-05-02
4
18
 
5
19
  * ADDED: Validate Using Enums
data/README.md CHANGED
@@ -57,7 +57,7 @@ end
57
57
 
58
58
  ## Example
59
59
 
60
- An example of usage can be seen in [`example/redis.rb`](https://github.com/open-telemetry/opentelemetry-ruby/blob/main/instrumentation/redis/example/redis.rb).
60
+ An example of usage can be seen in [`example/redis.rb`](https://github.com/open-telemetry/opentelemetry-ruby-contrib/blob/main/instrumentation/redis/example/redis.rb).
61
61
 
62
62
  ## Development
63
63
 
@@ -77,7 +77,7 @@ Apache 2.0 license. See [LICENSE][license-github] for more information.
77
77
  [redis-home]: https://redis.io
78
78
  [bundler-home]: https://bundler.io
79
79
  [repo-github]: https://github.com/open-telemetry/opentelemetry-ruby
80
- [license-github]: https://github.com/open-telemetry/opentelemetry-ruby/blob/main/LICENSE
80
+ [license-github]: https://github.com/open-telemetry/opentelemetry-ruby-contrib/blob/main/LICENSE
81
81
  [ruby-sig]: https://github.com/open-telemetry/community#ruby-sig
82
82
  [community-meetings]: https://github.com/open-telemetry/community#community-meetings
83
83
  [discussions-url]: https://github.com/open-telemetry/opentelemetry-ruby/discussions
@@ -16,7 +16,7 @@ module OpenTelemetry
16
16
  end
17
17
 
18
18
  present do
19
- defined?(::Redis)
19
+ defined?(::Redis) || defined?(::RedisClient)
20
20
  end
21
21
 
22
22
  option :peer_service, default: nil, validate: :string
@@ -26,11 +26,13 @@ module OpenTelemetry
26
26
  private
27
27
 
28
28
  def require_dependencies
29
- require_relative 'patches/client'
29
+ require_relative 'patches/redis_v4_client' if defined?(::Redis) && ::Redis::VERSION < '5'
30
+ require_relative 'middlewares/redis_client' if defined?(::RedisClient)
30
31
  end
31
32
 
32
33
  def patch_client
33
- ::Redis::Client.prepend(Patches::Client)
34
+ ::RedisClient.register(Middlewares::RedisClientInstrumentation) if defined?(::RedisClient)
35
+ ::Redis::Client.prepend(Patches::RedisV4Client) if defined?(::Redis) && ::Redis::VERSION < '5'
34
36
  end
35
37
  end
36
38
  end
@@ -0,0 +1,80 @@
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 Instrumentation
9
+ module Redis
10
+ module Middlewares
11
+ # Adapter for redis-client instrumentation interface
12
+ module RedisClientInstrumentation
13
+ MAX_STATEMENT_LENGTH = 500
14
+ private_constant :MAX_STATEMENT_LENGTH
15
+
16
+ def call(command, redis_config)
17
+ return super unless instrumentation.config[:trace_root_spans] || OpenTelemetry::Trace.current_span.context.valid?
18
+
19
+ attributes = span_attributes(redis_config)
20
+
21
+ attributes['db.statement'] = serialize_commands([command]) unless instrumentation.config[:db_statement] == :omit
22
+
23
+ span_name = command[0].to_s.upcase
24
+ instrumentation.tracer.in_span(span_name, attributes: attributes, kind: :client) do
25
+ super
26
+ end
27
+ end
28
+
29
+ def call_pipelined(commands, redis_config)
30
+ return super unless instrumentation.config[:trace_root_spans] || OpenTelemetry::Trace.current_span.context.valid?
31
+
32
+ attributes = span_attributes(redis_config)
33
+
34
+ attributes['db.statement'] = serialize_commands(commands) unless instrumentation.config[:db_statement] == :omit
35
+
36
+ instrumentation.tracer.in_span('PIPELINED', attributes: attributes, kind: :client) do
37
+ super
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def span_attributes(redis_config)
44
+ attributes = {
45
+ 'db.system' => 'redis',
46
+ 'net.peer.name' => redis_config.host,
47
+ 'net.peer.port' => redis_config.port
48
+ }
49
+
50
+ attributes['db.redis.database_index'] = redis_config.db unless redis_config.db.zero?
51
+ attributes['peer.service'] = instrumentation.config[:peer_service] if instrumentation.config[:peer_service]
52
+ attributes.merge!(OpenTelemetry::Instrumentation::Redis.attributes)
53
+ attributes
54
+ end
55
+
56
+ def serialize_commands(commands)
57
+ obfuscate = instrumentation.config[:db_statement] == :obfuscate
58
+
59
+ serialized_commands = commands.map do |command|
60
+ # If we receive an authentication request command we want to obfuscate it
61
+ if obfuscate || command[0].match?(/\A(AUTH|HELLO)\z/)
62
+ command[0].to_s.upcase + ' ?' * (command.size - 1)
63
+ else
64
+ command_copy = command.dup
65
+ command_copy[0] = command_copy[0].to_s.upcase
66
+ command_copy.join(' ')
67
+ end
68
+ end.join("\n")
69
+ serialized_commands = OpenTelemetry::Common::Utilities.truncate(serialized_commands, MAX_STATEMENT_LENGTH)
70
+ OpenTelemetry::Common::Utilities.utf8_encode(serialized_commands, binary: true)
71
+ end
72
+
73
+ def instrumentation
74
+ Redis::Instrumentation.instance
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -9,12 +9,12 @@ module OpenTelemetry
9
9
  module Redis
10
10
  module Patches
11
11
  # Module to prepend to Redis::Client for instrumentation
12
- module Client
12
+ module RedisV4Client
13
13
  MAX_STATEMENT_LENGTH = 500
14
14
  private_constant :MAX_STATEMENT_LENGTH
15
15
 
16
- def process(commands) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
17
- return super unless config[:trace_root_spans] || OpenTelemetry::Trace.current_span.context.valid?
16
+ def process(commands) # rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
17
+ return super unless instrumentation_config[:trace_root_spans] || OpenTelemetry::Trace.current_span.context.valid?
18
18
 
19
19
  host = options[:host]
20
20
  port = options[:port]
@@ -26,10 +26,10 @@ module OpenTelemetry
26
26
  }
27
27
 
28
28
  attributes['db.redis.database_index'] = options[:db] unless options[:db].zero?
29
- attributes['peer.service'] = config[:peer_service] if config[:peer_service]
29
+ attributes['peer.service'] = instrumentation_config[:peer_service] if instrumentation_config[:peer_service]
30
30
  attributes.merge!(OpenTelemetry::Instrumentation::Redis.attributes)
31
31
 
32
- unless config[:db_statement] == :omit
32
+ unless instrumentation_config[:db_statement] == :omit
33
33
  parsed_commands = parse_commands(commands)
34
34
  parsed_commands = OpenTelemetry::Common::Utilities.truncate(parsed_commands, MAX_STATEMENT_LENGTH)
35
35
  parsed_commands = OpenTelemetry::Common::Utilities.utf8_encode(parsed_commands, binary: true)
@@ -42,7 +42,7 @@ module OpenTelemetry
42
42
  'PIPELINED'
43
43
  end
44
44
 
45
- tracer.in_span(span_name, attributes: attributes, kind: :client) do |s|
45
+ instrumentation_tracer.in_span(span_name, attributes: attributes, kind: :client) do |s|
46
46
  super(commands).tap do |reply|
47
47
  if reply.is_a?(::Redis::CommandError)
48
48
  s.record_exception(reply)
@@ -59,7 +59,7 @@ module OpenTelemetry
59
59
  # Redis#pipeline: [[:set, "v1", "0"], [:incr, "v1"], [:get, "v1"]]
60
60
  # Redis#hmset [[:hmset, "hash", "f1", 1234567890.0987654]]
61
61
  # Redis#set [[:set, "K", "x"]]
62
- def parse_commands(commands) # rubocop:disable Metrics/AbcSize
62
+ def parse_commands(commands)
63
63
  commands.map do |command|
64
64
  # We are checking for the use of Redis#queue command, if we detect the
65
65
  # extra level of array nesting we return the first element so it
@@ -71,7 +71,7 @@ module OpenTelemetry
71
71
  # and return the obfuscated command
72
72
  return 'AUTH ?' if command[0] == :auth
73
73
 
74
- if config[:db_statement] == :obfuscate
74
+ if instrumentation_config[:db_statement] == :obfuscate
75
75
  command[0].to_s.upcase + ' ?' * (command.size - 1)
76
76
  else
77
77
  command_copy = command.dup
@@ -81,11 +81,11 @@ module OpenTelemetry
81
81
  end.join("\n")
82
82
  end
83
83
 
84
- def tracer
84
+ def instrumentation_tracer
85
85
  Redis::Instrumentation.instance.tracer
86
86
  end
87
87
 
88
- def config
88
+ def instrumentation_config
89
89
  Redis::Instrumentation.instance.config
90
90
  end
91
91
  end
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
9
  module Redis
10
- VERSION = '0.22.0'
10
+ VERSION = '0.24.0'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-instrumentation-redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.0
4
+ version: 0.24.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: 2022-05-02 00:00:00.000000000 Z
11
+ date: 2022-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.20.0
47
+ version: 0.21.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.20.0
54
+ version: 0.21.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: appraisal
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.0'
103
+ version: '1.1'
104
104
  type: :development
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: '1.0'
110
+ version: '1.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: opentelemetry-test-helpers
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: redis
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +136,34 @@ dependencies:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
138
  version: 4.1.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: redis-client
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.7'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.7'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: rubocop
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - "~>"
130
158
  - !ruby/object:Gem::Version
131
- version: 0.73.0
159
+ version: 1.3.0
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - "~>"
137
165
  - !ruby/object:Gem::Version
138
- version: 0.73.0
166
+ version: 1.3.0
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: simplecov
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -193,16 +221,17 @@ files:
193
221
  - lib/opentelemetry/instrumentation.rb
194
222
  - lib/opentelemetry/instrumentation/redis.rb
195
223
  - lib/opentelemetry/instrumentation/redis/instrumentation.rb
196
- - lib/opentelemetry/instrumentation/redis/patches/client.rb
224
+ - lib/opentelemetry/instrumentation/redis/middlewares/redis_client.rb
225
+ - lib/opentelemetry/instrumentation/redis/patches/redis_v4_client.rb
197
226
  - lib/opentelemetry/instrumentation/redis/version.rb
198
- homepage: https://github.com/open-telemetry/opentelemetry-ruby
227
+ homepage: https://github.com/open-telemetry/opentelemetry-contrib
199
228
  licenses:
200
229
  - Apache-2.0
201
230
  metadata:
202
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-redis/v0.22.0/file.CHANGELOG.html
203
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/instrumentation/redis
204
- bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
205
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-redis/v0.22.0
231
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-redis/v0.24.0/file.CHANGELOG.html
232
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/tree/main/instrumentation/redis
233
+ bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby-contrib/issues
234
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby-contrib/opentelemetry-instrumentation-redis/v0.24.0
206
235
  post_install_message:
207
236
  rdoc_options: []
208
237
  require_paths:
@@ -211,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
211
240
  requirements:
212
241
  - - ">="
213
242
  - !ruby/object:Gem::Version
214
- version: 2.5.0
243
+ version: 2.6.0
215
244
  required_rubygems_version: !ruby/object:Gem::Requirement
216
245
  requirements:
217
246
  - - ">="