app_perf_rpm 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/app_perf_rpm/backtrace.rb +7 -7
  3. data/lib/app_perf_rpm/configuration.rb +6 -4
  4. data/lib/app_perf_rpm/instruments/action_controller.rb +33 -16
  5. data/lib/app_perf_rpm/instruments/action_view.rb +93 -65
  6. data/lib/app_perf_rpm/instruments/active_record/adapters/mysql2.rb +24 -15
  7. data/lib/app_perf_rpm/instruments/active_record/adapters/postgresql.rb +95 -52
  8. data/lib/app_perf_rpm/instruments/active_record/adapters/sqlite3.rb +95 -54
  9. data/lib/app_perf_rpm/instruments/active_record.rb +1 -1
  10. data/lib/app_perf_rpm/instruments/activerecord_import.rb +22 -13
  11. data/lib/app_perf_rpm/instruments/emque_consuming.rb +16 -7
  12. data/lib/app_perf_rpm/instruments/faraday.rb +26 -16
  13. data/lib/app_perf_rpm/instruments/net_http.rb +16 -10
  14. data/lib/app_perf_rpm/instruments/rack.rb +75 -25
  15. data/lib/app_perf_rpm/instruments/redis.rb +49 -13
  16. data/lib/app_perf_rpm/instruments/sequel.rb +36 -28
  17. data/lib/app_perf_rpm/instruments/sidekiq.rb +65 -21
  18. data/lib/app_perf_rpm/instruments/sinatra.rb +34 -20
  19. data/lib/app_perf_rpm/instruments/typhoeus.rb +40 -21
  20. data/lib/app_perf_rpm/rails.rb +2 -1
  21. data/lib/app_perf_rpm/railtie.rb +4 -4
  22. data/lib/app_perf_rpm/reporters/json_client.rb +69 -0
  23. data/lib/app_perf_rpm/reporters/null_client.rb +14 -0
  24. data/lib/app_perf_rpm/tracer.rb +20 -89
  25. data/lib/app_perf_rpm/tracing/buffer.rb +25 -0
  26. data/lib/app_perf_rpm/tracing/carrier.rb +23 -0
  27. data/lib/app_perf_rpm/tracing/collector.rb +31 -0
  28. data/lib/app_perf_rpm/tracing/endpoint.rb +19 -0
  29. data/lib/app_perf_rpm/tracing/managed_span.rb +36 -0
  30. data/lib/app_perf_rpm/tracing/managed_tracer.rb +32 -0
  31. data/lib/app_perf_rpm/tracing/span.rb +67 -0
  32. data/lib/app_perf_rpm/tracing/span_context.rb +41 -0
  33. data/lib/app_perf_rpm/tracing/thread_span_stack.rb +32 -0
  34. data/lib/app_perf_rpm/tracing/trace_id.rb +11 -0
  35. data/lib/app_perf_rpm/tracing/tracer.rb +91 -0
  36. data/lib/app_perf_rpm/utils.rb +18 -0
  37. data/lib/app_perf_rpm.rb +59 -26
  38. metadata +90 -12
  39. data/lib/app_perf_rpm/aggregator.rb +0 -77
  40. data/lib/app_perf_rpm/dispatcher.rb +0 -85
  41. data/lib/app_perf_rpm/middleware.rb +0 -30
  42. data/lib/app_perf_rpm/span.rb +0 -103
  43. data/lib/app_perf_rpm/worker.rb +0 -46
@@ -0,0 +1,31 @@
1
+ module AppPerfRpm
2
+ module Tracing
3
+ class Collector
4
+ attr_reader :buffer
5
+
6
+ def initialize(local_endpoint)
7
+ @buffer = Buffer.new
8
+ @local_endpoint = local_endpoint
9
+ end
10
+
11
+ def retrieve
12
+ @buffer.retrieve
13
+ end
14
+
15
+ def send_span(span, end_time)
16
+ duration = end_time - span.start_time
17
+
18
+ @buffer << {
19
+ "traceId" => span.context.trace_id,
20
+ "id" => span.context.span_id,
21
+ "parentId" => span.context.parent_id,
22
+ "name" => span.operation_name,
23
+ "timestamp" => span.start_time,
24
+ "duration" => duration * 1_000,
25
+ "logEntries" => span.log_entries,
26
+ "tags" => span.tags
27
+ }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ require 'socket'
2
+
3
+ module AppPerfRpm
4
+ module Tracing
5
+ class Endpoint
6
+ LOCAL_IP = (
7
+ Socket.ip_address_list.detect(&:ipv4_private?) ||
8
+ Socket.ip_address_list.reverse.detect(&:ipv4?)
9
+ ).ip_address
10
+
11
+ def self.local_endpoint(service_name)
12
+ {
13
+ "serviceName" => service_name,
14
+ "ipv4" => LOCAL_IP
15
+ }
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,36 @@
1
+ module AppPerfRpm
2
+ module Tracing
3
+ class ManagedSpan < Span
4
+ extend Forwardable
5
+
6
+ def_delegators :@span, :context, :operation_name=, :set_tag, :set_baggage_item, :get_baggage_item, :log, :finish
7
+
8
+ def initialize(span, deactivate)
9
+ @span = span
10
+ @deactivate = deactivate.respond_to?(:call) ? deactivate : nil
11
+ @active = true
12
+ end
13
+
14
+ def wrapped
15
+ @span
16
+ end
17
+
18
+ def active?
19
+ @active
20
+ end
21
+
22
+ def deactivate
23
+ if @active && @deactivate
24
+ deactivated_span = @deactivate.call
25
+ warn "ActiveSpan::SpanSource inconsistency found during deactivation" unless deactivated_span == self
26
+ @active = false
27
+ end
28
+ end
29
+
30
+ def finish(end_time: AppPerfRpm.now)
31
+ deactivate
32
+ @span.finish(end_time: end_time)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,32 @@
1
+ module AppPerfRpm
2
+ module Tracing
3
+ class ManagedTracer < OpenTracing::Tracer
4
+ extend Forwardable
5
+ def_delegators :@tracer, :inject, :extract
6
+
7
+ attr_reader :thread_span_stack
8
+
9
+ def initialize(tracer, thread_span_stack = ThreadSpanStack.new)
10
+ @tracer = tracer
11
+ @thread_span_stack = thread_span_stack
12
+ end
13
+
14
+ def wrapped
15
+ @tracer
16
+ end
17
+
18
+ def collector
19
+ @tracer.collector
20
+ end
21
+
22
+ def active_span
23
+ thread_span_stack.active_span
24
+ end
25
+
26
+ def start_span(operation_name, child_of: active_span, **args)
27
+ span = @tracer.start_span(operation_name, child_of: child_of, **args)
28
+ @thread_span_stack.set_active_span(span)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,67 @@
1
+ module AppPerfRpm
2
+ module Tracing
3
+ class Span
4
+ attr_accessor :operation_name
5
+
6
+ attr_reader :context, :start_time, :end_time, :tags, :log_entries
7
+ def initialize(context, operation_name, collector, start_time: AppPerfRpm.now, tags: {})
8
+ @context = context
9
+ @operation_name = operation_name
10
+ @collector = collector
11
+ @start_time = start_time
12
+ @end_time = nil
13
+ @tags = tags
14
+ @log_entries = []
15
+ end
16
+
17
+ def set_tag(key, value)
18
+ @tags = @tags.merge(key => value)
19
+ end
20
+
21
+ def add_tags(tags)
22
+ tags.each_pair do |key, value|
23
+ set_tag(key, value)
24
+ end
25
+ end
26
+
27
+ def set_baggage_item(key, value)
28
+ @context.set_baggage_item(key, value)
29
+ end
30
+
31
+ def get_baggage_item(key)
32
+ @context.get_baggage_item(key)
33
+ end
34
+
35
+ def log(event: nil, timestamp: AppPerfRpm.now, **fields)
36
+ entry = {
37
+ "event" => event,
38
+ "timestamp" => timestamp,
39
+ }
40
+
41
+ entry["fields"] = fields if fields
42
+ @log_entries << entry
43
+
44
+ nil
45
+ end
46
+
47
+ def log_error(exception, timestamp: AppPerfRpm.now)
48
+ log(
49
+ event: "error",
50
+ timestamp: timestamp,
51
+ message: exception.message,
52
+ error_class: exception.class.to_s,
53
+ backtrace: AppPerfRpm::Backtrace.clean(exception.backtrace),
54
+ source: AppPerfRpm::Backtrace.source_extract(exception.backtrace)
55
+ )
56
+ end
57
+
58
+ def exit(end_time: AppPerfRpm.now)
59
+ @end_time = end_time
60
+ end
61
+
62
+ def finish(end_time: AppPerfRpm.now)
63
+ @collector.send_span(self, @end_time || end_time)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,41 @@
1
+ module AppPerfRpm
2
+ module Tracing
3
+ class SpanContext
4
+ def self.create_parent_context
5
+ trace_id = TraceId.generate
6
+ new(trace_id: trace_id, span_id: trace_id, sampled: true)
7
+ end
8
+
9
+ def self.create_from_parent_context(span_context)
10
+ new(
11
+ span_id: TraceId.generate,
12
+ parent_id: span_context.span_id,
13
+ trace_id: span_context.trace_id,
14
+ sampled: span_context.sampled?
15
+ )
16
+ end
17
+
18
+ attr_reader :span_id, :parent_id, :trace_id, :baggage
19
+
20
+ def initialize(span_id:, parent_id: nil, trace_id:, sampled:, baggage: {})
21
+ @span_id = span_id
22
+ @parent_id = parent_id
23
+ @trace_id = trace_id
24
+ @sampled = sampled
25
+ @baggage = baggage
26
+ end
27
+
28
+ def set_baggage_item(key, value)
29
+ baggage[key] = value
30
+ end
31
+
32
+ def get_baggage_item(key)
33
+ baggage[key]
34
+ end
35
+
36
+ def sampled?
37
+ @sampled
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module AppPerfRpm
2
+ module Tracing
3
+ class ThreadSpanStack
4
+ def set_active_span(span)
5
+ active_span = ManagedSpan.new(span, method(:pop))
6
+ push(active_span)
7
+ active_span
8
+ end
9
+
10
+ def active_span
11
+ local_stack.last
12
+ end
13
+
14
+ def clear
15
+ local_stack.clear
16
+ end
17
+
18
+ private
19
+ def push(span)
20
+ local_stack << span
21
+ end
22
+
23
+ def pop
24
+ local_stack.pop
25
+ end
26
+
27
+ def local_stack
28
+ Thread.current[:__active_span__] ||= []
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ module AppPerfRpm
2
+ module Tracing
3
+ module TraceId
4
+ TRACE_ID_UPPER_BOUND = 2 ** 64
5
+
6
+ def self.generate
7
+ rand(TRACE_ID_UPPER_BOUND).to_s(16)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,91 @@
1
+ require 'opentracing'
2
+
3
+ module AppPerfRpm
4
+ module Tracing
5
+ class Tracer
6
+ attr_reader :thread_span_stack, :collector
7
+
8
+ def self.build(collector:, sender:, service_name:)
9
+ sender.start
10
+ new(collector, sender)
11
+ end
12
+
13
+ def initialize(collector, sender)
14
+ @collector = collector
15
+ @sender = sender
16
+ end
17
+
18
+ def stop
19
+ @sender.stop
20
+ end
21
+
22
+ def start_span(operation_name, child_of: nil, start_time: AppPerfRpm.now, tags: {}, **)
23
+ context =
24
+ if child_of
25
+ parent_context = child_of.respond_to?(:context) ? child_of.context : child_of
26
+ SpanContext.create_from_parent_context(parent_context)
27
+ else
28
+ SpanContext.create_parent_context
29
+ end
30
+
31
+ span = Span.new(context, operation_name, @collector, {
32
+ start_time: start_time,
33
+ tags: tags
34
+ })
35
+ end
36
+
37
+ def inject(span_context, format, carrier)
38
+ case format
39
+ when OpenTracing::FORMAT_TEXT_MAP
40
+ carrier['trace-id'] = span_context.trace_id
41
+ carrier['parent-id'] = span_context.parent_id
42
+ carrier['span-id'] = span_context.span_id
43
+ carrier['sampled'] = span_context.sampled? ? '1' : '0'
44
+ when OpenTracing::FORMAT_RACK
45
+ carrier['X-AppPerf-TraceId'] = span_context.trace_id
46
+ carrier['X-AppPerf-ParentSpanId'] = span_context.parent_id
47
+ carrier['X-AppPerf-SpanId'] = span_context.span_id
48
+ carrier['X-AppPerf-Sampled'] = span_context.sampled? ? '1' : '0'
49
+ else
50
+ STDERR.puts "AppPerfRpm::Tracer with format #{format} is not supported yet"
51
+ end
52
+ end
53
+
54
+ def extract(format, carrier)
55
+ case format
56
+ when OpenTracing::FORMAT_TEXT_MAP
57
+ trace_id = carrier['trace-id']
58
+ parent_id = carrier['parent-id']
59
+ span_id = carrier['span-id']
60
+ sampled = carrier['sampled'] == '1'
61
+
62
+ create_span_context(trace_id, span_id, parent_id, sampled)
63
+ when OpenTracing::FORMAT_RACK
64
+ trace_id = carrier['HTTP_X_APPPERF_TRACEID']
65
+ parent_id = carrier['HTTP_X_APPPERF_PARENTSPANID']
66
+ span_id = carrier['HTTP_X_APPPERF_SPANID']
67
+ sampled = carrier['HTTP_X_APPPERF_SAMPLED'] == '1'
68
+
69
+ create_span_context(trace_id, span_id, parent_id, sampled)
70
+ else
71
+ STDERR.puts "AppPerfRpm::Tracer with format #{format} is not supported yet"
72
+ nil
73
+ end
74
+ end
75
+
76
+ private
77
+ def create_span_context(trace_id, span_id, parent_id, sampled)
78
+ if trace_id && span_id
79
+ SpanContext.new(
80
+ trace_id: trace_id,
81
+ parent_id: parent_id,
82
+ span_id: span_id,
83
+ sampled: sampled
84
+ )
85
+ else
86
+ nil
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -5,5 +5,23 @@ module AppPerfRpm
5
5
  def sanitize_sql(sql, adapter)
6
6
  sql.gsub(REGEXP, '?')
7
7
  end
8
+
9
+ def connection_config
10
+ @connection_config ||= if ::ActiveRecord::VERSION::MAJOR == 2
11
+ ActiveRecord::Base.connection.instance_variable_get(:@config)
12
+ else
13
+ ::ActiveRecord::Base.connection_config
14
+ end
15
+ end
16
+
17
+ def format_redis(command)
18
+ command.is_a?(Symbol) ? command.to_s.upcase : command.to_s
19
+ rescue StandardError => e
20
+ "?"
21
+ end
22
+
23
+ def format_redis_command(command)
24
+ command.map { |x| format_redis(x) }.join(' ')
25
+ end
8
26
  end
9
27
  end
data/lib/app_perf_rpm.rb CHANGED
@@ -3,55 +3,84 @@ require 'oj'
3
3
  module AppPerfRpm
4
4
  require 'app_perf_rpm/logger'
5
5
  require 'app_perf_rpm/configuration'
6
- require 'app_perf_rpm/span'
7
- require 'app_perf_rpm/aggregator'
8
- require 'app_perf_rpm/dispatcher'
9
- require 'app_perf_rpm/worker'
10
6
  require 'app_perf_rpm/backtrace'
7
+
8
+ require 'app_perf_rpm/reporters/json_client'
9
+ require 'app_perf_rpm/reporters/null_client'
10
+
11
+ require 'app_perf_rpm/tracing/buffer'
12
+ require 'app_perf_rpm/tracing/carrier'
13
+ require 'app_perf_rpm/tracing/collector'
14
+ require 'app_perf_rpm/tracing/endpoint'
15
+ require 'app_perf_rpm/tracing/trace_id'
16
+ require 'app_perf_rpm/tracing/span_context'
17
+ require 'app_perf_rpm/tracing/span'
18
+ require 'app_perf_rpm/tracing/managed_span'
19
+ require 'app_perf_rpm/tracing/tracer'
20
+ require 'app_perf_rpm/tracing/managed_tracer'
21
+ require 'app_perf_rpm/tracing/thread_span_stack'
22
+
11
23
  require 'app_perf_rpm/tracer'
12
24
  require 'app_perf_rpm/utils'
13
- require 'app_perf_rpm/middleware'
14
25
  require 'app_perf_rpm/instrumentation'
15
26
  require 'app_perf_rpm/rails'
16
27
  require 'app_perf_rpm/introspector'
17
28
 
29
+ TRACE_CONTEXT_KEY = 'AppPerf-Trace-Context'
30
+
18
31
  class << self
19
- attr_writer :configuration
20
32
 
21
- def configuration
22
- @configuration ||= Configuration.new
33
+ attr_writer :config
34
+
35
+ def config
36
+ @config ||= Configuration.new
23
37
  end
24
38
 
25
39
  def configure
26
- yield(configuration)
40
+ yield(config)
27
41
  end
28
42
 
29
43
  def load
30
44
  #Oj.mimic_JSON
31
45
  unless disable_agent?
32
46
  AppPerfRpm::Instrumentation.load
33
- @worker = ::AppPerfRpm::Worker.new
34
-
35
- if @worker.start
36
- @worker_running = true
37
- AppPerfRpm.tracing_on
38
- end
47
+ AppPerfRpm.tracing_on
39
48
  end
40
49
  end
41
50
 
42
- def worker
43
- @worker
44
- end
45
-
46
51
  def mutex
47
52
  @mutex ||= Mutex.new
48
53
  end
49
54
 
50
- def store(event)
51
- if @worker_running && tracing?
52
- @worker.save(event)
53
- end
54
- event
55
+ def endpoint
56
+ @endpoint ||= AppPerfRpm::Tracing::Endpoint.local_endpoint(config.application_name)
57
+ end
58
+
59
+ def collector
60
+ @collector ||= AppPerfRpm::Tracing::Collector.new(endpoint)
61
+ end
62
+
63
+ def url
64
+ @url ||= "#{config.host}/api/listener/3/#{config.license_key}"
65
+ end
66
+
67
+ def sender
68
+ @sender ||= AppPerfRpm::Reporters::JsonClient.new(
69
+ url: url,
70
+ collector: collector,
71
+ flush_interval: config.flush_interval
72
+ )
73
+ end
74
+
75
+ def tracer
76
+ @tracer ||= AppPerfRpm::Tracing::ManagedTracer.new(
77
+ AppPerfRpm::Tracing::Tracer.build(
78
+ :service_name => config.application_name,
79
+ :sender => sender,
80
+ :collector => collector
81
+ ),
82
+ AppPerfRpm::Tracing::ThreadSpanStack.new
83
+ )
55
84
  end
56
85
 
57
86
  def tracing_on
@@ -73,7 +102,7 @@ module AppPerfRpm
73
102
  end
74
103
 
75
104
  def tracing?
76
- @tracing
105
+ !!@tracing
77
106
  end
78
107
 
79
108
  def without_tracing
@@ -111,7 +140,7 @@ module AppPerfRpm
111
140
  end
112
141
 
113
142
  def disable_agent?
114
- if configuration.agent_disabled
143
+ if config.agent_disabled
115
144
  true
116
145
  elsif Introspector.agentable?
117
146
  false
@@ -120,5 +149,9 @@ module AppPerfRpm
120
149
  end
121
150
  end
122
151
 
152
+ def now
153
+ Process.clock_gettime(Process::CLOCK_REALTIME)
154
+ end
155
+
123
156
  end
124
157
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_perf_rpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Randy Girard
@@ -10,6 +10,34 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2016-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oj
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: opentracing
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.3.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.3.1
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: rake
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +95,61 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: 0.12.0
69
97
  - !ruby/object:Gem::Dependency
70
- name: oj
98
+ name: rails
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - '='
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
- version: 3.3.2
76
- type: :runtime
103
+ version: '0'
104
+ type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - '='
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: actionpack
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: activesupport
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
81
151
  - !ruby/object:Gem::Version
82
- version: 3.3.2
152
+ version: '0'
83
153
  description: Ruby Agent for the AppPerf app.
84
154
  email: rgirard59@yahoo.com
85
155
  executables: []
@@ -87,10 +157,8 @@ extensions: []
87
157
  extra_rdoc_files: []
88
158
  files:
89
159
  - lib/app_perf_rpm.rb
90
- - lib/app_perf_rpm/aggregator.rb
91
160
  - lib/app_perf_rpm/backtrace.rb
92
161
  - lib/app_perf_rpm/configuration.rb
93
- - lib/app_perf_rpm/dispatcher.rb
94
162
  - lib/app_perf_rpm/instrumentation.rb
95
163
  - lib/app_perf_rpm/instruments/action_controller.rb
96
164
  - lib/app_perf_rpm/instruments/action_view.rb
@@ -110,13 +178,23 @@ files:
110
178
  - lib/app_perf_rpm/instruments/typhoeus.rb
111
179
  - lib/app_perf_rpm/introspector.rb
112
180
  - lib/app_perf_rpm/logger.rb
113
- - lib/app_perf_rpm/middleware.rb
114
181
  - lib/app_perf_rpm/rails.rb
115
182
  - lib/app_perf_rpm/railtie.rb
116
- - lib/app_perf_rpm/span.rb
183
+ - lib/app_perf_rpm/reporters/json_client.rb
184
+ - lib/app_perf_rpm/reporters/null_client.rb
117
185
  - lib/app_perf_rpm/tracer.rb
186
+ - lib/app_perf_rpm/tracing/buffer.rb
187
+ - lib/app_perf_rpm/tracing/carrier.rb
188
+ - lib/app_perf_rpm/tracing/collector.rb
189
+ - lib/app_perf_rpm/tracing/endpoint.rb
190
+ - lib/app_perf_rpm/tracing/managed_span.rb
191
+ - lib/app_perf_rpm/tracing/managed_tracer.rb
192
+ - lib/app_perf_rpm/tracing/span.rb
193
+ - lib/app_perf_rpm/tracing/span_context.rb
194
+ - lib/app_perf_rpm/tracing/thread_span_stack.rb
195
+ - lib/app_perf_rpm/tracing/trace_id.rb
196
+ - lib/app_perf_rpm/tracing/tracer.rb
118
197
  - lib/app_perf_rpm/utils.rb
119
- - lib/app_perf_rpm/worker.rb
120
198
  - lib/tasks/install.rake
121
199
  homepage: https://www.github.com/randy-girard/app_perf_rpm
122
200
  licenses: