instana 1.207.0 → 1.208.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01f078ad2a63d8cd71303a9bf7b413209eda0b2f464ce72f88c84ae05bf797da
4
- data.tar.gz: d547946bdbb52ea3c3c3a7fc317f7bcd2dd8ccf37d52507788bff1b85fc4434c
3
+ metadata.gz: 2cec589ba39a110c9378497376585d47d2f968bd27c31cd1ccae259912a0d2b0
4
+ data.tar.gz: f9df2c3f6e1543e6e4bb3efaa44026e295f7ca03ef59add49c291a3218b04e4d
5
5
  SHA512:
6
- metadata.gz: df3a3926477ab6842628f7fe1062655e63760c0fc1e5100912c8191f5894b8b4dabb1e030441b0b924d379bd6be56a9b69e877c22220153acba3393af59e4b51
7
- data.tar.gz: 05fd9a76497614afca946d9538577bdfda21bd3a901759b285d7033425610206fd5a88405f86e86d52928da8f9324798cbf579bb516d845a8749f7c000d98fdf
6
+ metadata.gz: b9907bdca2a8c40e46667e4b557765d83ce2c8846bb3b2e508fd59374890e54f8dc172bbff496d9f90f031a787db240d2cad3b84e4722efb4c33d9f1013f1c37
7
+ data.tar.gz: 889963622d3fc6d24b6e4a3ca402d401b66c4608e9ff4a48e61998d99d4e59fb7a933f97963013a97d8bb1012c6405ab7a8ee32bfc80fcdad0301b3cb5c2cc5a
data/.circleci/config.yml CHANGED
@@ -15,6 +15,7 @@ executors:
15
15
  command: ["server", "/data"]
16
16
  - image: s12v/sns
17
17
  - image: softwaremill/elasticmq-native
18
+ - image: circleci/mongo:5-focal-ram
18
19
  ruby_26:
19
20
  docker:
20
21
  - image: circleci/ruby:2.6-node
@@ -29,6 +30,7 @@ executors:
29
30
  command: ["server", "/data"]
30
31
  - image: s12v/sns
31
32
  - image: softwaremill/elasticmq-native
33
+ - image: circleci/mongo:5-focal-ram
32
34
  ruby_27:
33
35
  docker:
34
36
  - image: circleci/ruby:2.7-node
@@ -43,6 +45,7 @@ executors:
43
45
  command: ["server", "/data"]
44
46
  - image: s12v/sns
45
47
  - image: softwaremill/elasticmq-native
48
+ - image: circleci/mongo:5-focal-ram
46
49
  ruby_25_mysql2:
47
50
  docker:
48
51
  - image: circleci/ruby:2.5-node
@@ -116,6 +119,7 @@ commands:
116
119
  - run:
117
120
  name: Install iproute2
118
121
  command: |
122
+ sudo apt-get update
119
123
  sudo apt-get install iproute2
120
124
  - run:
121
125
  name: Install Java
@@ -141,6 +145,7 @@ commands:
141
145
  - run:
142
146
  name: Install Java
143
147
  command: |
148
+ sudo apt-get update
144
149
  sudo apt-get install openjdk-11-jdk
145
150
  - run:
146
151
  name: Run SonarQube to capture coverage
@@ -278,6 +283,7 @@ workflows:
278
283
  - "./gemfiles/sidekiq_50.gemfile"
279
284
  - "./gemfiles/sinatra_14.gemfile"
280
285
  - "./gemfiles/shoryuken_50.gemfile"
286
+ - "./gemfiles/mongo_216.gemfile"
281
287
  rails:
282
288
  jobs:
283
289
  - test_apprisal:
data/Appraisals CHANGED
@@ -13,7 +13,7 @@ appraise 'cuba-30' do
13
13
  gem 'cuba', '>= 3.0', '< 4.0'
14
14
  end
15
15
 
16
- appraise 'dalli-20' do
16
+ appraise 'dalli-20' do
17
17
  gem 'dalli', '>= 2.0', '< 3.0'
18
18
  end
19
19
 
@@ -69,7 +69,7 @@ appraise 'rails-60' do
69
69
  gem 'sqlite3', '~> 1.4'
70
70
  end
71
71
 
72
- appraise 'redis-40' do
72
+ appraise 'redis-40' do
73
73
  gem 'redis', '>= 4.0.0', '< 5.0'
74
74
  end
75
75
 
@@ -87,7 +87,7 @@ appraise 'resque-122' do
87
87
  end
88
88
 
89
89
  appraise 'resque-20' do
90
- gem 'resque', '>= 2.0', '< 3.0'
90
+ gem 'resque', '>= 2.0', '< 3.0'
91
91
  end
92
92
 
93
93
  appraise 'roda-20' do
@@ -118,3 +118,7 @@ end
118
118
  appraise 'sidekiq-50' do
119
119
  gem 'sidekiq', '>= 5.0', '< 6.0'
120
120
  end
121
+
122
+ appraise 'mongo-216' do
123
+ gem 'mongo', '>= 2.16', '< 3'
124
+ end
data/README.md CHANGED
@@ -6,11 +6,8 @@
6
6
 
7
7
  The Instana gem provides Ruby metrics and traces (request, queue & cross-host) for [Instana](https://www.instana.com/).
8
8
 
9
- [![Build Status](https://travis-ci.org/instana/ruby-sensor.svg?branch=master)](https://travis-ci.org/instana/ruby-sensor)
10
- [![Code
11
- Climate](https://codeclimate.com/github/instana/ruby-sensor/badges/gpa.svg)](https://codeclimate.com/github/instana/ruby-sensor)
9
+ [![CircleCI](https://circleci.com/gh/instana/ruby-sensor.svg?style=svg)](https://circleci.com/gh/instana/ruby-sensor)
12
10
  [![Gem Version](https://badge.fury.io/rb/instana.svg)](https://badge.fury.io/rb/instana)
13
- [![OpenTracing Badge](https://img.shields.io/badge/OpenTracing-enabled-blue.svg)](http://opentracing.io)
14
11
 
15
12
  ## Note
16
13
 
@@ -78,4 +75,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/instan
78
75
  ## More
79
76
 
80
77
  Want to instrument other languages? See our [Node.js](https://github.com/instana/nodejs), [Go](https://github.com/instana/golang-sensor), [Python](https://github.com/instana/python-sensor) repositories or [many other supported technologies](https://www.instana.com/supported-technologies/).
81
-
@@ -0,0 +1,18 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2021
4
+ # (c) Copyright Instana Inc. 2021
5
+
6
+ source "https://rubygems.org"
7
+
8
+ gem "rake"
9
+ gem "minitest", "5.9.1"
10
+ gem "minitest-reporters"
11
+ gem "webmock"
12
+ gem "puma"
13
+ gem "rubocop", "~> 1.9"
14
+ gem "rack-test"
15
+ gem "simplecov", "~> 0.21.2"
16
+ gem "mongo", ">= 2.16", "< 3"
17
+
18
+ gemspec path: "../"
@@ -0,0 +1,23 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ module Instana
5
+ module Activators
6
+ class Mongo < Activator
7
+ def can_instrument?
8
+ defined?(::Mongo::Client) && defined?(::Mongo::Monitoring::Global)
9
+ end
10
+
11
+ def instrument
12
+ require 'instana/instrumentation/mongo'
13
+
14
+ ::Mongo::Monitoring::Global.subscribe(
15
+ ::Mongo::Monitoring::COMMAND,
16
+ ::Instana::Mongo.new
17
+ )
18
+
19
+ true
20
+ end
21
+ end
22
+ end
23
+ end
@@ -130,6 +130,7 @@ module Instana
130
130
  return {} unless @env.has_key?('HTTP_TRACEPARENT')
131
131
  matches = @env['HTTP_TRACEPARENT'].match(W3_TRACE_PARENT_FORMAT)
132
132
  return {} unless matches
133
+ return {} if matches_is_invalid(matches)
133
134
 
134
135
  trace_id = ::Instana::Util.header_to_id(matches['trace'][16..-1]) # rubocop:disable Style/SlicingWithRange, Lint/RedundantCopDisableDirective
135
136
  span_id = ::Instana::Util.header_to_id(matches['parent'])
@@ -143,6 +144,10 @@ module Instana
143
144
  }
144
145
  end
145
146
 
147
+ def matches_is_invalid(matches)
148
+ matches['trace'].match(/\A0+\z/) || matches['parent'].match(/\A0+\z/)
149
+ end
150
+
146
151
  def context_from_trace_state
147
152
  state = parse_trace_state
148
153
 
@@ -0,0 +1,46 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ module Instana
5
+ class Mongo
6
+ REMOVED_COMMAND_ELEMENTS = %w[lsid $db documents].freeze
7
+
8
+ def initialize
9
+ @requests = {}
10
+ end
11
+
12
+ def started(event)
13
+ tags = {
14
+ namespace: event.database_name,
15
+ command: event.command_name,
16
+ peer: {
17
+ hostname: event.address.host,
18
+ port: event.address.port
19
+ },
20
+ json: filter_statement(event.command)
21
+ }
22
+
23
+ @requests[event.request_id] = ::Instana.tracer.log_async_entry(:mongo, {mongo: tags})
24
+ end
25
+
26
+ def failed(event)
27
+ span = @requests.delete(event.request_id)
28
+ span.add_error(Exception.new(event.message))
29
+
30
+ ::Instana.tracer.log_async_exit(:mongo, {}, span)
31
+ end
32
+
33
+ def succeeded(event)
34
+ span = @requests.delete(event.request_id)
35
+ ::Instana.tracer.log_async_exit(:mongo, {}, span)
36
+ end
37
+
38
+ private
39
+
40
+ def filter_statement(command)
41
+ command.delete_if { |k, _| REMOVED_COMMAND_ELEMENTS.include?(k) }
42
+
43
+ JSON.dump(command)
44
+ end
45
+ end
46
+ end
@@ -7,12 +7,12 @@ module Instana
7
7
  :memcache, :'net-http', :rack, :render, :'rpc-client',
8
8
  :'rpc-server', :'sidekiq-client', :'sidekiq-worker',
9
9
  :redis, :'resque-client', :'resque-worker', :'graphql.server', :dynamodb, :s3, :sns, :sqs, :'aws.lambda.entry', :activejob, :log, :"mail.actionmailer",
10
- :"aws.lambda.invoke" ].freeze
10
+ :"aws.lambda.invoke", :mongo ].freeze
11
11
  ENTRY_SPANS = [ :rack, :'resque-worker', :'rpc-server', :'sidekiq-worker', :'graphql.server', :sqs,
12
12
  :'aws.lambda.entry' ].freeze
13
13
  EXIT_SPANS = [ :activerecord, :excon, :'net-http', :'resque-client',
14
14
  :'rpc-client', :'sidekiq-client', :redis, :dynamodb, :s3, :sns, :sqs, :log, :"mail.actionmailer",
15
- :"aws.lambda.invoke" ].freeze
15
+ :"aws.lambda.invoke", :mongo ].freeze
16
16
  HTTP_SPANS = [ :rack, :excon, :'net-http' ].freeze
17
17
 
18
18
  attr_accessor :parent
@@ -120,7 +120,7 @@ module Instana
120
120
  elsif @data[:n] == :activerecord
121
121
  @data[:data][:activerecord][:error] = e.message
122
122
  else
123
- log(:error, Time.now, { :message => e.message, :parameters => e.class.to_s })
123
+ log(:error, Time.now, message: e.message, parameters: e.class.to_s)
124
124
  end
125
125
  e.instance_variable_set(:@instana_logged, true)
126
126
  end
@@ -47,7 +47,7 @@ module Instana
47
47
  state.unshift("in=#{trace_id_header};#{span_id_header}")
48
48
  end
49
49
 
50
- state.reject { |v| v.nil? }.join(',')
50
+ state.take(32).reject { |v| v.nil? }.join(',')
51
51
  end
52
52
 
53
53
  def to_hash
@@ -2,6 +2,6 @@
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
4
  module Instana
5
- VERSION = "1.207.0"
5
+ VERSION = "1.208.0"
6
6
  VERSION_FULL = "instana-#{VERSION}"
7
7
  end
@@ -0,0 +1,37 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ require 'test_helper'
5
+
6
+ class MongoTest < Minitest::Test
7
+ def setup
8
+ clear_all!
9
+ end
10
+
11
+ def test_mongo
12
+ Instana.tracer.start_or_continue_trace(:'mongo-test') do
13
+ client = Mongo::Client.new('mongodb://127.0.0.1:27017/instana')
14
+ client[:people].delete_many({ name: /$S*/ })
15
+ client[:people].insert_many([{ _id: 1, name: "Stan" }])
16
+ end
17
+
18
+ spans = ::Instana.processor.queued_spans
19
+ delete_span, insert_span, = spans
20
+
21
+ delete_data = delete_span[:data][:mongo]
22
+ insert_data = insert_span[:data][:mongo]
23
+
24
+ assert_equal delete_span[:n], :mongo
25
+ assert_equal insert_span[:n], :mongo
26
+
27
+ assert_equal delete_data[:namespace], "instana"
28
+ assert_equal delete_data[:command], "delete"
29
+ assert_equal delete_data[:peer], {hostname: "127.0.0.1", port: 27017}
30
+ assert delete_data[:json].include?("delete")
31
+
32
+ assert_equal insert_data[:namespace], "instana"
33
+ assert_equal insert_data[:command], "insert"
34
+ assert_equal insert_data[:peer], {hostname: "127.0.0.1", port: 27017}
35
+ assert insert_data[:json].include?("insert")
36
+ end
37
+ end
@@ -56,6 +56,20 @@ class RackInstrumentedRequestTest < Minitest::Test
56
56
  assert req.continuing_from_trace_parent?
57
57
  end
58
58
 
59
+ def test_incoming_w3_content_invalid_id
60
+ req = Instana::InstrumentedRequest.new(
61
+ 'HTTP_X_INSTANA_L' => '1',
62
+ 'HTTP_TRACEPARENT' => '00-00000000000000000000000000000000-0000000000000000-01'
63
+ )
64
+
65
+ expected = {
66
+ level: '1'
67
+ }
68
+
69
+ assert_equal expected, req.incoming_context
70
+ refute req.continuing_from_trace_parent?
71
+ end
72
+
59
73
  def test_incoming_invalid_w3_content
60
74
  req = Instana::InstrumentedRequest.new(
61
75
  'HTTP_X_INSTANA_L' => '1',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instana
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.207.0
4
+ version: 1.208.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Giacomo Lombardo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-30 00:00:00.000000000 Z
11
+ date: 2021-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -160,6 +160,7 @@ files:
160
160
  - gemfiles/excon_079.gemfile
161
161
  - gemfiles/graphql_10.gemfile
162
162
  - gemfiles/grpc_10.gemfile
163
+ - gemfiles/mongo_216.gemfile
163
164
  - gemfiles/net_http_01.gemfile
164
165
  - gemfiles/rack_16.gemfile
165
166
  - gemfiles/rack_20.gemfile
@@ -199,6 +200,7 @@ files:
199
200
  - lib/instana/activators/graphql.rb
200
201
  - lib/instana/activators/grpc_client.rb
201
202
  - lib/instana/activators/grpc_server.rb
203
+ - lib/instana/activators/mongo.rb
202
204
  - lib/instana/activators/net_http.rb
203
205
  - lib/instana/activators/rack.rb
204
206
  - lib/instana/activators/rails.rb
@@ -242,6 +244,7 @@ files:
242
244
  - lib/instana/instrumentation/graphql.rb
243
245
  - lib/instana/instrumentation/grpc.rb
244
246
  - lib/instana/instrumentation/instrumented_request.rb
247
+ - lib/instana/instrumentation/mongo.rb
245
248
  - lib/instana/instrumentation/net-http.rb
246
249
  - lib/instana/instrumentation/rack.rb
247
250
  - lib/instana/instrumentation/redis.rb
@@ -298,6 +301,7 @@ files:
298
301
  - test/instrumentation/excon_test.rb
299
302
  - test/instrumentation/graphql_test.rb
300
303
  - test/instrumentation/grpc_test.rb
304
+ - test/instrumentation/mongo_test.rb
301
305
  - test/instrumentation/net_http_test.rb
302
306
  - test/instrumentation/rack_instrumented_request_test.rb
303
307
  - test/instrumentation/rack_test.rb
@@ -402,6 +406,7 @@ test_files:
402
406
  - test/instrumentation/excon_test.rb
403
407
  - test/instrumentation/graphql_test.rb
404
408
  - test/instrumentation/grpc_test.rb
409
+ - test/instrumentation/mongo_test.rb
405
410
  - test/instrumentation/net_http_test.rb
406
411
  - test/instrumentation/rack_instrumented_request_test.rb
407
412
  - test/instrumentation/rack_test.rb