skylight 1.7.2 → 2.0.0.beta1
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 +4 -4
- data/CHANGELOG.md +4 -33
- data/ext/extconf.rb +32 -6
- data/ext/libskylight.yml +6 -9
- data/ext/skylight_native.c +49 -18
- data/lib/skylight.rb +35 -1
- data/lib/skylight/api.rb +4 -2
- data/lib/skylight/cli.rb +1 -1
- data/lib/skylight/cli/doctor.rb +6 -4
- data/lib/skylight/config.rb +149 -518
- data/lib/skylight/data/cacert.pem +236 -812
- data/lib/skylight/helpers.rb +5 -1
- data/lib/skylight/instrumenter.rb +10 -241
- data/lib/skylight/middleware.rb +1 -89
- data/lib/skylight/native.rb +8 -6
- data/lib/skylight/native_ext_fetcher.rb +251 -0
- data/lib/skylight/normalizers/active_job/enqueue_at.rb +2 -20
- data/lib/skylight/probes/sinatra_add_middleware.rb +22 -0
- data/lib/skylight/railtie.rb +11 -131
- data/lib/skylight/sinatra.rb +1 -5
- data/lib/skylight/trace.rb +1 -229
- data/lib/skylight/util/http.rb +3 -3
- data/lib/skylight/vendor/cli/thor/actions/directory.rb +5 -15
- data/lib/skylight/version.rb +1 -1
- metadata +114 -91
- data/lib/skylight/compat.rb +0 -76
- data/lib/skylight/core.rb +0 -149
- data/lib/skylight/deprecation.rb +0 -55
- data/lib/skylight/formatters/http.rb +0 -20
- data/lib/skylight/gc.rb +0 -107
- data/lib/skylight/normalizers.rb +0 -192
- data/lib/skylight/normalizers/action_controller/process_action.rb +0 -50
- data/lib/skylight/normalizers/action_controller/send_file.rb +0 -50
- data/lib/skylight/normalizers/action_view/render_collection.rb +0 -22
- data/lib/skylight/normalizers/action_view/render_partial.rb +0 -21
- data/lib/skylight/normalizers/action_view/render_template.rb +0 -21
- data/lib/skylight/normalizers/active_model_serializers/render.rb +0 -26
- data/lib/skylight/normalizers/active_record/instantiation.rb +0 -17
- data/lib/skylight/normalizers/active_record/sql.rb +0 -55
- data/lib/skylight/normalizers/active_support/cache.rb +0 -51
- data/lib/skylight/normalizers/active_support/cache_clear.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_decrement.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_delete.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_exist.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_fetch_hit.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_generate.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_increment.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_read.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_read_multi.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_write.rb +0 -16
- data/lib/skylight/normalizers/coach/handler_finish.rb +0 -36
- data/lib/skylight/normalizers/coach/middleware_finish.rb +0 -23
- data/lib/skylight/normalizers/couch_potato/query.rb +0 -20
- data/lib/skylight/normalizers/default.rb +0 -27
- data/lib/skylight/normalizers/elasticsearch/request.rb +0 -20
- data/lib/skylight/normalizers/faraday/request.rb +0 -38
- data/lib/skylight/normalizers/grape/endpoint.rb +0 -30
- data/lib/skylight/normalizers/grape/endpoint_render.rb +0 -26
- data/lib/skylight/normalizers/grape/endpoint_run.rb +0 -33
- data/lib/skylight/normalizers/grape/endpoint_run_filters.rb +0 -23
- data/lib/skylight/normalizers/moped/query.rb +0 -100
- data/lib/skylight/probes.rb +0 -129
- data/lib/skylight/probes/action_controller.rb +0 -64
- data/lib/skylight/probes/action_dispatch.rb +0 -30
- data/lib/skylight/probes/action_view.rb +0 -43
- data/lib/skylight/probes/active_model_serializers.rb +0 -55
- data/lib/skylight/probes/elasticsearch.rb +0 -37
- data/lib/skylight/probes/excon.rb +0 -26
- data/lib/skylight/probes/excon/middleware.rb +0 -68
- data/lib/skylight/probes/faraday.rb +0 -22
- data/lib/skylight/probes/grape.rb +0 -88
- data/lib/skylight/probes/httpclient.rb +0 -46
- data/lib/skylight/probes/middleware.rb +0 -68
- data/lib/skylight/probes/mongo.rb +0 -161
- data/lib/skylight/probes/mongoid.rb +0 -21
- data/lib/skylight/probes/moped.rb +0 -39
- data/lib/skylight/probes/net_http.rb +0 -58
- data/lib/skylight/probes/redis.rb +0 -71
- data/lib/skylight/probes/sequel.rb +0 -37
- data/lib/skylight/probes/sinatra.rb +0 -76
- data/lib/skylight/probes/tilt.rb +0 -31
- data/lib/skylight/subscriber.rb +0 -122
- data/lib/skylight/user_config.rb +0 -60
- data/lib/skylight/util.rb +0 -17
- data/lib/skylight/util/allocation_free.rb +0 -26
- data/lib/skylight/util/clock.rb +0 -54
- data/lib/skylight/util/deploy.rb +0 -132
- data/lib/skylight/util/gzip.rb +0 -21
- data/lib/skylight/util/inflector.rb +0 -112
- data/lib/skylight/util/logging.rb +0 -127
- data/lib/skylight/util/multi_io.rb +0 -21
- data/lib/skylight/util/native_ext_fetcher.rb +0 -253
- data/lib/skylight/util/platform.rb +0 -75
- data/lib/skylight/util/proxy.rb +0 -13
- data/lib/skylight/vendor/active_support/notifications.rb +0 -207
- data/lib/skylight/vendor/active_support/notifications/fanout.rb +0 -159
- data/lib/skylight/vendor/active_support/notifications/instrumenter.rb +0 -72
- data/lib/skylight/vendor/active_support/per_thread_registry.rb +0 -52
- data/lib/skylight/vendor/thread_safe.rb +0 -126
- data/lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb +0 -133
- data/lib/skylight/vendor/thread_safe/synchronized_cache_backend.rb +0 -76
- data/lib/skylight/vm/gc.rb +0 -70
data/lib/skylight/deprecation.rb
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
require 'active_support/deprecation'
|
|
2
|
-
|
|
3
|
-
module Skylight
|
|
4
|
-
SKYLIGHT_GEM_ROOT = File.expand_path("../../..", __FILE__) + "/"
|
|
5
|
-
|
|
6
|
-
if ActiveSupport::Deprecation.respond_to?(:new)
|
|
7
|
-
class Deprecation < ActiveSupport::Deprecation
|
|
8
|
-
private
|
|
9
|
-
|
|
10
|
-
def ignored_callstack(path)
|
|
11
|
-
path.start_with?(SKYLIGHT_GEM_ROOT)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
else
|
|
15
|
-
# Rails 3.x
|
|
16
|
-
class Deprecation
|
|
17
|
-
attr_accessor :silenced
|
|
18
|
-
attr_reader :deprecation_horizon, :gem_name
|
|
19
|
-
|
|
20
|
-
def initialize(deprecation_horizon, gem_name)
|
|
21
|
-
@deprecation_horizon = deprecation_horizon
|
|
22
|
-
@gem_name = gem_name
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Silence deprecation warnings within the block.
|
|
26
|
-
def silence
|
|
27
|
-
old_silenced, @silenced = @silenced, true
|
|
28
|
-
yield
|
|
29
|
-
ensure
|
|
30
|
-
@silenced = old_silenced
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def deprecation_warning(deprecated_method_name, message = nil)
|
|
34
|
-
return if silenced
|
|
35
|
-
|
|
36
|
-
msg = "#{deprecated_method_name} is deprecated and will be removed from #{gem_name} #{deprecation_horizon}"
|
|
37
|
-
case message
|
|
38
|
-
when Symbol then msg << " (use #{message} instead)"
|
|
39
|
-
when String then msg << " (#{message})"
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
ActiveSupport::Deprecation.warn(msg, extract_callstack(caller))
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
private
|
|
46
|
-
|
|
47
|
-
def extract_callstack(callstack)
|
|
48
|
-
filtered = callstack.reject { |line| line.start_with?(SKYLIGHT_GEM_ROOT) }
|
|
49
|
-
filtered.empty? ? callstack : filtered
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
DEPRECATOR = Deprecation.new('2.0', 'skylight')
|
|
55
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module Skylight
|
|
2
|
-
module Formatters
|
|
3
|
-
module HTTP
|
|
4
|
-
|
|
5
|
-
# Build instrumentation options for HTTP queries
|
|
6
|
-
#
|
|
7
|
-
# @param [String] method HTTP method, e.g. get, post
|
|
8
|
-
# @param [String] scheme HTTP scheme, e.g. http, https
|
|
9
|
-
# @param [String] host Request host, e.g. example.com
|
|
10
|
-
# @param [String, Integer] port Request port
|
|
11
|
-
# @param [String] path Request path
|
|
12
|
-
# @param [String] query Request query string
|
|
13
|
-
# @return [Hash] a hash containing `:category`, `:title`, and `:annotations`
|
|
14
|
-
def self.build_opts(method, scheme, host, port, path, query)
|
|
15
|
-
{ category: "api.http.#{method.downcase}",
|
|
16
|
-
title: "#{method.upcase} #{host}" }
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
data/lib/skylight/gc.rb
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
require 'thread'
|
|
2
|
-
|
|
3
|
-
module Skylight
|
|
4
|
-
# @api private
|
|
5
|
-
class GC
|
|
6
|
-
METHODS = [ :enable, :total_time ]
|
|
7
|
-
TH_KEY = :SK_GC_CURR_WINDOW
|
|
8
|
-
MAX_COUNT = 1000
|
|
9
|
-
MAX_TIME = 30_000_000
|
|
10
|
-
|
|
11
|
-
include Util::Logging
|
|
12
|
-
|
|
13
|
-
attr_reader :config
|
|
14
|
-
|
|
15
|
-
def initialize(config, profiler)
|
|
16
|
-
@listeners = []
|
|
17
|
-
@config = config
|
|
18
|
-
@lock = Mutex.new
|
|
19
|
-
@time = 0
|
|
20
|
-
|
|
21
|
-
if METHODS.all? { |m| profiler.respond_to?(m) }
|
|
22
|
-
@profiler = profiler
|
|
23
|
-
@time = @profiler.total_time
|
|
24
|
-
else
|
|
25
|
-
debug "disabling GC profiling"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def enable
|
|
30
|
-
@profiler.enable if @profiler
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def track
|
|
34
|
-
unless @profiler
|
|
35
|
-
win = Window.new(nil)
|
|
36
|
-
else
|
|
37
|
-
win = Window.new(self)
|
|
38
|
-
|
|
39
|
-
@lock.synchronize do
|
|
40
|
-
__update
|
|
41
|
-
@listeners << win
|
|
42
|
-
|
|
43
|
-
# Cleanup any listeners that might have leaked
|
|
44
|
-
until @listeners[0].time < MAX_TIME
|
|
45
|
-
@listeners.shift
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
if @listeners.length > MAX_COUNT
|
|
49
|
-
@listeners.shift
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
win
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def release(win)
|
|
58
|
-
@lock.synchronize do
|
|
59
|
-
@listeners.delete(win)
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def update
|
|
64
|
-
@lock.synchronize do
|
|
65
|
-
__update
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
nil
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
private
|
|
72
|
-
|
|
73
|
-
def __update
|
|
74
|
-
time = @profiler.total_time
|
|
75
|
-
diff = time - @time
|
|
76
|
-
@time = time
|
|
77
|
-
|
|
78
|
-
if diff > 0
|
|
79
|
-
@listeners.each do |l|
|
|
80
|
-
l.add(diff)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
class Window
|
|
86
|
-
attr_reader :time
|
|
87
|
-
|
|
88
|
-
def initialize(global)
|
|
89
|
-
@global = global
|
|
90
|
-
@time = 0
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def update
|
|
94
|
-
@global.update if @global
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def add(time)
|
|
98
|
-
@time += time
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def release
|
|
102
|
-
@global.release(self) if @global
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
end
|
|
107
|
-
end
|
data/lib/skylight/normalizers.rb
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
require 'skylight/normalizers/default'
|
|
2
|
-
|
|
3
|
-
module Skylight
|
|
4
|
-
# @api private
|
|
5
|
-
# Convert AS::N events to Skylight events
|
|
6
|
-
module Normalizers
|
|
7
|
-
|
|
8
|
-
DEFAULT = Default.new
|
|
9
|
-
|
|
10
|
-
def self.registry
|
|
11
|
-
@registry ||= {}
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def self.register(name, klass, opts)
|
|
15
|
-
enabled = opts[:enabled] != false
|
|
16
|
-
registry[name] = [klass, enabled]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def self.enable(*names)
|
|
20
|
-
names.each do |name|
|
|
21
|
-
matches = registry.select{|n,_| n =~ /(^|\.)#{name}$/ }
|
|
22
|
-
raise ArgumentError, "no normalizers match #{name}" if matches.empty?
|
|
23
|
-
matches.each{|k,v| v[1] = true }
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.build(config)
|
|
28
|
-
normalizers = {}
|
|
29
|
-
|
|
30
|
-
registry.each do |key, (klass, enabled)|
|
|
31
|
-
if !enabled
|
|
32
|
-
# For now we use anyway, but in 2.0 we'll stop using disabled normalizers
|
|
33
|
-
DEPRECATOR.deprecation_warning("Enabling non-default normalizers via `require`",
|
|
34
|
-
"use `Skylight.enable_normalizer('#{key}')` instead")
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
unless klass.method_defined?(:normalize)
|
|
38
|
-
# TODO: Warn
|
|
39
|
-
next
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
normalizers[key] = klass.new(config)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
Container.new(normalizers)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
class Normalizer
|
|
49
|
-
def self.register(name, opts={})
|
|
50
|
-
Normalizers.register(name, self, opts)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
attr_reader :config
|
|
54
|
-
|
|
55
|
-
def initialize(config)
|
|
56
|
-
@config = config
|
|
57
|
-
setup if respond_to?(:setup)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def normalize(trace, name, payload)
|
|
61
|
-
:skip
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def normalize_after(trace, span, name, payload)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# FIXME: Move this elsewhere
|
|
69
|
-
# Base Normalizer for Rails rendering
|
|
70
|
-
class RenderNormalizer < Normalizer
|
|
71
|
-
include Util::AllocationFree
|
|
72
|
-
|
|
73
|
-
def setup
|
|
74
|
-
@paths = config['normalizers.render.view_paths'] || []
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Generic normalizer for renders
|
|
78
|
-
# @param category [String]
|
|
79
|
-
# @param payload [Hash]
|
|
80
|
-
# @option payload [String] :identifier
|
|
81
|
-
# @return [Array]
|
|
82
|
-
def normalize_render(category, payload)
|
|
83
|
-
if path = payload[:identifier]
|
|
84
|
-
title = relative_path(path)
|
|
85
|
-
path = nil if path == title
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
[ category, title, nil ]
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def relative_path(path)
|
|
92
|
-
return path if relative_path?(path)
|
|
93
|
-
|
|
94
|
-
root = array_find(@paths) { |p| path.start_with?(p) }
|
|
95
|
-
type = :project
|
|
96
|
-
|
|
97
|
-
unless root
|
|
98
|
-
root = array_find(Gem.path) { |p| path.start_with?(p) }
|
|
99
|
-
type = :gem
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
if root
|
|
103
|
-
start = root.size
|
|
104
|
-
start += 1 if path.getbyte(start) == SEPARATOR_BYTE
|
|
105
|
-
if type == :gem
|
|
106
|
-
"$GEM_PATH/#{path[start, path.size]}"
|
|
107
|
-
else
|
|
108
|
-
path[start, path.size]
|
|
109
|
-
end
|
|
110
|
-
else
|
|
111
|
-
"Absolute Path"
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
private
|
|
116
|
-
def relative_path?(path)
|
|
117
|
-
!absolute_path?(path)
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
SEPARATOR_BYTE = File::SEPARATOR.ord
|
|
121
|
-
|
|
122
|
-
if File.const_defined?(:NULL) ? File::NULL == "NUL" : RbConfig::CONFIG['host_os'] =~ /mingw|mswin32/
|
|
123
|
-
# This is a DOSish environment
|
|
124
|
-
ALT_SEPARATOR_BYTE = File::ALT_SEPARATOR && File::ALT_SEPARATOR.ord
|
|
125
|
-
COLON_BYTE = ":".ord
|
|
126
|
-
def absolute_path?(path)
|
|
127
|
-
if alpha?(path.getbyte(0)) && path.getbyte(1) == COLON_BYTE
|
|
128
|
-
byte2 = path.getbyte(2)
|
|
129
|
-
byte2 == SEPARATOR_BYTE || byte2 == ALT_SEPARATOR_BYTE
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def alpha?(byte)
|
|
134
|
-
byte >= 65 and byte <= 90 || byte >= 97 and byte <= 122
|
|
135
|
-
end
|
|
136
|
-
else
|
|
137
|
-
def absolute_path?(path)
|
|
138
|
-
path.getbyte(0) == SEPARATOR_BYTE
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
class Container
|
|
144
|
-
def initialize(normalizers)
|
|
145
|
-
@normalizers = normalizers
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def keys
|
|
149
|
-
@normalizers.keys
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def normalize(trace, name, payload)
|
|
153
|
-
normalizer_for(name).normalize(trace, name, payload)
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def normalize_after(trace, span, name, payload)
|
|
157
|
-
normalizer_for(name).normalize_after(trace, span, name, payload)
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
def normalizer_for(name)
|
|
161
|
-
@normalizers[name] || DEFAULT
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
%w( action_controller/process_action
|
|
166
|
-
action_controller/send_file
|
|
167
|
-
action_view/render_collection
|
|
168
|
-
action_view/render_partial
|
|
169
|
-
action_view/render_template
|
|
170
|
-
active_model_serializers/render
|
|
171
|
-
active_record/instantiation
|
|
172
|
-
active_record/sql
|
|
173
|
-
active_support/cache
|
|
174
|
-
elasticsearch/request
|
|
175
|
-
grape/endpoint
|
|
176
|
-
moped/query
|
|
177
|
-
faraday/request
|
|
178
|
-
couch_potato/query).each do |file|
|
|
179
|
-
require "skylight/normalizers/#{file}"
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
# Coach instrumentation is only available in Ruby 2+
|
|
183
|
-
if RUBY_VERSION.split.first.to_i > 1
|
|
184
|
-
%w(coach/handler_finish coach/middleware_finish).each do |file|
|
|
185
|
-
require "skylight/normalizers/#{file}"
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
# The following are not required by default as they are of dubious usefulness:
|
|
190
|
-
# - active_job/enqueue_at
|
|
191
|
-
end
|
|
192
|
-
end
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
module Skylight
|
|
2
|
-
module Normalizers
|
|
3
|
-
module ActionController
|
|
4
|
-
# Normalizer for processing a Rails controller action
|
|
5
|
-
class ProcessAction < Normalizer
|
|
6
|
-
register "process_action.action_controller"
|
|
7
|
-
|
|
8
|
-
CAT = "app.controller.request".freeze
|
|
9
|
-
|
|
10
|
-
# Payload Keys: controller, action, params, format, method, path
|
|
11
|
-
# Additional keys available in `normalize_after`: status, view_runtime
|
|
12
|
-
# Along with ones added by probe: variant
|
|
13
|
-
|
|
14
|
-
# @param trace [Skylight::Messages::Trace::Builder]
|
|
15
|
-
# @param name [String] ignored, only present to match API
|
|
16
|
-
# @param payload [Hash]
|
|
17
|
-
# @option payload [String] :controller Controller name
|
|
18
|
-
# @option payload [String] :action Action name
|
|
19
|
-
# @return [Array]
|
|
20
|
-
def normalize(trace, name, payload)
|
|
21
|
-
trace.endpoint = controller_action(payload)
|
|
22
|
-
[ CAT, trace.endpoint, nil ]
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def normalize_after(trace, span, name, payload)
|
|
26
|
-
return unless config.enable_segments?
|
|
27
|
-
|
|
28
|
-
# Show 'error' if there's an unhandled exception or if the status is 4xx or 5xx
|
|
29
|
-
if payload[:exception] || payload[:status].to_s =~ /^[45]/
|
|
30
|
-
segment = "error"
|
|
31
|
-
# We won't have a rendered_format if it's a `head` outside of a `respond_to` block.
|
|
32
|
-
elsif payload[:rendered_format]
|
|
33
|
-
# We only show the variant if we actually have a format
|
|
34
|
-
segment = [payload[:rendered_format], payload[:variant]].compact.flatten.join('+')
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
if segment
|
|
38
|
-
trace.endpoint += "<sk-segment>#{segment}</sk-segment>"
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def controller_action(payload)
|
|
45
|
-
"#{payload[:controller]}##{payload[:action]}"
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
module Skylight
|
|
2
|
-
module Normalizers
|
|
3
|
-
module ActionController
|
|
4
|
-
|
|
5
|
-
# Temporary hacks
|
|
6
|
-
begin
|
|
7
|
-
require "action_dispatch/http/mime_type"
|
|
8
|
-
require "action_dispatch/http/mime_types"
|
|
9
|
-
require "rack/utils"
|
|
10
|
-
|
|
11
|
-
class SendFile < Normalizer
|
|
12
|
-
register "send_file.action_controller"
|
|
13
|
-
|
|
14
|
-
CAT = "app.controller.send_file".freeze
|
|
15
|
-
TITLE = "send file".freeze
|
|
16
|
-
|
|
17
|
-
def normalize(trace, name, payload)
|
|
18
|
-
path = payload[:path]
|
|
19
|
-
|
|
20
|
-
title = TITLE
|
|
21
|
-
|
|
22
|
-
# depending on normalization, we probably want this to eventually
|
|
23
|
-
# include the full path, but we need to make sure we have a good
|
|
24
|
-
# deduping strategy first.
|
|
25
|
-
desc = nil
|
|
26
|
-
|
|
27
|
-
[ CAT, title, desc ]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
OCTET_STREAM = "application/octet-stream".freeze
|
|
33
|
-
ATTACHMENT = "attachment".freeze
|
|
34
|
-
|
|
35
|
-
def initialize(*)
|
|
36
|
-
super
|
|
37
|
-
|
|
38
|
-
@mimes = Mime::SET.reduce({}) do |hash, mime|
|
|
39
|
-
hash[mime.symbol] = mime.to_s.dup.freeze
|
|
40
|
-
hash
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
rescue LoadError
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|