helios-opentelemetry-sdk 0.1.17 → 0.1.18

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82426806e8d43f898618e45a8b6285f55911cfac228a3182570172c87507d905
4
- data.tar.gz: 771fa774bc6f35b9594fa7b4079294bbef6a722cc6ec81fe65ff21d99f388638
3
+ metadata.gz: 889fa8ef795bda2e3a01cf6dbf9670126977fdf24a5bb813bba82d6468b74791
4
+ data.tar.gz: ef1827c4e26eabd10fe8842f2bc6bcee6c49e2b5e7d699143fc0884717a3d9ff
5
5
  SHA512:
6
- metadata.gz: 58cf30a126082e5bc20893172165647a9cdbec2bea5dc2bd847293f1d8eb120d73620a8e676e5d6c38d7486511daf05652e7c46c18787b70cec4b354c54ef88a
7
- data.tar.gz: 40fa5d278137ade4190316222108855bf7fea06fd24cc77c61a3ff063206d2246c22aacac99701a30a423a33e2e5e8a71b9b14bb53f970090b16e0ffe7295e0b
6
+ metadata.gz: 4f981326aec00f05820ff100717cbe93637e10503a26bc85798a0359dd0cba1b41745c28759730ca7b94cac8fbd40f1ef3f1158e1a49f3570b0c7ebd8def4564
7
+ data.tar.gz: beb783d8219358140e293f124e59a69d0f5bf0498d32095989aae3c4985232df976ef2151a90117b8a787e911a575e069dd45b97553f64bdbac52a22c09fe41d
@@ -21,6 +21,16 @@ jobs:
21
21
  fail-fast: false
22
22
  matrix:
23
23
  ruby-version: ['2.6', '2.7', '3.1']
24
+ services:
25
+ mongodb:
26
+ image: mongo@sha256:845fd775d7a58f564fae7c17a4eec7ff038e1c4004ebe05cc1cb5fc3767cf6cc
27
+ ports:
28
+ - 27017:27017
29
+ options: >-
30
+ --health-cmd="echo 'db.runCommand(\"ping\").ok' | mongo localhost:27017/test --quiet"
31
+ --health-interval=10s
32
+ --health-timeout=5s
33
+ --health-retries=3
24
34
  steps:
25
35
  - uses: actions/checkout@v2
26
36
  - uses: actions/setup-ruby@v1
data/Gemfile CHANGED
@@ -10,3 +10,4 @@ gem 'rubocop', '~> 1.30.1', group: [:development, :test]
10
10
  gem 'bundler', '~> 2.3.16', group: [:development, :test]
11
11
  gem 'faraday', '~> 2.3.0', group: [:development, :test]
12
12
  gem 'rack', '~> 2.2.4', group: [:development, :test]
13
+ gem 'mongo', '~> 2.5', group: [:development, :test]
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- helios-opentelemetry-sdk (0.1.17)
4
+ helios-opentelemetry-sdk (0.1.18)
5
5
  opentelemetry-exporter-otlp (~> 0.22.0)
6
6
  opentelemetry-instrumentation-all (~> 0.25.0)
7
7
  opentelemetry-instrumentation-rspec (~> 0.2.0)
@@ -11,6 +11,7 @@ GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
13
  ast (2.4.2)
14
+ bson (4.15.0)
14
15
  diff-lcs (1.5.0)
15
16
  faraday (2.3.0)
16
17
  faraday-net_http (~> 2.0)
@@ -19,6 +20,8 @@ GEM
19
20
  google-protobuf (3.21.1)
20
21
  googleapis-common-protos-types (1.3.1)
21
22
  google-protobuf (~> 3.14)
23
+ mongo (2.18.1)
24
+ bson (>= 4.14.1, < 5.0.0)
22
25
  opentelemetry-api (1.0.2)
23
26
  opentelemetry-common (0.19.6)
24
27
  opentelemetry-api (~> 1.0)
@@ -245,6 +248,7 @@ DEPENDENCIES
245
248
  bundler (~> 2.3.16)
246
249
  faraday (~> 2.3.0)
247
250
  helios-opentelemetry-sdk!
251
+ mongo (~> 2.5)
248
252
  opentelemetry-exporter-otlp (~> 0.22.0)
249
253
  opentelemetry-instrumentation-all (~> 0.25.0)
250
254
  opentelemetry-instrumentation-rspec (~> 0.2.0)
@@ -55,6 +55,8 @@ end
55
55
  def patch_net_http
56
56
  require_relative 'patches/net_http_patch'
57
57
  ::Net::HTTP.prepend(NetHttpPatch::Instrumentation)
58
+ rescue StandardError => e
59
+ ::OpenTelemetry.logger.debug("Error patching net http: #{e}")
58
60
  end
59
61
 
60
62
  def patch_faraday
@@ -65,6 +67,8 @@ def patch_faraday
65
67
  ::OpenTelemetry::Instrumentation::Faraday::Middlewares::TracerMiddleware.prepend(
66
68
  FaradayPatch::HeliosFaradayMiddleware
67
69
  )
70
+ rescue StandardError => e
71
+ ::OpenTelemetry.logger.debug("Error patching faraday: #{e}")
68
72
  end
69
73
 
70
74
  def patch_rack
@@ -75,10 +79,28 @@ def patch_rack
75
79
  ::OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware.prepend(
76
80
  RackPatch::HeliosRackMiddleware
77
81
  )
82
+ rescue StandardError => e
83
+ ::OpenTelemetry.logger.debug("Error patching rack: #{e}")
84
+ end
85
+
86
+ def patch_mongo
87
+ return unless defined?(::Mongo::Monitoring::Global)
88
+
89
+ require 'opentelemetry/instrumentation/mongo/subscriber'
90
+ min_version = ::OpenTelemetry::Instrumentation::Mongo::Instrumentation::MINIMUM_VERSION
91
+ mongo_version = Gem::Version.new(::Mongo::VERSION)
92
+ return unless mongo_version >= min_version
93
+
94
+ require_relative 'patches/mongo_patch'
95
+ ::OpenTelemetry::Instrumentation::Mongo::Subscriber.prepend(MongoPatch::Subscriber)
96
+ ::OpenTelemetry::Instrumentation::Mongo::CommandSerializer.prepend(MongoPatch::CommandSerializer)
97
+ rescue StandardError => e
98
+ ::OpenTelemetry.logger.debug("Error patching mongo: #{e}")
78
99
  end
79
100
 
80
101
  def additional_patches
81
102
  patch_net_http
82
103
  patch_faraday
83
104
  patch_rack
105
+ patch_mongo
84
106
  end
@@ -17,8 +17,8 @@ module FaradayPatch
17
17
  response_headers = env.response_headers
18
18
  span.set_attribute(semantic_attributes::HTTP_RESPONSE_HEADERS, response_headers.to_json)
19
19
  span.set_attribute(semantic_attributes::HTTP_RESPONSE_BODY, env.response_body) unless env.response_body.nil?
20
- rescue StandardError
21
- # Do nothing
20
+ rescue StandardError => e
21
+ ::OpenTelemetry.logger.debug("Error extracting faraday attributes: #{e}")
22
22
  end
23
23
  end
24
24
  end
@@ -0,0 +1,36 @@
1
+ require 'json'
2
+ require_relative '../../semantic_attributes'
3
+
4
+ module MongoPatch
5
+ module Subscriber
6
+ def succeeded(event)
7
+ extract_query_result(event)
8
+ super(event)
9
+ end
10
+
11
+ def extract_query_result(event)
12
+ span = get_span(event)
13
+ return unless span
14
+
15
+ span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::DB_QUERY_RESULT, event.reply.to_json)
16
+ rescue StandardError => e
17
+ ::OpenTelemetry.logger.debug("Error extracting mongo query result: #{e}")
18
+ end
19
+ end
20
+
21
+ module CommandSerializer
22
+ # Temp patch until the upstream fix is released
23
+ def mask(hash)
24
+ hash.each_with_object({}) do |(k, v), h|
25
+ value = if v.is_a?(Hash)
26
+ mask(v)
27
+ elsif @obfuscate
28
+ MASK_VALUE
29
+ else
30
+ v
31
+ end
32
+ h[k] = value
33
+ end
34
+ end
35
+ end
36
+ end
@@ -36,15 +36,15 @@ module NetHttpPatch
36
36
  span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_REQUEST_BODY,
37
37
  body.is_a?(String) ? body : body.to_s)
38
38
  end
39
- rescue StandardError
40
- # Do nothing
39
+ rescue StandardError => e
40
+ ::OpenTelemetry.logger.debug("Error extracting net http request attributes: #{e}")
41
41
  end
42
42
 
43
43
  def extract_response_attributes(span, response)
44
44
  span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_RESPONSE_HEADERS, collect_headers(response))
45
45
  span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_RESPONSE_BODY, response.body)
46
- rescue StandardError
47
- # Do nothing
46
+ rescue StandardError => e
47
+ ::OpenTelemetry.logger.debug("Error extracting net http response attributes: #{e}")
48
48
  end
49
49
  end
50
50
  end
@@ -23,8 +23,8 @@ module RackPatch
23
23
  request_body = env['rack.input']&.read
24
24
  env['rack.input']&.rewind
25
25
  res[semantic_attributes::HTTP_REQUEST_BODY] = request_body if request_body&.length&.positive?
26
- rescue StandardError
27
- # Do nothing
26
+ rescue StandardError => e
27
+ ::OpenTelemetry.logger.debug("Error extracting rack request attributes: #{e}")
28
28
  end
29
29
 
30
30
  def extract_response_attributes(span, headers, response)
@@ -33,8 +33,8 @@ module RackPatch
33
33
  if response.respond_to?(:first) && response.first&.length&.positive?
34
34
  span.set_attribute(semantic_attributes::HTTP_RESPONSE_BODY, response.first)
35
35
  end
36
- rescue StandardError
37
- # Do nothing
36
+ rescue StandardError => e
37
+ ::OpenTelemetry.logger.debug("Error extracting rack response attributes: #{e}")
38
38
  end
39
39
  end
40
40
  end
@@ -1,7 +1,7 @@
1
1
  module Helios
2
2
  module OpenTelemetry
3
3
  module SDK
4
- VERSION = '0.1.17'
4
+ VERSION = '0.1.18'
5
5
  end
6
6
  end
7
7
  end
@@ -5,6 +5,7 @@ module Helios
5
5
  HTTP_REQUEST_HEADERS = 'http.request.headers'
6
6
  HTTP_RESPONSE_BODY = 'http.response.body'
7
7
  HTTP_RESPONSE_HEADERS = 'http.response.headers'
8
+ DB_QUERY_RESULT = 'db.query_result'
8
9
  end
9
10
  end
10
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: helios-opentelemetry-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.17
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Team Helios
@@ -131,6 +131,7 @@ files:
131
131
  - lib/helios/opentelemetry/sdk.rb
132
132
  - lib/helios/opentelemetry/sdk/instrumentations.rb
133
133
  - lib/helios/opentelemetry/sdk/patches/faraday_patch.rb
134
+ - lib/helios/opentelemetry/sdk/patches/mongo_patch.rb
134
135
  - lib/helios/opentelemetry/sdk/patches/net_http_patch.rb
135
136
  - lib/helios/opentelemetry/sdk/patches/rack_patch.rb
136
137
  - lib/helios/opentelemetry/sdk/version.rb