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 +4 -4
- data/.circleci/config.yml +6 -0
- data/Appraisals +7 -3
- data/README.md +1 -5
- data/gemfiles/mongo_216.gemfile +18 -0
- data/lib/instana/activators/mongo.rb +23 -0
- data/lib/instana/instrumentation/instrumented_request.rb +5 -0
- data/lib/instana/instrumentation/mongo.rb +46 -0
- data/lib/instana/tracing/span.rb +3 -3
- data/lib/instana/tracing/span_context.rb +1 -1
- data/lib/instana/version.rb +1 -1
- data/test/instrumentation/mongo_test.rb +37 -0
- data/test/instrumentation/rack_instrumented_request_test.rb +14 -0
- metadata +7 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2cec589ba39a110c9378497376585d47d2f968bd27c31cd1ccae259912a0d2b0
|
|
4
|
+
data.tar.gz: f9df2c3f6e1543e6e4bb3efaa44026e295f7ca03ef59add49c291a3218b04e4d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
[](https://codeclimate.com/github/instana/ruby-sensor)
|
|
9
|
+
[](https://circleci.com/gh/instana/ruby-sensor)
|
|
12
10
|
[](https://badge.fury.io/rb/instana)
|
|
13
|
-
[](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
|
data/lib/instana/tracing/span.rb
CHANGED
|
@@ -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,
|
|
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
|
data/lib/instana/version.rb
CHANGED
|
@@ -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.
|
|
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-
|
|
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
|