instana 1.204.0.pre2 → 1.206.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: 7f20d275265e9f179c0dffa1bd49f6aa549722f76dc6b4eb49e564f7b7b0fd99
4
- data.tar.gz: ce3aedd1cf2ee6231431654fd3d9f2a28da1df82ee9db26a79c46cc24259888e
3
+ metadata.gz: bc4bc258b5a217883b3267436a0b70adaef7f270718cd2ab97fc9204c9adab76
4
+ data.tar.gz: 77e8b1317b0c6739211bee22c63cfdeb2fa4e9a44b21ec43e6ba76c55440e180
5
5
  SHA512:
6
- metadata.gz: b32619dddf8005f6af816e6c4a3987fc5815a6e65a2cc41363e8c40899b89f1731d8117a7e714309ae4f5439fc9a272a69bcb51a0735de537d59c062078f99bb
7
- data.tar.gz: fb1a7e2f0ba48819309236a99db3a97a417f1919cce9bf5519954466d5aba3902dc8d006ca15d650e80a66b6ab47affc682b6d260cc9e068cedf5da25e46e0c3
6
+ metadata.gz: ebe6816e014418efb136c4b96c73eb186453e1324da065a5a6943c43677ae91a9816d81e2fc1896c33037b13f7958556164adecbf00f5b993787c956e9e2b2ef
7
+ data.tar.gz: b69393f258edb339153b60f980b168c585c57b364070a90cb97e119b2ed0931ebbdee913353d5761ce383c9eb6bc7eb054e0a471e7fa8b04dd6470fdcac80db0
data/.circleci/config.yml CHANGED
@@ -113,6 +113,10 @@ executors:
113
113
  commands:
114
114
  setup:
115
115
  steps:
116
+ - run:
117
+ name: Install iproute2
118
+ command: |
119
+ sudo apt-get install iproute2
116
120
  - run:
117
121
  name: Install Java
118
122
  command: |
@@ -141,13 +145,20 @@ commands:
141
145
  - run:
142
146
  name: Run SonarQube to capture coverage
143
147
  command: |
144
- wget -O /tmp/sonar-scanner-cli.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.5.0.2216.zip
148
+ wget -O /tmp/sonar-scanner-cli.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472.zip
145
149
  unzip -d /tmp /tmp/sonar-scanner-cli.zip
146
- /tmp/sonar-scanner-4.5.0.2216/bin/sonar-scanner \
147
- -Dsonar.projectKey=ruby-sensor \
148
- -Dsonar.sources=. \
149
- -Dsonar.host.url="${SONARQUBE_URL}" \
150
- -Dsonar.login="${SONARQUBE_LOGIN}"
150
+ if [[ -n "${CIRCLE_PR_NUMBER}" ]]; then
151
+ /tmp/sonar-scanner-4.6.2.2472/bin/sonar-scanner \
152
+ -Dsonar.host.url="${SONARQUBE_URL}" \
153
+ -Dsonar.login="${SONARQUBE_LOGIN}" \
154
+ -Dsonar.pullrequest.key="${CIRCLE_PR_NUMBER}" \
155
+ -Dsonar.pullrequest.branch="${CIRCLE_BRANCH}"
156
+ else
157
+ /tmp/sonar-scanner-4.6.2.2472/bin/sonar-scanner \
158
+ -Dsonar.host.url="${SONARQUBE_URL}" \
159
+ -Dsonar.login="${SONARQUBE_LOGIN}" \
160
+ -Dsonar.branch.name="${CIRCLE_BRANCH}"
161
+ fi
151
162
  run_tests:
152
163
  steps:
153
164
  - run:
@@ -156,7 +167,7 @@ commands:
156
167
  mkdir _junit
157
168
  bundle exec rake
158
169
  - store_test_results:
159
- path: ~/_junit
170
+ path: ~/project/_junit
160
171
  run_rubocop:
161
172
  steps:
162
173
  - run:
@@ -171,11 +182,11 @@ commands:
171
182
  mkdir -p ~/.gem
172
183
  echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
173
184
  chmod 0600 /home/circleci/.gem/credentials
174
- - run:
185
+ - run:
175
186
  name: Publish Gem
176
187
  command: |
177
188
  bundle exec rake release[origin]
178
-
189
+
179
190
  jobs:
180
191
  test_core:
181
192
  parameters:
@@ -9,6 +9,7 @@ module Instana
9
9
  ENTITY_DATA_URL = '/com.instana.plugin.ruby.%i'.freeze
10
10
  RESPONSE_DATA_URL = '/com.instana.plugin.ruby/response.%i?messageId=%s'.freeze
11
11
  TRACES_DATA_URL = "/com.instana.plugin.ruby/traces.%i".freeze
12
+ TRACE_METRICS_URL = "/tracermetrics".freeze
12
13
 
13
14
  attr_reader :report_timer
14
15
 
@@ -35,10 +36,24 @@ module Instana
35
36
  def report_to_backend
36
37
  report_metrics if ::Instana.config[:metrics][:enabled]
37
38
  report_traces if ::Instana.config[:tracing][:enabled]
39
+ report_trace_stats if ::Instana.config[:tracing][:enabled]
38
40
  rescue StandardError => e
39
41
  @logger.error(%(#{e}\n#{e.backtrace.join("\n")}))
40
42
  end
41
43
 
44
+ def report_trace_stats
45
+ discovery = @discovery.value
46
+ return unless discovery
47
+
48
+ payload = {
49
+ tracer: 'ruby',
50
+ pid: discovery['pid'],
51
+ metrics: @processor.span_metrics
52
+ }
53
+
54
+ @client.send_request('POST', TRACE_METRICS_URL, payload)
55
+ end
56
+
42
57
  def report_traces
43
58
  discovery = @discovery.value
44
59
  return unless discovery
@@ -96,7 +111,7 @@ module Instana
96
111
  exec_args: process.arguments,
97
112
  gc: GCSnapshot.instance.report,
98
113
  thread: {count: ::Thread.list.count},
99
- memory: {rss_size: proc_table.rss / 1024} # Bytes to Kilobytes
114
+ memory: {rss_size: process.memory_used}
100
115
  }
101
116
  end
102
117
  end
@@ -47,6 +47,14 @@ module Instana
47
47
  File.read(path).match(/\d+/).to_s.to_i
48
48
  end
49
49
 
50
+ def memory_used
51
+ if RbConfig::CONFIG['host_os'].include?('darwin')
52
+ rss / 1024
53
+ else
54
+ rss * 4096
55
+ end
56
+ end
57
+
50
58
  private
51
59
 
52
60
  def clean_arguments(arguments)
@@ -19,7 +19,7 @@ module Instana
19
19
  }
20
20
  }
21
21
 
22
- if binds.all? { |b| b.respond_to?(:value_before_type_cast) }
22
+ if binds.all? { |b| b.respond_to?(:value_before_type_cast) } && !::Instana.config[:sanitize_sql]
23
23
  mapped = binds.map(&:value_before_type_cast)
24
24
  call_payload[:activerecord][:binds] = mapped
25
25
  end
@@ -11,7 +11,7 @@ module Instana
11
11
  end
12
12
 
13
13
  def remove_from_query(str, secret_values = Instana.agent.secret_values)
14
- return str unless secret_values
14
+ return str unless secret_values && str
15
15
 
16
16
  begin
17
17
  url = URI(str)
@@ -20,6 +20,9 @@ module Instana
20
20
  @batch_size = 3000
21
21
  @logger = logger
22
22
  @pid = Process.pid
23
+
24
+ @spans_opened = Concurrent::AtomicFixnum.new(0)
25
+ @spans_closed = Concurrent::AtomicFixnum.new(0)
23
26
  end
24
27
 
25
28
  # Adds a span to the span queue
@@ -34,9 +37,31 @@ module Instana
34
37
  end
35
38
  # :nocov:
36
39
 
40
+ @spans_closed.increment
37
41
  @queue.push(span)
38
42
  end
39
43
 
44
+ # Note that we've started a new span. Used to
45
+ # generate monitoring metrics.
46
+ def start_span(_)
47
+ @spans_opened.increment
48
+ end
49
+
50
+ # Clears and retrieves metrics associated with span creation and submission
51
+ def span_metrics
52
+ response = {
53
+ opened: @spans_opened.value,
54
+ closed: @spans_closed.value,
55
+ filtered: 0,
56
+ dropped: 0
57
+ }
58
+
59
+ @spans_opened.value = 0
60
+ @spans_closed.value = 0
61
+
62
+ response
63
+ end
64
+
40
65
  ##
41
66
  # send
42
67
  #
@@ -82,6 +107,9 @@ module Instana
82
107
  # test suite to reset state.
83
108
  #
84
109
  def clear!
110
+ @spans_opened.value = 0
111
+ @spans_closed.value = 0
112
+
85
113
  until @queue.empty? do
86
114
  # Non-blocking pop; ignore exception
87
115
  @queue.pop(true) rescue nil
@@ -71,6 +71,8 @@ module Instana
71
71
  configure_custom(name)
72
72
  end
73
73
 
74
+ ::Instana.processor.start_span(self)
75
+
74
76
  # Attach a backtrace to all exit spans
75
77
  add_stack if ::Instana.config[:collect_backtraces] && exit_span?
76
78
  end
@@ -2,6 +2,6 @@
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
4
  module Instana
5
- VERSION = "1.204.0.pre2"
5
+ VERSION = "1.206.0"
6
6
  VERSION_FULL = "instana-#{VERSION}"
7
7
  end
@@ -0,0 +1,9 @@
1
+ sonar.projectKey=ruby-sensor
2
+ sonar.sources=lib
3
+ sonar.tests=test
4
+ sonar.exclusions=_junit/*
5
+ sonar.ruby.coverage.reportPaths=coverage/coverage.json
6
+ sonar.links.homepage=https://github.com/instana/ruby-sensor/
7
+ sonar.links.ci=https://circleci.com/gh/instana/ruby-sensor
8
+ sonar.links.issue=https://github.com/instana/ruby-sensor/issues
9
+ sonar.links.scm=https://github.com/instana/ruby-sensor/
@@ -23,6 +23,8 @@ class HostAgentReportingObserverTest < Minitest::Test
23
23
  end
24
24
 
25
25
  def test_report
26
+ stub_request(:post, "http://10.10.10.10:9292/tracermetrics")
27
+ .to_return(status: 200)
26
28
  stub_request(:post, "http://10.10.10.10:9292/com.instana.plugin.ruby.0")
27
29
  .to_return(status: 200)
28
30
 
@@ -35,6 +37,8 @@ class HostAgentReportingObserverTest < Minitest::Test
35
37
  end
36
38
 
37
39
  def test_report_fail
40
+ stub_request(:post, "http://10.10.10.10:9292/tracermetrics")
41
+ .to_return(status: 200)
38
42
  stub_request(:post, "http://10.10.10.10:9292/com.instana.plugin.ruby.0")
39
43
  .to_return(status: 500)
40
44
 
@@ -54,6 +58,9 @@ class HostAgentReportingObserverTest < Minitest::Test
54
58
  args: {file: 'test_helper.rb'}
55
59
  )
56
60
 
61
+ stub_request(:post, "http://10.10.10.10:9292/tracermetrics")
62
+ .to_return(status: 200)
63
+
57
64
  stub_request(:post, "http://10.10.10.10:9292/com.instana.plugin.ruby.0")
58
65
  .to_return(status: 200, body: action)
59
66
 
@@ -75,6 +82,9 @@ class HostAgentReportingObserverTest < Minitest::Test
75
82
  args: {file: 'test_helper.rb'}
76
83
  ])
77
84
 
85
+ stub_request(:post, "http://10.10.10.10:9292/tracermetrics")
86
+ .to_return(status: 200)
87
+
78
88
  stub_request(:post, "http://10.10.10.10:9292/com.instana.plugin.ruby.0")
79
89
  .to_return(status: 200, body: action)
80
90
 
@@ -90,6 +100,9 @@ class HostAgentReportingObserverTest < Minitest::Test
90
100
  end
91
101
 
92
102
  def test_agent_action_error
103
+ stub_request(:post, "http://10.10.10.10:9292/tracermetrics")
104
+ .to_return(status: 200)
105
+
93
106
  stub_request(:post, "http://10.10.10.10:9292/com.instana.plugin.ruby.0")
94
107
  .to_return(status: 200, body: 'INVALID')
95
108
 
@@ -60,4 +60,24 @@ class ProcessInfoTest < Minitest::Test
60
60
  assert_equal subject.sched_pid, subject.parent_pid
61
61
  end
62
62
  end
63
+
64
+ def test_osx_memory_used
65
+ host_os = RbConfig::CONFIG['host_os']
66
+ RbConfig::CONFIG['host_os'] = 'darwin'
67
+
68
+ subject = Instana::Backend::ProcessInfo.new(OpenStruct.new(rss: 1024))
69
+ assert_equal 1, subject.memory_used
70
+ ensure
71
+ RbConfig::CONFIG['host_os'] = host_os
72
+ end
73
+
74
+ def test_linux_memory_used
75
+ host_os = RbConfig::CONFIG['host_os']
76
+ RbConfig::CONFIG['host_os'] = 'linux'
77
+
78
+ subject = Instana::Backend::ProcessInfo.new(OpenStruct.new(rss: 1))
79
+ assert_equal 4096, subject.memory_used
80
+ ensure
81
+ RbConfig::CONFIG['host_os'] = host_os
82
+ end
63
83
  end
@@ -29,6 +29,24 @@ class NetHTTPTest < Minitest::Test
29
29
  WebMock.disable_net_connect!
30
30
  end
31
31
 
32
+ def test_get_without_query
33
+ clear_all!
34
+ WebMock.allow_net_connect!
35
+
36
+ Instana.tracer.start_or_continue_trace(:"net-http-test") do
37
+ Net::HTTP.get(URI('http://127.0.0.1:6511/'))
38
+ end
39
+
40
+ spans = ::Instana.processor.queued_spans
41
+ assert_equal 3, spans.length
42
+
43
+ http_span = find_first_span_by_name(spans, :'net-http')
44
+ assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
45
+ assert_equal "200", http_span[:data][:http][:status]
46
+
47
+ WebMock.disable_net_connect!
48
+ end
49
+
32
50
  def test_block_request
33
51
  clear_all!
34
52
  WebMock.allow_net_connect!
@@ -38,8 +38,6 @@ class RailsActiveRecordTest < Minitest::Test
38
38
  data = span[:data][:activerecord]
39
39
 
40
40
  assert data[:sql].start_with?('INSERT INTO')
41
- assert 'core', data[:binds][0]
42
- assert 'blue', data[:binds][1]
43
41
  end
44
42
 
45
43
  def test_read
@@ -54,8 +52,6 @@ class RailsActiveRecordTest < Minitest::Test
54
52
  data = span[:data][:activerecord]
55
53
 
56
54
  assert data[:sql].start_with?('SELECT')
57
- assert 'core', data[:binds][0]
58
- assert 1, data[:binds][1]
59
55
  end
60
56
 
61
57
  def test_update
@@ -73,8 +69,6 @@ class RailsActiveRecordTest < Minitest::Test
73
69
  data = span[:data][:activerecord]
74
70
 
75
71
  assert data[:sql].start_with?('UPDATE')
76
- assert 'red', data[:binds][0]
77
- assert 1, data[:binds][2]
78
72
  end
79
73
 
80
74
  def test_delete
@@ -90,7 +84,6 @@ class RailsActiveRecordTest < Minitest::Test
90
84
  data = span[:data][:activerecord]
91
85
 
92
86
  assert data[:sql].start_with?('DELETE')
93
- assert 1, data[:binds][0]
94
87
  end
95
88
 
96
89
  def test_raw
data/test/secrets_test.rb CHANGED
@@ -88,6 +88,15 @@ class SecretsTest < Minitest::Test
88
88
  assert_redacted @subject.remove_from_query(url, sample_config), %w(filter[instantiate]), raw_str: true
89
89
  end
90
90
 
91
+ def test_with_nil
92
+ sample_config = {
93
+ "matcher"=>"contains",
94
+ "list"=>["stan"]
95
+ }
96
+
97
+ assert_equal @subject.remove_from_query(nil, sample_config), nil
98
+ end
99
+
91
100
  private
92
101
 
93
102
  def url_for(keys)
@@ -10,8 +10,6 @@ class ErrorJob
10
10
  def self.perform
11
11
  if ENV.key?('REDIS_URL')
12
12
  redis = Redis.new(:url => ENV['REDIS_URL'])
13
- elsif ENV.key?('REDIS_URL')
14
- redis = Redis.new(:url => ENV['REDIS_URL'])
15
13
  else
16
14
  redis = Redis.new(:url => 'localhost:6379')
17
15
  end
@@ -20,6 +18,5 @@ class ErrorJob
20
18
  redis.set('ts', dt)
21
19
 
22
20
  raise Exception.new("Silly Rabbit, Trix are for kids.")
23
- redis.set(:nb_id, 2)
24
21
  end
25
22
  end
@@ -12,8 +12,6 @@ class FastJob
12
12
 
13
13
  if ENV.key?('REDIS_URL')
14
14
  redis = Redis.new(:url => ENV['REDIS_URL'])
15
- elsif ENV.key?('REDIS_URL')
16
- redis = Redis.new(:url => ENV['REDIS_URL'])
17
15
  else
18
16
  redis = Redis.new(:url => 'redis://localhost:6379')
19
17
  end
@@ -111,7 +111,6 @@ class CustomTracingTest < Minitest::Test
111
111
 
112
112
  ::Instana.tracer.log_entry(:custom_span, kvs)
113
113
  raise "custom tracing error. This is only a test"
114
- ::Instana.tracer.log_info({:on_info_kv => 1})
115
114
  rescue => e
116
115
  ::Instana.tracer.log_error(e)
117
116
  ensure
@@ -133,4 +133,21 @@ class SpanTest < Minitest::Test
133
133
  assert_equal({}, span.tags)
134
134
  time.verify
135
135
  end
136
+
137
+ def test_inc_processed_counts
138
+ clear_all!
139
+
140
+ span = Instana::Span.new(:excon)
141
+ span.close
142
+
143
+ metrics = Instana.processor.span_metrics
144
+
145
+ assert_equal 1, metrics[:opened]
146
+ assert_equal 1, metrics[:closed]
147
+
148
+ metrics = Instana.processor.span_metrics
149
+
150
+ assert_equal 0, metrics[:opened]
151
+ assert_equal 0, metrics[:closed]
152
+ end
136
153
  end
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.204.0.pre2
4
+ version: 1.206.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-07-08 00:00:00.000000000 Z
11
+ date: 2021-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -275,6 +275,7 @@ files:
275
275
  - lib/instana/version.rb
276
276
  - lib/opentracing.rb
277
277
  - log/.keep
278
+ - sonar-project.properties
278
279
  - test/activator_test.rb
279
280
  - test/backend/agent_test.rb
280
281
  - test/backend/gc_snapshot_test.rb
@@ -370,9 +371,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
370
371
  version: '2.1'
371
372
  required_rubygems_version: !ruby/object:Gem::Requirement
372
373
  requirements:
373
- - - ">"
374
+ - - ">="
374
375
  - !ruby/object:Gem::Version
375
- version: 1.3.1
376
+ version: '0'
376
377
  requirements: []
377
378
  rubygems_version: 3.1.6
378
379
  signing_key: