instana 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/instana/agent.rb +9 -33
- data/lib/instana/base.rb +6 -5
- data/lib/instana/collector.rb +115 -0
- data/lib/instana/collectors/gc.rb +3 -12
- data/lib/instana/collectors/memory.rb +5 -12
- data/lib/instana/collectors/thread.rb +3 -12
- data/lib/instana/config.rb +9 -1
- data/lib/instana/instrumentation/net-http.rb +48 -46
- data/lib/instana/instrumentation/rest-client.rb +1 -1
- data/lib/instana/setup.rb +7 -4
- data/lib/instana/util.rb +0 -18
- data/lib/instana/version.rb +1 -1
- metadata +3 -3
- data/lib/instana/collectors.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4988b08659f80e1f76d21135af688030ee190a0
|
4
|
+
data.tar.gz: c773f6f64f7559da3e10dbfef73d1ca8012bd289
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b6c215de5684fffe16f8338958b47b8b09cc8b17e6a15b4e2e8a6361f9eb14ba8ca343d8b7ca6a08c7b8d92d95a6ea5a368cd21d4211194c1175ef0a2f796bd
|
7
|
+
data.tar.gz: 9e22ce676e64dd9eb0adab68ea0a9933e1343f83356f88a0796ac6aa3f89582d76fe01d3dc4636afe62b2f6e77cdeca38d7e3a61861dd328e24aa00828cb2dbc
|
data/lib/instana/agent.rb
CHANGED
@@ -9,6 +9,7 @@ module Instana
|
|
9
9
|
class Agent
|
10
10
|
attr_accessor :state
|
11
11
|
attr_accessor :agent_uuid
|
12
|
+
attr_accessor :process
|
12
13
|
|
13
14
|
LOCALHOST = '127.0.0.1'.freeze
|
14
15
|
MIME_JSON = 'application/json'.freeze
|
@@ -18,14 +19,6 @@ module Instana
|
|
18
19
|
# Supported two states (unannounced & announced)
|
19
20
|
@state = :unannounced
|
20
21
|
|
21
|
-
# Snapshot data is collected once per process but resent
|
22
|
-
# every 10 minutes along side process metrics.
|
23
|
-
@snapshot = ::Instana::Util.take_snapshot
|
24
|
-
|
25
|
-
# Set last snapshot to just under 10 minutes ago
|
26
|
-
# so we send a snapshot sooner than later
|
27
|
-
@last_snapshot = Time.now - 570
|
28
|
-
|
29
22
|
# Timestamp of the last successful response from
|
30
23
|
# entity data reporting.
|
31
24
|
@entity_last_seen = Time.now
|
@@ -114,10 +107,10 @@ module Instana
|
|
114
107
|
|
115
108
|
# The collect timer
|
116
109
|
# If we are in announced state, send metric data (only delta reporting)
|
117
|
-
# every ::Instana
|
118
|
-
@collect_timer = @timers.every(::Instana
|
110
|
+
# every ::Instana.config[:collector][:interval] seconds.
|
111
|
+
@collect_timer = @timers.every(::Instana.config[:collector][:interval]) do
|
119
112
|
if @state == :announced
|
120
|
-
if !::Instana
|
113
|
+
if !::Instana.collector.collect_and_report
|
121
114
|
# If report has been failing for more than 1 minute,
|
122
115
|
# fall back to unannounced state
|
123
116
|
if (Time.now - @entity_last_seen) > 60
|
@@ -197,30 +190,18 @@ module Instana
|
|
197
190
|
#
|
198
191
|
# @param paylod [Hash] The collection of metrics to report.
|
199
192
|
#
|
200
|
-
|
193
|
+
# @return [Boolean] true on success, false otherwise
|
194
|
+
#
|
195
|
+
def report_metrics(payload)
|
201
196
|
unless @discovered
|
202
197
|
::Instana.logger.agent("#{__method__} called but discovery hasn't run yet!")
|
203
198
|
return false
|
204
199
|
end
|
205
200
|
|
206
|
-
with_snapshot = false
|
207
201
|
path = "com.instana.plugin.ruby.#{@process[:report_pid]}"
|
208
202
|
uri = URI.parse("http://#{@discovered[:agent_host]}:#{@discovered[:agent_port]}/#{path}")
|
209
203
|
req = Net::HTTP::Post.new(uri)
|
210
204
|
|
211
|
-
# Every 5 minutes, send snapshot data as well
|
212
|
-
if (Time.now - @last_snapshot) > 600
|
213
|
-
with_snapshot = true
|
214
|
-
payload.merge!(@snapshot)
|
215
|
-
|
216
|
-
# Add in process related that could have changed since
|
217
|
-
# snapshot was taken.
|
218
|
-
p = { :pid => @process[:report_pid] }
|
219
|
-
p[:name] = @process[:name]
|
220
|
-
p[:exec_args] = @process[:arguments]
|
221
|
-
payload.merge!(p)
|
222
|
-
end
|
223
|
-
|
224
205
|
req.body = payload.to_json
|
225
206
|
response = make_host_agent_request(req)
|
226
207
|
|
@@ -233,7 +214,6 @@ module Instana
|
|
233
214
|
|
234
215
|
if response.code.to_i == 200
|
235
216
|
@entity_last_seen = Time.now
|
236
|
-
@last_snapshot = Time.now if with_snapshot
|
237
217
|
return true
|
238
218
|
end
|
239
219
|
|
@@ -417,18 +397,14 @@ module Instana
|
|
417
397
|
# Reset the entity timer
|
418
398
|
@entity_last_seen = Time.now
|
419
399
|
|
420
|
-
# Set last snapshot to 10 minutes ago
|
421
|
-
# so we send a snapshot on first report
|
422
|
-
@last_snapshot = Time.now - 601
|
423
400
|
when :unannounced
|
424
401
|
@state = :unannounced
|
425
402
|
|
426
|
-
# Set last snapshot to 10 minutes ago
|
427
|
-
# so we send a snapshot on first report
|
428
|
-
@last_snapshot = Time.now - 601
|
429
403
|
else
|
430
404
|
::Instana.logger.warn "Uknown agent state: #{state}"
|
431
405
|
end
|
406
|
+
::Instana.collector.reset_timer!
|
407
|
+
true
|
432
408
|
end
|
433
409
|
|
434
410
|
# Centralization of the net/http communications
|
data/lib/instana/base.rb
CHANGED
@@ -6,7 +6,7 @@ require "instana/helpers"
|
|
6
6
|
module Instana
|
7
7
|
class << self
|
8
8
|
attr_accessor :agent
|
9
|
-
attr_accessor :
|
9
|
+
attr_accessor :collector
|
10
10
|
attr_accessor :tracer
|
11
11
|
attr_accessor :processor
|
12
12
|
attr_accessor :config
|
@@ -20,13 +20,10 @@ module Instana
|
|
20
20
|
# to run" state.
|
21
21
|
#
|
22
22
|
def setup
|
23
|
-
@logger = ::Instana::XLogger.new(STDOUT)
|
24
|
-
@logger.unknown "Stan is on the scene. Starting Instana instrumentation."
|
25
|
-
|
26
23
|
@agent = ::Instana::Agent.new
|
27
24
|
@tracer = ::Instana::Tracer.new
|
28
25
|
@processor = ::Instana::Processor.new
|
29
|
-
@
|
26
|
+
@collector = ::Instana::Collector.new
|
30
27
|
end
|
31
28
|
|
32
29
|
# Indicates whether we are running in a development environment.
|
@@ -46,3 +43,7 @@ module Instana
|
|
46
43
|
end
|
47
44
|
end
|
48
45
|
end
|
46
|
+
|
47
|
+
# Setup the logger as early as possible
|
48
|
+
::Instana.logger = ::Instana::XLogger.new(STDOUT)
|
49
|
+
::Instana.logger.unknown "Stan is on the scene. Starting Instana instrumentation."
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module Instana
|
2
|
+
class Collector
|
3
|
+
attr_accessor :collectors
|
4
|
+
attr_accessor :last_report_log
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@collectors = []
|
8
|
+
|
9
|
+
# Snapshot data is collected once per process but resent
|
10
|
+
# every 10 minutes along side process metrics.
|
11
|
+
@snapshot = ::Instana::Util.take_snapshot
|
12
|
+
|
13
|
+
# Set last snapshot to just under 10 minutes ago
|
14
|
+
# so we send a snapshot sooner than later
|
15
|
+
@last_snapshot = Time.now - 570
|
16
|
+
|
17
|
+
# We track what we last sent as a metric payload so that
|
18
|
+
# we can do delta reporting
|
19
|
+
@last_values = {}
|
20
|
+
end
|
21
|
+
|
22
|
+
# Register an individual collector.
|
23
|
+
#
|
24
|
+
# @param [Object] the class of the collector to register
|
25
|
+
#
|
26
|
+
def register(klass)
|
27
|
+
::Instana.logger.debug "Adding #{klass} to collectors..."
|
28
|
+
@collectors << klass.new
|
29
|
+
end
|
30
|
+
|
31
|
+
# Resets the timer on when to send process snapshot data.
|
32
|
+
#
|
33
|
+
def reset_timer!
|
34
|
+
# Set last snapshot to 10 minutes ago
|
35
|
+
# so we send a snapshot on first report
|
36
|
+
@last_snapshot = Time.now - 601
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# collect_and_report
|
41
|
+
#
|
42
|
+
# Run through each collector, let them collect up
|
43
|
+
# data and then report what we have via the agent
|
44
|
+
#
|
45
|
+
# @return Boolean true on success
|
46
|
+
#
|
47
|
+
def collect_and_report
|
48
|
+
payload = {}
|
49
|
+
with_snapshot = false
|
50
|
+
|
51
|
+
# Run through the registered collectors and
|
52
|
+
# get all the metrics
|
53
|
+
#
|
54
|
+
@collectors.each do |c|
|
55
|
+
metrics = c.collect
|
56
|
+
if metrics
|
57
|
+
payload[c.payload_key] = metrics
|
58
|
+
else
|
59
|
+
payload.delete(c.payload_key)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Every 5 minutes, send snapshot data as well
|
64
|
+
if (Time.now - @last_snapshot) > 600
|
65
|
+
with_snapshot = true
|
66
|
+
payload.merge!(@snapshot)
|
67
|
+
|
68
|
+
# Add in process related that could have changed since
|
69
|
+
# snapshot was taken.
|
70
|
+
p = { :pid => ::Instana.agent.report_pid }
|
71
|
+
p[:name] = ::Instana.agent.process[:name]
|
72
|
+
p[:exec_args] = ::Instana.agent.process[:arguments]
|
73
|
+
payload.merge!(p)
|
74
|
+
else
|
75
|
+
payload = enforce_deltas(payload, @last_values)
|
76
|
+
end
|
77
|
+
|
78
|
+
if ENV['INSTANA_GEM_TEST']
|
79
|
+
true
|
80
|
+
else
|
81
|
+
# Report all the collected goodies
|
82
|
+
if ::Instana.agent.report_metrics(payload) && with_snapshot
|
83
|
+
@last_snapshot = Time.now
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Take two hashes and enforce delta reporting.
|
89
|
+
# We only report when values change (instead of reporting all of
|
90
|
+
# the time). This is a recursive method.
|
91
|
+
#
|
92
|
+
# @param [Hash] the payload have delta reporting applied to
|
93
|
+
# @param [Hash] a hash of the last values reported
|
94
|
+
#
|
95
|
+
# @return [Hash] the candidate hash with delta reporting applied
|
96
|
+
#
|
97
|
+
def enforce_deltas(candidate, last)
|
98
|
+
candidate.each do |k,v|
|
99
|
+
if v.is_a?(Hash)
|
100
|
+
last[k] ||= {}
|
101
|
+
candidate[k] = enforce_deltas(candidate[k], last[k])
|
102
|
+
candidate.delete(k) if candidate[k].empty?
|
103
|
+
else
|
104
|
+
if last[k] == v
|
105
|
+
candidate.delete(k)
|
106
|
+
else
|
107
|
+
last[k] = candidate[k]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
candidate
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
@@ -1,11 +1,10 @@
|
|
1
1
|
module Instana
|
2
|
-
module
|
2
|
+
module Collectors
|
3
3
|
class GC
|
4
4
|
attr_accessor :payload_key
|
5
5
|
|
6
6
|
def initialize
|
7
7
|
@payload_key = :gc
|
8
|
-
@last_report = {}
|
9
8
|
@this_gc = {}
|
10
9
|
@last_major_count = 0
|
11
10
|
@last_minor_count = 0
|
@@ -40,15 +39,7 @@ module Instana
|
|
40
39
|
# GC Heap
|
41
40
|
@this_gc[:heap_live] = stats[:heap_live_slot] || stats[:heap_live_slots] || stats[:heap_live_num]
|
42
41
|
@this_gc[:heap_free] = stats[:heap_free_slot] || stats[:heap_free_slots] || stats[:heap_free_num]
|
43
|
-
|
44
|
-
@this_gc = ::Instana::Util.enforce_deltas(@this_gc, @last_report)
|
45
|
-
|
46
|
-
unless @this_gc.empty?
|
47
|
-
@last_report.merge!(@this_gc)
|
48
|
-
@this_gc
|
49
|
-
else
|
50
|
-
nil
|
51
|
-
end
|
42
|
+
@this_gc
|
52
43
|
rescue => e
|
53
44
|
::Instana.logger.error "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}"
|
54
45
|
::Instana.logger.debug e.backtrace.join("\r\n")
|
@@ -59,5 +50,5 @@ end
|
|
59
50
|
|
60
51
|
# Register the metrics collector if enabled
|
61
52
|
if ::Instana.config[:metrics][:gc][:enabled]
|
62
|
-
::Instana.
|
53
|
+
::Instana.collector.register(::Instana::Collectors::GC)
|
63
54
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require 'get_process_mem'
|
2
2
|
|
3
3
|
module Instana
|
4
|
-
module
|
4
|
+
module Collectors
|
5
5
|
class Memory
|
6
6
|
attr_accessor :payload_key
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@payload_key = :memory
|
10
|
-
@last_report = {}
|
11
10
|
@this_mem = {}
|
12
11
|
end
|
13
12
|
|
@@ -16,17 +15,11 @@ module Instana
|
|
16
15
|
#
|
17
16
|
# To collect process memory usage.
|
18
17
|
#
|
18
|
+
# @return [Hash] a collection of metrics (if any)
|
19
|
+
#
|
19
20
|
def collect
|
20
|
-
@this_mem.clear
|
21
21
|
@this_mem[:rss_size] = ::GetProcessMem.new(Process.pid).kb
|
22
|
-
|
23
|
-
@this_mem = ::Instana::Util.enforce_deltas(@this_mem, @last_report)
|
24
|
-
unless @this_mem.empty?
|
25
|
-
@last_report.merge!(@this_mem)
|
26
|
-
@this_mem
|
27
|
-
else
|
28
|
-
nil
|
29
|
-
end
|
22
|
+
@this_mem
|
30
23
|
rescue => e
|
31
24
|
::Instana.logger.error "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}"
|
32
25
|
::Instana.logger.debug e.backtrace.join("\r\n")
|
@@ -37,5 +30,5 @@ end
|
|
37
30
|
|
38
31
|
# Register the metrics collector if enabled
|
39
32
|
if ::Instana.config[:metrics][:memory][:enabled]
|
40
|
-
::Instana.
|
33
|
+
::Instana.collector.register(::Instana::Collectors::Memory)
|
41
34
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
module Instana
|
2
|
-
module
|
2
|
+
module Collectors
|
3
3
|
class Thread
|
4
4
|
attr_accessor :payload_key
|
5
5
|
|
6
6
|
def initialize
|
7
7
|
@payload_key = :thread
|
8
|
-
@last_report = {}
|
9
8
|
@this_count = {}
|
10
9
|
end
|
11
10
|
|
@@ -16,15 +15,7 @@ module Instana
|
|
16
15
|
#
|
17
16
|
def collect
|
18
17
|
@this_count[:count] = ::Thread.list.count
|
19
|
-
|
20
|
-
@this_count = ::Instana::Util.enforce_deltas(@this_count, @last_report)
|
21
|
-
|
22
|
-
unless @this_count.empty?
|
23
|
-
@last_report.merge!(@this_count)
|
24
|
-
@this_count
|
25
|
-
else
|
26
|
-
nil
|
27
|
-
end
|
18
|
+
@this_count
|
28
19
|
rescue => e
|
29
20
|
::Instana.logger.error "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}"
|
30
21
|
::Instana.logger.debug e.backtrace.join("\r\n")
|
@@ -35,5 +26,5 @@ end
|
|
35
26
|
|
36
27
|
# Register the metrics collector if enabled
|
37
28
|
if ::Instana.config[:metrics][:thread][:enabled]
|
38
|
-
::Instana.
|
29
|
+
::Instana.collector.register(::Instana::Collectors::Thread)
|
39
30
|
end
|
data/lib/instana/config.rb
CHANGED
@@ -10,12 +10,20 @@ module Instana
|
|
10
10
|
@config[:metrics][:memory] = { :enabled => true }
|
11
11
|
@config[:metrics][:thread] = { :enabled => true }
|
12
12
|
|
13
|
+
if ENV.key?('INSTANA_GEM_DEV')
|
14
|
+
@config[:collector] = { :enabled => true, :interval => 3 }
|
15
|
+
else
|
16
|
+
@config[:collector] = { :enabled => true, :interval => 1 }
|
17
|
+
end
|
18
|
+
|
13
19
|
# EUM Related
|
14
20
|
@config[:eum_api_key] = nil
|
15
21
|
@config[:eum_baggage] = {}
|
16
22
|
|
17
23
|
# HTTP Clients
|
18
|
-
@config[:excon]
|
24
|
+
@config[:excon] = { :enabled => true }
|
25
|
+
@config[:nethttp] = { :enabled => true }
|
26
|
+
@config[:'rest-client'] = { :enabled => true }
|
19
27
|
end
|
20
28
|
|
21
29
|
def [](key)
|
@@ -1,63 +1,65 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
|
3
|
-
Net::HTTP.
|
3
|
+
if defined?(::Net::HTTP) && ::Instana.config[:nethttp][:enabled]
|
4
|
+
Net::HTTP.class_eval {
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
def request_with_instana(*args, &block)
|
7
|
+
if !Instana.tracer.tracing? || !started?
|
8
|
+
return request_without_instana(*args, &block)
|
9
|
+
end
|
9
10
|
|
10
|
-
|
11
|
+
::Instana.tracer.log_entry(:'net-http')
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
# Send out the tracing context with the request
|
14
|
+
request = args[0]
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
# Set request headers; encode IDs as hexadecimal strings
|
17
|
+
t_context = ::Instana.tracer.context
|
18
|
+
request['X-Instana-T'] = t_context.trace_id_header
|
19
|
+
request['X-Instana-S'] = t_context.span_id_header
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
# Collect up KV info now in case any exception is raised
|
22
|
+
kv_payload = { :http => {} }
|
23
|
+
kv_payload[:http][:method] = request.method
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
else
|
27
|
-
if use_ssl?
|
28
|
-
kv_payload[:http][:url] = "https://#{@address}:#{@port}#{request.path}"
|
25
|
+
if request.uri
|
26
|
+
kv_payload[:http][:url] = request.uri.to_s
|
29
27
|
else
|
30
|
-
|
28
|
+
if use_ssl?
|
29
|
+
kv_payload[:http][:url] = "https://#{@address}:#{@port}#{request.path}"
|
30
|
+
else
|
31
|
+
kv_payload[:http][:url] = "http://#{@address}:#{@port}#{request.path}"
|
32
|
+
end
|
31
33
|
end
|
32
|
-
end
|
33
34
|
|
34
|
-
|
35
|
-
|
35
|
+
# The core call
|
36
|
+
response = request_without_instana(*args, &block)
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
# Pickup response headers; convert back to base 10 integer
|
39
|
+
if ::Instana.debug? && response.key?('X-Instana-T')
|
40
|
+
if ::Instana.tracer.trace_id != ::Instana.tracer.header_to_id(response.header['X-Instana-T'])
|
41
|
+
::Instana.logger.debug "#{Thread.current}: Trace ID mismatch on net/http response! ours: #{::Instana.tracer.trace_id} theirs: #{their_trace_id}"
|
42
|
+
end
|
41
43
|
end
|
42
|
-
end
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
kv_payload[:http][:status] = response.code
|
46
|
+
if response.code.to_i.between?(500, 511)
|
47
|
+
# Because of the 5xx response, we flag this span as errored but
|
48
|
+
# without a backtrace (no exception)
|
49
|
+
add_error(nil)
|
50
|
+
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
response
|
53
|
+
rescue => e
|
54
|
+
::Instana.tracer.log_error(e)
|
55
|
+
raise
|
56
|
+
ensure
|
57
|
+
::Instana.tracer.log_exit(:'net-http', kv_payload)
|
58
|
+
end
|
58
59
|
|
59
|
-
|
60
|
+
Instana.logger.warn "Instrumenting Net::HTTP"
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
}
|
62
|
+
alias request_without_instana request
|
63
|
+
alias request request_with_instana
|
64
|
+
}
|
65
|
+
end
|
@@ -28,7 +28,7 @@ module Instana
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
if defined?(::RestClient::Request)
|
31
|
+
if defined?(::RestClient::Request) && ::Instana.config[:'rest-client'][:enabled]
|
32
32
|
::Instana.logger.warn "Instrumenting RestClient"
|
33
33
|
::RestClient::Request.send(:include, ::Instana::Instrumentation::RestClientRequest)
|
34
34
|
end
|
data/lib/instana/setup.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
require "instana/base"
|
2
2
|
require "instana/config"
|
3
3
|
require "instana/agent"
|
4
|
+
require "instana/collector"
|
4
5
|
require "instana/tracer"
|
5
6
|
require "instana/tracing/processor"
|
6
|
-
|
7
|
-
::Instana.setup
|
8
|
-
|
9
|
-
require "instana/collectors"
|
10
7
|
require "instana/instrumentation"
|
11
8
|
|
9
|
+
::Instana.setup
|
12
10
|
::Instana.agent.setup
|
13
11
|
|
12
|
+
# Register the metric collectors
|
13
|
+
require 'instana/collectors/gc'
|
14
|
+
require 'instana/collectors/memory'
|
15
|
+
require 'instana/collectors/thread'
|
16
|
+
|
14
17
|
# Require supported OpenTracing interfaces
|
15
18
|
require "opentracing"
|
16
19
|
|
data/lib/instana/util.rb
CHANGED
@@ -39,24 +39,6 @@ module Instana
|
|
39
39
|
target_cls.send(:include, cls) if defined?(target_cls)
|
40
40
|
end
|
41
41
|
|
42
|
-
# Take two hashes, and make sure candidate does not have
|
43
|
-
# any of the same values as `last`. We only report
|
44
|
-
# when values change.
|
45
|
-
#
|
46
|
-
# Note this is not recursive, so only pass in the single
|
47
|
-
# hashes that you want delta reporting with.
|
48
|
-
#
|
49
|
-
def enforce_deltas(candidate, last)
|
50
|
-
return unless last.is_a?(Hash)
|
51
|
-
|
52
|
-
candidate.each do |k,v|
|
53
|
-
if candidate[k] == last[k]
|
54
|
-
candidate.delete(k)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
candidate
|
58
|
-
end
|
59
|
-
|
60
42
|
# Debugging helper method
|
61
43
|
#
|
62
44
|
def pry!
|
data/lib/instana/version.rb
CHANGED
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.0.
|
4
|
+
version: 1.0.3
|
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-01-
|
11
|
+
date: 2017-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -132,7 +132,7 @@ files:
|
|
132
132
|
- lib/instana.rb
|
133
133
|
- lib/instana/agent.rb
|
134
134
|
- lib/instana/base.rb
|
135
|
-
- lib/instana/
|
135
|
+
- lib/instana/collector.rb
|
136
136
|
- lib/instana/collectors/gc.rb
|
137
137
|
- lib/instana/collectors/memory.rb
|
138
138
|
- lib/instana/collectors/thread.rb
|
data/lib/instana/collectors.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'timers'
|
2
|
-
require 'instana/collectors/gc'
|
3
|
-
require 'instana/collectors/memory'
|
4
|
-
require 'instana/collectors/thread'
|
5
|
-
|
6
|
-
module Instana
|
7
|
-
module Collector
|
8
|
-
class << self
|
9
|
-
attr_accessor :interval
|
10
|
-
|
11
|
-
##
|
12
|
-
# collect_and_report
|
13
|
-
#
|
14
|
-
# Run through each collector, let them collect up
|
15
|
-
# data and then report what we have via the agent
|
16
|
-
#
|
17
|
-
# @return Boolean true on success
|
18
|
-
#
|
19
|
-
def collect_and_report
|
20
|
-
payload = {}
|
21
|
-
|
22
|
-
::Instana.collectors.each do |c|
|
23
|
-
metrics = c.collect
|
24
|
-
if metrics
|
25
|
-
payload[c.payload_key] = metrics
|
26
|
-
else
|
27
|
-
payload.delete(c.payload_key)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
if ENV['INSTANA_GEM_TEST']
|
32
|
-
true
|
33
|
-
else
|
34
|
-
# Report all the collected goodies
|
35
|
-
::Instana.agent.report_entity_data(payload)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
if ENV.key?('INSTANA_GEM_DEV')
|
43
|
-
::Instana::Collector.interval = 3
|
44
|
-
else
|
45
|
-
::Instana::Collector.interval = 1
|
46
|
-
end
|