instana 1.7.7 → 1.7.8

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
  SHA1:
3
- metadata.gz: c3fed3e3fee894cbd36d18cc5e01c85977a8c51d
4
- data.tar.gz: baaa2b1e834962ed98e46bebda58bf6f9f411f24
3
+ metadata.gz: 316edaafce9e919b5191950fcd3a8dfd7ca39ef6
4
+ data.tar.gz: 28b3899692291381011da1602da9b3512e5637ff
5
5
  SHA512:
6
- metadata.gz: c46e619221c89f61ebb3da597d9c77cbfbbdbc72455fad9ee83364998c41ffcb48dc09b78d9cd97fe2934cb33bd733032f4e6b97cb4221d3492fc54b58543b7d
7
- data.tar.gz: fd8028cd58c3dd685f80a8fdb85d17ccde28c15c3b762398c9f2187837a67d50a76ccfbf55995e5892f37c0948944a28297c39d834e3fa1d6f017cff7992f215
6
+ metadata.gz: 37f348d6f49c0a6b4214e50d157349d6191fc61c17604d62e1a50ff32730201697220cced8986d4f0abec8e41eaeee95d342952b3b2fd97338bd7fd03c63a21a
7
+ data.tar.gz: d442ed00f217b08b4b29f64166c66ff1ecd4f551e238787587d203f887b450eb14933d0349b59f844530cc2e18e4790e57586498d3d4363274fc44891b7907e8
data/Configuration.md CHANGED
@@ -48,6 +48,16 @@ Instrumentation can be disabled as:
48
48
  ::Instana.config[:rack][:enabled] = false
49
49
  ```
50
50
 
51
+ ## Enable/Disable Backtrace Collection
52
+
53
+ Because backtraces are somewhat expensive in Ruby, backtrace collection is disabled by default but can be enabled with the following code:
54
+
55
+ ```Ruby
56
+ ::Instana.config[:collect_backtraces] = true
57
+ ```
58
+
59
+ This will in-turn enable CodeView in your dashboard to get code level insights.
60
+
51
61
  ## Rack Middleware
52
62
 
53
63
  This gem will detect and automagically insert the Instana Rack middleware into the middleware stack when a [supported framework](https://instana.atlassian.net/wiki/display/DOCS/Ruby) is present. We are currently adding support for more frameworks. If you are using a yet to be instrumented framework, you can insert the Instana Rack middleware with the following:
data/lib/instana/agent.rb CHANGED
@@ -252,7 +252,7 @@ module Instana
252
252
  if response.body && response.body.length > 2
253
253
  # The host agent returned something indicating that is has a request for us that we
254
254
  # need to process.
255
- handle_response(response.body)
255
+ handle_agent_tasks(response.body)
256
256
  end
257
257
 
258
258
  if response.code.to_i == 200
@@ -267,30 +267,48 @@ module Instana
267
267
  Instana.logger.debug e.backtrace.join("\r\n")
268
268
  end
269
269
 
270
- # When a request is received by the host agent, it is sent here
271
- # from processing and response.
270
+ # When request(s) are received by the host agent, it is sent here
271
+ # for handling & processing.
272
272
  #
273
- # @param json_string [String] the request from the host agent
273
+ # @param json_string [String] the requests from the host agent
274
274
  #
275
- def handle_response(json_string)
276
- their_request = Oj.load(json_string)
275
+ def handle_agent_tasks(json_string)
276
+ tasks = Oj.load(json_string)
277
+
278
+ if tasks.is_a?(Hash)
279
+ process_agent_task(tasks)
280
+ elsif tasks.is_a?(Array)
281
+ tasks.each do |t|
282
+ process_agent_task(t)
283
+ end
284
+ end
285
+ end
277
286
 
278
- if their_request.key?("action")
279
- if their_request["action"] == "ruby.source"
280
- payload = ::Instana::Util.get_rb_source(their_request["args"]["file"])
287
+ # Process a task sent from the host agent.
288
+ #
289
+ # @param task [String] the request json from the host agent
290
+ #
291
+ def process_agent_task(task)
292
+ if task.key?("action")
293
+ if task["action"] == "ruby.source"
294
+ payload = ::Instana::Util.get_rb_source(task["args"]["file"])
281
295
  else
282
- payload = { :error => "Unrecognized action: #{their_request["action"]}. An newer Instana gem may be required for this. Current version: #{::Instana::VERSION}" }
296
+ payload = { :error => "Unrecognized action: #{task["action"]}. An newer Instana gem may be required for this. Current version: #{::Instana::VERSION}" }
283
297
  end
284
298
  else
285
299
  payload = { :error => "Instana Ruby: No action specified in request." }
286
300
  end
287
301
 
288
- path = "com.instana.plugin.ruby/response.#{@process[:report_pid]}?messageId=#{URI.encode(their_request['messageId'])}"
302
+ path = "com.instana.plugin.ruby/response.#{@process[:report_pid]}?messageId=#{URI.encode(task['messageId'])}"
289
303
  uri = URI.parse("http://#{@discovered[:agent_host]}:#{@discovered[:agent_port]}/#{path}")
290
304
  req = Net::HTTP::Post.new(uri)
291
305
  req.body = Oj.dump(payload)
292
306
  ::Instana.logger.debug "Responding to agent request: #{req.inspect}"
293
307
  make_host_agent_request(req)
308
+
309
+ rescue StandardError => e
310
+ Instana.logger.debug "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}"
311
+ Instana.logger.debug e.backtrace.join("\r\n")
294
312
  end
295
313
 
296
314
  # Accept and report spans to the host agent.
@@ -80,6 +80,7 @@ module Instana
80
80
  # @param kvs [Hash] list of key values to be reported in the span
81
81
  #
82
82
  def add_info(kvs, span = nil)
83
+ return unless @current_span
83
84
  span ||= @current_span
84
85
 
85
86
  # Pass on to the OT span interface which will properly
@@ -94,7 +95,7 @@ module Instana
94
95
  def add_error(e, span = nil)
95
96
  # Return if we've already logged this exception and it
96
97
  # is just propogating up the spans.
97
- return if e && e.instance_variable_get(:@instana_logged)
98
+ return if e && e.instance_variable_get(:@instana_logged) || @current_span.nil?
98
99
  span ||= @current_span
99
100
  span.add_error(e)
100
101
  end
@@ -105,6 +106,8 @@ module Instana
105
106
  # @param kvs [Hash] list of key values to be reported in the span
106
107
  #
107
108
  def end_span(kvs = {}, end_time = ::Instana::Util.now_in_ms)
109
+ return unless @current_span
110
+
108
111
  @current_span.close(end_time)
109
112
  add_info(kvs) if kvs && !kvs.empty?
110
113
  @current_span = @current_span.parent unless @current_span.is_root?
@@ -1,4 +1,4 @@
1
1
  module Instana
2
- VERSION = "1.7.7"
2
+ VERSION = "1.7.8"
3
3
  VERSION_FULL = "instana-#{VERSION}"
4
4
  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.7.7
4
+ version: 1.7.8
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: 2017-11-07 00:00:00.000000000 Z
11
+ date: 2017-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler