app_perf_rpm 0.0.5 → 0.0.6

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