instana 1.7.7 → 1.7.8

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
  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