skylight 4.3.2 → 5.1.1
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 +399 -336
- data/CLA.md +1 -1
- data/CONTRIBUTING.md +2 -8
- data/LICENSE.md +7 -17
- data/README.md +1 -1
- data/ext/extconf.rb +45 -56
- data/ext/libskylight.yml +10 -6
- data/ext/skylight_native.c +22 -99
- data/lib/skylight.rb +201 -14
- data/lib/skylight/api.rb +32 -21
- data/lib/skylight/cli.rb +48 -46
- data/lib/skylight/cli/doctor.rb +62 -63
- data/lib/skylight/cli/helpers.rb +19 -19
- data/lib/skylight/cli/merger.rb +142 -138
- data/lib/skylight/config.rb +634 -199
- data/lib/skylight/deprecation.rb +17 -0
- data/lib/skylight/errors.rb +23 -9
- data/lib/skylight/extensions.rb +95 -0
- data/lib/skylight/extensions/source_location.rb +291 -0
- data/lib/skylight/formatters/http.rb +18 -0
- data/lib/skylight/gc.rb +99 -0
- data/lib/skylight/helpers.rb +81 -36
- data/lib/skylight/instrumenter.rb +336 -18
- data/lib/skylight/middleware.rb +134 -1
- data/lib/skylight/native.rb +60 -12
- data/lib/skylight/native_ext_fetcher.rb +13 -14
- data/lib/skylight/normalizers.rb +157 -0
- data/lib/skylight/normalizers/action_controller/process_action.rb +68 -0
- data/lib/skylight/normalizers/action_controller/send_file.rb +51 -0
- data/lib/skylight/normalizers/action_dispatch/process_middleware.rb +22 -0
- data/lib/skylight/normalizers/action_dispatch/route_set.rb +27 -0
- data/lib/skylight/normalizers/action_view/render_collection.rb +24 -0
- data/lib/skylight/normalizers/action_view/render_layout.rb +25 -0
- data/lib/skylight/normalizers/action_view/render_partial.rb +23 -0
- data/lib/skylight/normalizers/action_view/render_template.rb +23 -0
- data/lib/skylight/normalizers/active_job/perform.rb +90 -0
- data/lib/skylight/normalizers/active_model_serializers/render.rb +32 -0
- data/lib/skylight/normalizers/active_record/instantiation.rb +16 -0
- data/lib/skylight/normalizers/active_record/sql.rb +12 -0
- data/lib/skylight/normalizers/active_storage.rb +28 -0
- data/lib/skylight/normalizers/active_support/cache.rb +11 -0
- data/lib/skylight/normalizers/active_support/cache_clear.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_decrement.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_delete.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_exist.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_fetch_hit.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_generate.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_increment.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_read.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_read_multi.rb +16 -0
- data/lib/skylight/normalizers/active_support/cache_write.rb +16 -0
- data/lib/skylight/normalizers/coach/handler_finish.rb +44 -0
- data/lib/skylight/normalizers/coach/middleware_finish.rb +33 -0
- data/lib/skylight/normalizers/couch_potato/query.rb +20 -0
- data/lib/skylight/normalizers/data_mapper/sql.rb +12 -0
- data/lib/skylight/normalizers/default.rb +24 -0
- data/lib/skylight/normalizers/elasticsearch/request.rb +20 -0
- data/lib/skylight/normalizers/faraday/request.rb +38 -0
- data/lib/skylight/normalizers/grape/endpoint.rb +28 -0
- data/lib/skylight/normalizers/grape/endpoint_render.rb +25 -0
- data/lib/skylight/normalizers/grape/endpoint_run.rb +39 -0
- data/lib/skylight/normalizers/grape/endpoint_run_filters.rb +20 -0
- data/lib/skylight/normalizers/grape/format_response.rb +20 -0
- data/lib/skylight/normalizers/graphiti/render.rb +22 -0
- data/lib/skylight/normalizers/graphiti/resolve.rb +31 -0
- data/lib/skylight/normalizers/graphql/base.rb +127 -0
- data/lib/skylight/normalizers/render.rb +79 -0
- data/lib/skylight/normalizers/sequel/sql.rb +12 -0
- data/lib/skylight/normalizers/shrine.rb +32 -0
- data/lib/skylight/normalizers/sql.rb +45 -0
- data/lib/skylight/probes.rb +173 -0
- data/lib/skylight/probes/action_controller.rb +52 -0
- data/lib/skylight/probes/action_dispatch.rb +2 -0
- data/lib/skylight/probes/action_dispatch/request_id.rb +33 -0
- data/lib/skylight/probes/action_dispatch/routing/route_set.rb +30 -0
- data/lib/skylight/probes/action_view.rb +42 -0
- data/lib/skylight/probes/active_job.rb +27 -0
- data/lib/skylight/probes/active_job_enqueue.rb +35 -0
- data/lib/skylight/probes/active_model_serializers.rb +50 -0
- data/lib/skylight/probes/delayed_job.rb +144 -0
- data/lib/skylight/probes/elasticsearch.rb +36 -0
- data/lib/skylight/probes/excon.rb +25 -0
- data/lib/skylight/probes/excon/middleware.rb +65 -0
- data/lib/skylight/probes/faraday.rb +23 -0
- data/lib/skylight/probes/graphql.rb +38 -0
- data/lib/skylight/probes/httpclient.rb +44 -0
- data/lib/skylight/probes/middleware.rb +135 -0
- data/lib/skylight/probes/mongo.rb +156 -0
- data/lib/skylight/probes/mongoid.rb +13 -0
- data/lib/skylight/probes/net_http.rb +54 -0
- data/lib/skylight/probes/redis.rb +51 -0
- data/lib/skylight/probes/sequel.rb +29 -0
- data/lib/skylight/probes/sinatra.rb +66 -0
- data/lib/skylight/probes/sinatra_add_middleware.rb +10 -10
- data/lib/skylight/probes/tilt.rb +25 -0
- data/lib/skylight/railtie.rb +157 -27
- data/lib/skylight/sidekiq.rb +47 -0
- data/lib/skylight/subscriber.rb +108 -0
- data/lib/skylight/test.rb +151 -0
- data/lib/skylight/trace.rb +325 -22
- data/lib/skylight/user_config.rb +58 -0
- data/lib/skylight/util.rb +12 -0
- data/lib/skylight/util/allocation_free.rb +26 -0
- data/lib/skylight/util/clock.rb +57 -0
- data/lib/skylight/util/component.rb +22 -22
- data/lib/skylight/util/deploy.rb +16 -21
- data/lib/skylight/util/gzip.rb +20 -0
- data/lib/skylight/util/http.rb +106 -113
- data/lib/skylight/util/instrumenter_method.rb +26 -0
- data/lib/skylight/util/logging.rb +136 -0
- data/lib/skylight/util/lru_cache.rb +36 -0
- data/lib/skylight/util/platform.rb +1 -5
- data/lib/skylight/util/ssl.rb +1 -25
- data/lib/skylight/vendor/cli/thor/rake_compat.rb +1 -1
- data/lib/skylight/version.rb +5 -1
- data/lib/skylight/vm/gc.rb +60 -0
- metadata +126 -13
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
if (segment = segment_from_payload(payload))
|
|
29
|
+
trace.segment = segment
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def controller_action(payload)
|
|
36
|
+
"#{payload[:controller]}##{payload[:action]}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def process_meta_options(payload)
|
|
40
|
+
# provide hints to override default source_location behavior
|
|
41
|
+
super.merge(source_location_hint: [:instance_method, payload[:controller], payload[:action]])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def segment_from_payload(payload)
|
|
45
|
+
# Show 'error' if there's an unhandled exception or if the status is 4xx or 5xx
|
|
46
|
+
return "error" if payload[:exception] || payload[:exception_object]
|
|
47
|
+
|
|
48
|
+
segment_from_status(payload[:status]) || if payload[:sk_rendered_format]
|
|
49
|
+
# We only show the variant if we actually have a format
|
|
50
|
+
# We won't have a sk_rendered_format if it's a `head` outside of a `respond_to` block.
|
|
51
|
+
[payload[:sk_rendered_format], payload[:sk_variant]].compact.flatten.join("+")
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def segment_from_status(status)
|
|
56
|
+
case status
|
|
57
|
+
when 304
|
|
58
|
+
"not modified"
|
|
59
|
+
when (300..399)
|
|
60
|
+
"redirect"
|
|
61
|
+
when (400..599)
|
|
62
|
+
"error"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Skylight
|
|
2
|
+
module Normalizers
|
|
3
|
+
module ActionController
|
|
4
|
+
enabled = true
|
|
5
|
+
|
|
6
|
+
# Temporary hacks
|
|
7
|
+
begin
|
|
8
|
+
require "action_dispatch/http/mime_type"
|
|
9
|
+
require "action_dispatch/http/mime_types"
|
|
10
|
+
require "rack/utils"
|
|
11
|
+
rescue LoadError
|
|
12
|
+
enabled = false
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
if enabled
|
|
16
|
+
class SendFile < Normalizer
|
|
17
|
+
register "send_file.action_controller"
|
|
18
|
+
|
|
19
|
+
CAT = "app.controller.send_file".freeze
|
|
20
|
+
TITLE = "send file".freeze
|
|
21
|
+
|
|
22
|
+
def normalize(_trace, _name, _payload)
|
|
23
|
+
title = TITLE
|
|
24
|
+
|
|
25
|
+
# depending on normalization, we probably want this to eventually
|
|
26
|
+
# include the full path, but we need to make sure we have a good
|
|
27
|
+
# deduping strategy first.
|
|
28
|
+
desc = nil
|
|
29
|
+
|
|
30
|
+
[CAT, title, desc]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
OCTET_STREAM = "application/octet-stream".freeze
|
|
36
|
+
ATTACHMENT = "attachment".freeze
|
|
37
|
+
|
|
38
|
+
def initialize(*)
|
|
39
|
+
super
|
|
40
|
+
|
|
41
|
+
@mimes =
|
|
42
|
+
Mime::SET.each_with_object({}) do |mime, hash|
|
|
43
|
+
hash[mime.symbol] = mime.to_s.dup.freeze
|
|
44
|
+
hash
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Skylight
|
|
4
|
+
module Normalizers
|
|
5
|
+
module ActionDispatch
|
|
6
|
+
class ProcessMiddleware < Normalizer
|
|
7
|
+
register "process_middleware.action_dispatch"
|
|
8
|
+
|
|
9
|
+
CAT = "rack.middleware"
|
|
10
|
+
ANONYMOUS_MIDDLEWARE = "Anonymous Middleware"
|
|
11
|
+
ANONYMOUS = /\A#<(Class|Module|Proc):/.freeze
|
|
12
|
+
|
|
13
|
+
def normalize(trace, _name, payload)
|
|
14
|
+
name = payload[:middleware].to_s
|
|
15
|
+
name = ANONYMOUS_MIDDLEWARE if name[ANONYMOUS]
|
|
16
|
+
trace.endpoint = name
|
|
17
|
+
[CAT, name, nil]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Skylight
|
|
2
|
+
module Normalizers
|
|
3
|
+
module ActionDispatch
|
|
4
|
+
class RouteSet < Normalizer
|
|
5
|
+
register "route_set.action_dispatch"
|
|
6
|
+
|
|
7
|
+
CAT = "rack.app".freeze
|
|
8
|
+
|
|
9
|
+
def normalize(trace, _name, _payload)
|
|
10
|
+
trace.endpoint = router_class_name
|
|
11
|
+
[CAT, trace.endpoint, nil]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def router_class_name
|
|
17
|
+
"ActionDispatch::Routing::RouteSet"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def process_meta_options(_payload)
|
|
21
|
+
# provide hints to override default source_location behavior
|
|
22
|
+
super.merge(source_location_hint: [:own_instance_method, router_class_name, "call"])
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require "skylight/normalizers/render"
|
|
2
|
+
|
|
3
|
+
module Skylight
|
|
4
|
+
module Normalizers
|
|
5
|
+
module ActionView
|
|
6
|
+
# Normalizer for Rails collection rendering
|
|
7
|
+
class RenderCollection < RenderNormalizer
|
|
8
|
+
register "render_collection.action_view"
|
|
9
|
+
|
|
10
|
+
CAT = "view.render.collection".freeze
|
|
11
|
+
|
|
12
|
+
# @param trace [Skylight::Messages::Trace::Builder] ignored, only present to match API
|
|
13
|
+
# @param name [String] ignored, only present to match API
|
|
14
|
+
# @param payload (see RenderNormalizer#normalize_render)
|
|
15
|
+
# @option payload (see RenderNormalizer#normalize_render)
|
|
16
|
+
# @option payload [Integer] :count
|
|
17
|
+
# @return (see RenderNormalizer#normalize_render)
|
|
18
|
+
def normalize(_trace, _name, payload)
|
|
19
|
+
normalize_render(CAT, payload)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "skylight/normalizers/render"
|
|
4
|
+
|
|
5
|
+
module Skylight
|
|
6
|
+
module Normalizers
|
|
7
|
+
module ActionView
|
|
8
|
+
# Normalizer for Rails layout rendering
|
|
9
|
+
class RenderLayout < RenderNormalizer
|
|
10
|
+
register "render_layout.action_view"
|
|
11
|
+
|
|
12
|
+
CAT = "view.render.layout"
|
|
13
|
+
|
|
14
|
+
# @param trace [Skylight::Messages::Trace::Builder] ignored, only present to match API
|
|
15
|
+
# @param name [String] ignored, only present to match API
|
|
16
|
+
# @param payload (see RenderNormalizer#normalize_render)
|
|
17
|
+
# @option payload (see RenderNormalizer#normalize_render)
|
|
18
|
+
# @return (see RenderNormalizer#normalize_render)
|
|
19
|
+
def normalize(_trace, _name, payload)
|
|
20
|
+
normalize_render(CAT, payload)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require "skylight/normalizers/render"
|
|
2
|
+
|
|
3
|
+
module Skylight
|
|
4
|
+
module Normalizers
|
|
5
|
+
module ActionView
|
|
6
|
+
# Normalizer for Rails partial rendering
|
|
7
|
+
class RenderPartial < RenderNormalizer
|
|
8
|
+
register "render_partial.action_view"
|
|
9
|
+
|
|
10
|
+
CAT = "view.render.template".freeze
|
|
11
|
+
|
|
12
|
+
# @param trace [Skylight::Messages::Trace::Builder] ignored, only present to match API
|
|
13
|
+
# @param name [String] ignored, only present to match API
|
|
14
|
+
# @param payload (see RenderNormalizer#normalize_render)
|
|
15
|
+
# @option payload (see RenderNormalizer#normalize_render)
|
|
16
|
+
# @return (see RenderNormalizer#normalize_render)
|
|
17
|
+
def normalize(_trace, _name, payload)
|
|
18
|
+
normalize_render(CAT, payload)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require "skylight/normalizers/render"
|
|
2
|
+
|
|
3
|
+
module Skylight
|
|
4
|
+
module Normalizers
|
|
5
|
+
module ActionView
|
|
6
|
+
# Normalizer for Rails template rendering
|
|
7
|
+
class RenderTemplate < RenderNormalizer
|
|
8
|
+
register "render_template.action_view"
|
|
9
|
+
|
|
10
|
+
CAT = "view.render.template".freeze
|
|
11
|
+
|
|
12
|
+
# @param trace [Skylight::Messages::Trace::Builder] ignored, only present to match API
|
|
13
|
+
# @param name [String] ignored, only present to match API
|
|
14
|
+
# @param payload (see RenderNormalizer#normalize_render)
|
|
15
|
+
# @option payload (see RenderNormalizer#normalize_render)
|
|
16
|
+
# @return (see RenderNormalizer#normalize_render)
|
|
17
|
+
def normalize(_trace, _name, payload)
|
|
18
|
+
normalize_render(CAT, payload)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
module Skylight
|
|
2
|
+
module Normalizers
|
|
3
|
+
module ActiveJob
|
|
4
|
+
class Perform < Normalizer
|
|
5
|
+
register "perform.active_job"
|
|
6
|
+
|
|
7
|
+
DELIVERY_JOB = /\AActionMailer::(Mail)?DeliveryJob\Z/.freeze
|
|
8
|
+
DELAYED_JOB_WRAPPER = "ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper".freeze
|
|
9
|
+
|
|
10
|
+
def self.normalize_title(job_instance)
|
|
11
|
+
job_instance
|
|
12
|
+
.class
|
|
13
|
+
.name
|
|
14
|
+
.to_s
|
|
15
|
+
.tap do |str|
|
|
16
|
+
if str.match(DELIVERY_JOB)
|
|
17
|
+
mailer_class, mailer_method, * = job_instance.arguments
|
|
18
|
+
return "#{mailer_class}##{mailer_method}", str
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
CAT = "app.job.perform".freeze
|
|
24
|
+
|
|
25
|
+
def normalize(trace, _name, payload)
|
|
26
|
+
title = payload[:job].class.to_s
|
|
27
|
+
adapter_name = normalize_adapter_name(payload[:adapter])
|
|
28
|
+
desc = "{ adapter: '#{adapter_name}', queue: '#{payload[:job].queue_name}' }"
|
|
29
|
+
|
|
30
|
+
maybe_set_endpoint(trace, payload)
|
|
31
|
+
|
|
32
|
+
[CAT, title, desc]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def normalize_after(trace, _span, _name, payload)
|
|
36
|
+
return unless config.enable_segments? && assign_endpoint?(trace, payload)
|
|
37
|
+
|
|
38
|
+
trace.segment = payload[:job].queue_name
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def process_meta_options(payload)
|
|
44
|
+
# provide hints to override default source_location behavior
|
|
45
|
+
super.merge(source_location_hint: [:instance_method, payload[:job].class.to_s, "perform"])
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def normalize_adapter_name(adapter)
|
|
49
|
+
adapter_string = adapter.is_a?(Class) ? adapter.to_s : adapter.class.to_s
|
|
50
|
+
adapter_string[/ActiveJob::QueueAdapters::(\w+)Adapter/, 1].underscore
|
|
51
|
+
rescue StandardError
|
|
52
|
+
"active_job"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def maybe_set_endpoint(trace, payload)
|
|
56
|
+
trace.endpoint = normalize_title(payload[:job]) if assign_endpoint?(trace, payload)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def assign_endpoint?(trace, payload)
|
|
60
|
+
# Always assign the endpoint if it has not yet been assigned by the ActiveJob probe.
|
|
61
|
+
return true unless trace.endpoint
|
|
62
|
+
if defined?(Skylight::Probes::ActiveJob::TITLE) && trace.endpoint == Skylight::Probes::ActiveJob::TITLE
|
|
63
|
+
return true
|
|
64
|
+
end
|
|
65
|
+
if defined?(SKylight::Probes::DelayedJob::Probe::UNKNOWN) &&
|
|
66
|
+
trace.endpoint == Skylight::Probes::DelayedJob::Probe::UNKNOWN
|
|
67
|
+
return true
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# If a job is called using #perform_now inside a controller action
|
|
71
|
+
# or within another job's #perform method, we do not want this to
|
|
72
|
+
# overwrite the existing endpoint name (unless it is the default from ActiveJob).
|
|
73
|
+
#
|
|
74
|
+
# If the current endpoint name matches this payload, return true to allow the
|
|
75
|
+
# segment to be assigned by normalize_after.
|
|
76
|
+
trace.endpoint == DELIVERY_JOB || trace.endpoint == normalize_title(payload[:job]) ||
|
|
77
|
+
# This adapter wrapper needs to be handled specifically due to interactions with the
|
|
78
|
+
# standalone Delayed::Job probe, as there is no consistent way to get the wrapped
|
|
79
|
+
# job name among all Delayed::Job backends.
|
|
80
|
+
trace.endpoint == DELAYED_JOB_WRAPPER
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def normalize_title(job_instance)
|
|
84
|
+
title, * = self.class.normalize_title(job_instance)
|
|
85
|
+
title
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Skylight
|
|
2
|
+
module Normalizers
|
|
3
|
+
module ActiveModelSerializers
|
|
4
|
+
class Render < Normalizer
|
|
5
|
+
register "render.active_model_serializers"
|
|
6
|
+
|
|
7
|
+
CAT = "view.render.active_model_serializers".freeze
|
|
8
|
+
ANONYMOUS = "<Anonymous Serializer>".freeze
|
|
9
|
+
|
|
10
|
+
def normalize(_trace, _name, payload)
|
|
11
|
+
serializer_class = payload[:serializer]
|
|
12
|
+
|
|
13
|
+
title = serializer_class.name || ANONYMOUS
|
|
14
|
+
title = title.sub(/^ActiveModel::(Serializer::)?/, "")
|
|
15
|
+
|
|
16
|
+
if (adapter_instance = payload[:adapter])
|
|
17
|
+
adapter_name =
|
|
18
|
+
adapter_instance
|
|
19
|
+
.class
|
|
20
|
+
.name
|
|
21
|
+
.to_s
|
|
22
|
+
.sub(/^ActiveModel::Serializer::Adapter::/, "")
|
|
23
|
+
.sub(/^ActiveModelSerializers::Adapter::/, "")
|
|
24
|
+
desc = "Adapter: #{adapter_name}"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
[CAT, title, desc]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Skylight
|
|
2
|
+
module Normalizers
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Instantiation < Normalizer
|
|
5
|
+
register "instantiation.active_record"
|
|
6
|
+
|
|
7
|
+
CAT = "db.active_record.instantiation".freeze
|
|
8
|
+
|
|
9
|
+
def normalize(_trace, _name, payload)
|
|
10
|
+
# Payload also includes `:record_count` but this will be variable
|
|
11
|
+
[CAT, "#{payload[:class_name]} Instantiation", nil]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Skylight
|
|
2
|
+
module Normalizers
|
|
3
|
+
class ActiveStorage < Normalizer
|
|
4
|
+
TITLES = {
|
|
5
|
+
"preview.active_storage" => "Preview",
|
|
6
|
+
"transform.active_storage" => "Transform",
|
|
7
|
+
"service_download.active_storage" => "Download",
|
|
8
|
+
"service_upload.active_storage" => "Upload",
|
|
9
|
+
"service_streaming_download.active_storage" => "Streaming Download",
|
|
10
|
+
"service_download_chunk.active_storage" => "Download Chunk",
|
|
11
|
+
"service_delete.active_storage" => "Delete",
|
|
12
|
+
"service_delete_prefixed.active_storage" => "Delete Prefixed",
|
|
13
|
+
"service_exist.active_storage" => "Exist",
|
|
14
|
+
"service_url.active_storage" => "Url"
|
|
15
|
+
}.freeze
|
|
16
|
+
|
|
17
|
+
TITLES.each_key { |key| register key }
|
|
18
|
+
|
|
19
|
+
def normalize(_trace, name, _payload)
|
|
20
|
+
title = ["ActiveStorage", TITLES[name]].join(" ")
|
|
21
|
+
|
|
22
|
+
cat = "app.#{name.split(".").reverse.join(".")}"
|
|
23
|
+
|
|
24
|
+
[cat, title, nil]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|