helios-opentelemetry-sdk 0.1.15 → 0.1.18

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: 11a4d057dafe06241ebe7042f68f2675fa052e653cb325df1ed7df27e609d603
4
- data.tar.gz: 8b4b103be5da44eb1944a2211c58af5a85397c2acc1f3c20c554663979bde68b
3
+ metadata.gz: 889fa8ef795bda2e3a01cf6dbf9670126977fdf24a5bb813bba82d6468b74791
4
+ data.tar.gz: ef1827c4e26eabd10fe8842f2bc6bcee6c49e2b5e7d699143fc0884717a3d9ff
5
5
  SHA512:
6
- metadata.gz: 39f09188ae59c71fe5779d7af3d84221cf3fa439372fbc71128e2668a4cb21e3b285846004965601d21d9b273edef9a7c4c7106e70eaed6091decabf617b868f
7
- data.tar.gz: 4001559c175453f4a13742233b698aa96fa03948f29f5aa0b1530e28e85e6c4056cb808f5c6199bfef7232a09d0e0f22006589aa1688908bfd7ae960b1463bb8
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/.rubocop.yml CHANGED
@@ -24,3 +24,6 @@ Metrics/BlockLength:
24
24
 
25
25
  Metrics/CyclomaticComplexity:
26
26
  Enabled: false
27
+
28
+ Metrics/PerceivedComplexity:
29
+ Enabled: false
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.15)
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,6 +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 => e
21
+ ::OpenTelemetry.logger.debug("Error extracting faraday attributes: #{e}")
20
22
  end
21
23
  end
22
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
@@ -6,7 +6,8 @@ module NetHttpPatch
6
6
  module Instrumentation
7
7
  def request(req, body = nil, &block)
8
8
  current_span = OpenTelemetry::Trace.current_span
9
- current_span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_REQUEST_HEADERS, collect_headers(req))
9
+ current_span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_REQUEST_HEADERS,
10
+ collect_headers(req))
10
11
  unless body.nil?
11
12
  current_span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_REQUEST_BODY,
12
13
  body.is_a?(String) ? body : body.to_s)
@@ -27,5 +28,23 @@ module NetHttpPatch
27
28
 
28
29
  headers.to_json
29
30
  end
31
+
32
+ def extract_request_attributes(span, req, body)
33
+ ::OpenTelemetry.logger.warn('aaaaaaa')
34
+ span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_REQUEST_HEADERS, collect_headers(req))
35
+ unless body.nil?
36
+ span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_REQUEST_BODY,
37
+ body.is_a?(String) ? body : body.to_s)
38
+ end
39
+ rescue StandardError => e
40
+ ::OpenTelemetry.logger.debug("Error extracting net http request attributes: #{e}")
41
+ end
42
+
43
+ def extract_response_attributes(span, response)
44
+ span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_RESPONSE_HEADERS, collect_headers(response))
45
+ span.set_attribute(Helios::OpenTelemetry::SemanticAttributes::HTTP_RESPONSE_BODY, response.body)
46
+ rescue StandardError => e
47
+ ::OpenTelemetry.logger.debug("Error extracting net http response attributes: #{e}")
48
+ end
30
49
  end
31
50
  end
@@ -6,6 +6,16 @@ module RackPatch
6
6
  module HeliosRackMiddleware
7
7
  def request_span_attributes(env:)
8
8
  res = super(env: env)
9
+ extract_request_attributes(env, res)
10
+ res
11
+ end
12
+
13
+ def set_attributes_after_request(span, status, headers, response)
14
+ extract_response_attributes(span, headers, response)
15
+ super(span, status, headers, response)
16
+ end
17
+
18
+ def extract_request_attributes(env, res)
9
19
  # Request headers are attributes in the env hash that start with HTTP_
10
20
  request_headers = env.select { |k, _v| k.start_with? 'HTTP_' }.transform_keys { |k| k.sub(/^HTTP_/, '').downcase }
11
21
  semantic_attributes = Helios::OpenTelemetry::SemanticAttributes
@@ -13,14 +23,18 @@ module RackPatch
13
23
  request_body = env['rack.input']&.read
14
24
  env['rack.input']&.rewind
15
25
  res[semantic_attributes::HTTP_REQUEST_BODY] = request_body if request_body&.length&.positive?
16
- res
26
+ rescue StandardError => e
27
+ ::OpenTelemetry.logger.debug("Error extracting rack request attributes: #{e}")
17
28
  end
18
29
 
19
- def set_attributes_after_request(span, status, headers, response)
30
+ def extract_response_attributes(span, headers, response)
20
31
  semantic_attributes = Helios::OpenTelemetry::SemanticAttributes
21
32
  span.set_attribute(semantic_attributes::HTTP_RESPONSE_HEADERS, headers.to_json)
22
- span.set_attribute(semantic_attributes::HTTP_RESPONSE_BODY, response[0]) if response&.first&.length&.positive?
23
- super(span, status, headers, response)
33
+ if response.respond_to?(:first) && response.first&.length&.positive?
34
+ span.set_attribute(semantic_attributes::HTTP_RESPONSE_BODY, response.first)
35
+ end
36
+ rescue StandardError => e
37
+ ::OpenTelemetry.logger.debug("Error extracting rack response attributes: #{e}")
24
38
  end
25
39
  end
26
40
  end
@@ -1,7 +1,7 @@
1
1
  module Helios
2
2
  module OpenTelemetry
3
3
  module SDK
4
- VERSION = '0.1.15'
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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: helios-opentelemetry-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Team Helios
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-29 00:00:00.000000000 Z
11
+ date: 2022-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -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