rails_performance 1.2.3 → 1.3.0

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -13
  3. data/Rakefile +14 -14
  4. data/app/assets/images/download.svg +3 -0
  5. data/app/controllers/rails_performance/base_controller.rb +21 -21
  6. data/app/controllers/rails_performance/concerns/csv_exportable.rb +29 -0
  7. data/app/controllers/rails_performance/rails_performance_controller.rb +95 -49
  8. data/app/helpers/rails_performance/rails_performance_helper.rb +152 -156
  9. data/app/views/rails_performance/javascripts/app.js +2 -2
  10. data/app/views/rails_performance/rails_performance/_export.html.erb +3 -0
  11. data/app/views/rails_performance/rails_performance/crashes.html.erb +8 -1
  12. data/app/views/rails_performance/rails_performance/recent.html.erb +8 -6
  13. data/app/views/rails_performance/rails_performance/requests.html.erb +8 -1
  14. data/app/views/rails_performance/rails_performance/slow.html.erb +3 -0
  15. data/app/views/rails_performance/shared/_header.html.erb +0 -1
  16. data/app/views/rails_performance/stylesheets/style.css +6 -0
  17. data/config/routes.rb +16 -18
  18. data/lib/generators/rails_performance/install/install_generator.rb +1 -1
  19. data/lib/generators/rails_performance/install/templates/initializer.rb +56 -42
  20. data/lib/rails_performance/data_source.rb +120 -121
  21. data/lib/rails_performance/engine.rb +8 -8
  22. data/lib/rails_performance/extensions/trace.rb +32 -33
  23. data/lib/rails_performance/gems/custom_ext.rb +31 -34
  24. data/lib/rails_performance/gems/delayed_job_ext.rb +50 -54
  25. data/lib/rails_performance/gems/grape_ext.rb +33 -35
  26. data/lib/rails_performance/gems/rake_ext.rb +41 -44
  27. data/lib/rails_performance/gems/sidekiq_ext.rb +34 -37
  28. data/lib/rails_performance/instrument/metrics_collector.rb +50 -50
  29. data/lib/rails_performance/models/base_record.rb +33 -36
  30. data/lib/rails_performance/models/collection.rb +35 -36
  31. data/lib/rails_performance/models/custom_record.rb +47 -48
  32. data/lib/rails_performance/models/delayed_job_record.rb +61 -62
  33. data/lib/rails_performance/models/grape_record.rb +60 -61
  34. data/lib/rails_performance/models/rake_record.rb +48 -49
  35. data/lib/rails_performance/models/request_record.rb +123 -120
  36. data/lib/rails_performance/models/sidekiq_record.rb +65 -66
  37. data/lib/rails_performance/models/trace_record.rb +18 -19
  38. data/lib/rails_performance/rails/middleware.rb +75 -76
  39. data/lib/rails_performance/rails/query_builder.rb +18 -20
  40. data/lib/rails_performance/reports/base_report.rb +60 -60
  41. data/lib/rails_performance/reports/breakdown_report.rb +15 -18
  42. data/lib/rails_performance/reports/crash_report.rb +15 -17
  43. data/lib/rails_performance/reports/recent_requests_report.rb +24 -24
  44. data/lib/rails_performance/reports/requests_report.rb +27 -27
  45. data/lib/rails_performance/reports/response_time_report.rb +17 -17
  46. data/lib/rails_performance/reports/slow_requests_report.rb +4 -4
  47. data/lib/rails_performance/reports/throughput_report.rb +15 -17
  48. data/lib/rails_performance/reports/trace_report.rb +16 -18
  49. data/lib/rails_performance/thread/current_request.rb +33 -34
  50. data/lib/rails_performance/utils.rb +53 -54
  51. data/lib/rails_performance/version.rb +2 -2
  52. data/lib/rails_performance.rb +33 -34
  53. metadata +20 -3
@@ -1,121 +1,120 @@
1
- module RailsPerformance
2
- class DataSource
3
- KLASSES = {
4
- requests: RailsPerformance::Models::RequestRecord,
5
- sidekiq: RailsPerformance::Models::SidekiqRecord,
6
- delayed_job: RailsPerformance::Models::DelayedJobRecord,
7
- grape: RailsPerformance::Models::GrapeRecord,
8
- rake: RailsPerformance::Models::RakeRecord,
9
- custom: RailsPerformance::Models::CustomRecord,
10
- }
11
-
12
- attr_reader :q, :klass, :type
13
-
14
- def initialize(q: {}, type:)
15
- @type = type
16
- @klass = KLASSES[type]
17
- q[:on] ||= Date.today
18
- @q = q
19
- end
20
-
21
- def db
22
- result = RailsPerformance::Models::Collection.new
23
- (0..(RailsPerformance::Utils.days + 1)).to_a.reverse.each do |e|
24
- RailsPerformance::DataSource.new(q: self.q.merge({ on: (Time.current - e.days).to_date }), type: type).add_to(result)
25
- end
26
- result
27
- end
28
-
29
- def default?
30
- @q.keys == [:on]
31
- end
32
-
33
- def add_to(storage = RailsPerformance::Models::Collection.new)
34
- store do |record|
35
- storage.add(record)
36
- end
37
- storage
38
- end
39
-
40
- def store
41
- keys, values = Utils.fetch_from_redis(query)
42
-
43
- return [] if keys.blank?
44
-
45
- keys.each_with_index do |key, index|
46
- yield klass.from_db(key, values[index])
47
- end
48
- end
49
-
50
- private
51
-
52
- def query
53
- case type
54
- when :requests
55
- "performance|*#{compile_requests_query}*|END|#{RailsPerformance::SCHEMA}"
56
- when :sidekiq
57
- "sidekiq|*#{compile_sidekiq_query}*|END|#{RailsPerformance::SCHEMA}"
58
- when :delayed_job
59
- "delayed_job|*#{compile_delayed_job_query}*|END|#{RailsPerformance::SCHEMA}"
60
- when :grape
61
- "grape|*#{compile_grape_query}*|END|#{RailsPerformance::SCHEMA}"
62
- when :rake
63
- "rake|*#{compile_rake_query}*|END|#{RailsPerformance::SCHEMA}"
64
- when :custom
65
- "custom|*#{compile_custom_query}*|END|#{RailsPerformance::SCHEMA}"
66
- else
67
- raise "wrong type for datasource query builder"
68
- end
69
- end
70
-
71
- def compile_requests_query
72
- str = []
73
- str << "controller|#{q[:controller]}|" if q[:controller].present?
74
- str << "action|#{q[:action]}|" if q[:action].present?
75
- str << "format|#{q[:format]}|" if q[:format].present?
76
- str << "status|#{q[:status]}|" if q[:status].present?
77
- str << "datetime|#{q[:on].strftime('%Y%m%d')}*|" if q[:on].present?
78
- str << "method|#{q[:method]}|" if q[:method].present?
79
- str << "path|#{q[:path]}|" if q[:path].present?
80
- str.join("*")
81
- end
82
-
83
- def compile_sidekiq_query
84
- str = []
85
- str << "queue|#{q[:queue]}|" if q[:queue].present?
86
- str << "worker|#{q[:worker]}|" if q[:worker].present?
87
- str << "datetime|#{q[:on].strftime('%Y%m%d')}*|" if q[:on].present?
88
- str << "status|#{q[:status]}|" if q[:status].present?
89
- str.join("*")
90
- end
91
-
92
- def compile_delayed_job_query
93
- str = []
94
- str << "datetime|#{q[:on].strftime('%Y%m%d')}*|" if q[:on].present?
95
- str << "status|#{q[:status]}|" if q[:status].present?
96
- str.join("*")
97
- end
98
-
99
- def compile_rake_query
100
- str = []
101
- str << "datetime|#{q[:on].strftime('%Y%m%d')}*|" if q[:on].present?
102
- str << "status|#{q[:status]}|" if q[:status].present?
103
- str.join("*")
104
- end
105
-
106
- def compile_custom_query
107
- str = []
108
- str << "datetime|#{q[:on].strftime('%Y%m%d')}*|" if q[:on].present?
109
- str << "status|#{q[:status]}|" if q[:status].present?
110
- str.join("*")
111
- end
112
-
113
- def compile_grape_query
114
- str = []
115
- str << "datetime|#{q[:on].strftime('%Y%m%d')}*|" if q[:on].present?
116
- str << "status|#{q[:status]}|" if q[:status].present?
117
- str.join("*")
118
- end
119
-
120
- end
121
- end
1
+ module RailsPerformance
2
+ class DataSource
3
+ KLASSES = {
4
+ requests: RailsPerformance::Models::RequestRecord,
5
+ sidekiq: RailsPerformance::Models::SidekiqRecord,
6
+ delayed_job: RailsPerformance::Models::DelayedJobRecord,
7
+ grape: RailsPerformance::Models::GrapeRecord,
8
+ rake: RailsPerformance::Models::RakeRecord,
9
+ custom: RailsPerformance::Models::CustomRecord
10
+ }
11
+
12
+ attr_reader :q, :klass, :type
13
+
14
+ def initialize(type:, q: {})
15
+ @type = type
16
+ @klass = KLASSES[type]
17
+ q[:on] ||= Date.today
18
+ @q = q
19
+ end
20
+
21
+ def db
22
+ result = RailsPerformance::Models::Collection.new
23
+ (0..(RailsPerformance::Utils.days + 1)).to_a.reverse_each do |e|
24
+ RailsPerformance::DataSource.new(q: q.merge({on: (Time.current - e.days).to_date}), type: type).add_to(result)
25
+ end
26
+ result
27
+ end
28
+
29
+ def default?
30
+ @q.keys == [:on]
31
+ end
32
+
33
+ def add_to(storage = RailsPerformance::Models::Collection.new)
34
+ store do |record|
35
+ storage.add(record)
36
+ end
37
+ storage
38
+ end
39
+
40
+ def store
41
+ keys, values = Utils.fetch_from_redis(query)
42
+
43
+ return [] if keys.blank?
44
+
45
+ keys.each_with_index do |key, index|
46
+ yield klass.from_db(key, values[index])
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def query
53
+ case type
54
+ when :requests
55
+ "performance|*#{compile_requests_query}*|END|#{RailsPerformance::SCHEMA}"
56
+ when :sidekiq
57
+ "sidekiq|*#{compile_sidekiq_query}*|END|#{RailsPerformance::SCHEMA}"
58
+ when :delayed_job
59
+ "delayed_job|*#{compile_delayed_job_query}*|END|#{RailsPerformance::SCHEMA}"
60
+ when :grape
61
+ "grape|*#{compile_grape_query}*|END|#{RailsPerformance::SCHEMA}"
62
+ when :rake
63
+ "rake|*#{compile_rake_query}*|END|#{RailsPerformance::SCHEMA}"
64
+ when :custom
65
+ "custom|*#{compile_custom_query}*|END|#{RailsPerformance::SCHEMA}"
66
+ else
67
+ raise "wrong type for datasource query builder"
68
+ end
69
+ end
70
+
71
+ def compile_requests_query
72
+ str = []
73
+ str << "controller|#{q[:controller]}|" if q[:controller].present?
74
+ str << "action|#{q[:action]}|" if q[:action].present?
75
+ str << "format|#{q[:format]}|" if q[:format].present?
76
+ str << "status|#{q[:status]}|" if q[:status].present?
77
+ str << "datetime|#{q[:on].strftime("%Y%m%d")}*|" if q[:on].present?
78
+ str << "method|#{q[:method]}|" if q[:method].present?
79
+ str << "path|#{q[:path]}|" if q[:path].present?
80
+ str.join("*")
81
+ end
82
+
83
+ def compile_sidekiq_query
84
+ str = []
85
+ str << "queue|#{q[:queue]}|" if q[:queue].present?
86
+ str << "worker|#{q[:worker]}|" if q[:worker].present?
87
+ str << "datetime|#{q[:on].strftime("%Y%m%d")}*|" if q[:on].present?
88
+ str << "status|#{q[:status]}|" if q[:status].present?
89
+ str.join("*")
90
+ end
91
+
92
+ def compile_delayed_job_query
93
+ str = []
94
+ str << "datetime|#{q[:on].strftime("%Y%m%d")}*|" if q[:on].present?
95
+ str << "status|#{q[:status]}|" if q[:status].present?
96
+ str.join("*")
97
+ end
98
+
99
+ def compile_rake_query
100
+ str = []
101
+ str << "datetime|#{q[:on].strftime("%Y%m%d")}*|" if q[:on].present?
102
+ str << "status|#{q[:status]}|" if q[:status].present?
103
+ str.join("*")
104
+ end
105
+
106
+ def compile_custom_query
107
+ str = []
108
+ str << "datetime|#{q[:on].strftime("%Y%m%d")}*|" if q[:on].present?
109
+ str << "status|#{q[:status]}|" if q[:status].present?
110
+ str.join("*")
111
+ end
112
+
113
+ def compile_grape_query
114
+ str = []
115
+ str << "datetime|#{q[:on].strftime("%Y%m%d")}*|" if q[:on].present?
116
+ str << "status|#{q[:status]}|" if q[:status].present?
117
+ str.join("*")
118
+ end
119
+ end
120
+ end
@@ -1,7 +1,7 @@
1
- require 'action_view/log_subscriber'
2
- require_relative './rails/middleware.rb'
3
- require_relative './models/collection.rb'
4
- require_relative './instrument/metrics_collector.rb'
1
+ require "action_view/log_subscriber"
2
+ require_relative "rails/middleware"
3
+ require_relative "models/collection"
4
+ require_relative "instrument/metrics_collector"
5
5
 
6
6
  module RailsPerformance
7
7
  class Engine < ::Rails::Engine
@@ -23,7 +23,7 @@ module RailsPerformance
23
23
  app.middleware.insert_before RailsPerformance::Rails::Middleware, RailsPerformance::Rails::MiddlewareTraceStorerAndCleanup
24
24
 
25
25
  if defined?(::Sidekiq)
26
- require_relative './gems/sidekiq_ext.rb'
26
+ require_relative "gems/sidekiq_ext"
27
27
  Sidekiq.configure_server do |config|
28
28
  config.server_middleware do |chain|
29
29
  chain.add RailsPerformance::Gems::SidekiqExt
@@ -32,12 +32,12 @@ module RailsPerformance
32
32
  end
33
33
 
34
34
  if defined?(::Grape)
35
- require_relative './gems/grape_ext.rb'
35
+ require_relative "gems/grape_ext"
36
36
  RailsPerformance::Gems::GrapeExt.init
37
37
  end
38
38
 
39
39
  if defined?(::Delayed::Job)
40
- require_relative './gems/delayed_job_ext.rb'
40
+ require_relative "gems/delayed_job_ext"
41
41
  RailsPerformance::Gems::DelayedJobExt.init
42
42
  end
43
43
  end
@@ -58,7 +58,7 @@ module RailsPerformance
58
58
  ActiveRecord::LogSubscriber.send :prepend, RailsPerformance::Extensions::Db if defined?(ActiveRecord)
59
59
 
60
60
  if defined?(::Rake::Task) && RailsPerformance.include_rake_tasks
61
- require_relative './gems/rake_ext.rb'
61
+ require_relative "gems/rake_ext"
62
62
  RailsPerformance::Gems::RakeExt.init
63
63
  end
64
64
  end
@@ -1,33 +1,32 @@
1
- module RailsPerformance
2
- module Extensions
3
- module View
4
-
5
- def info(&block)
6
- CurrentRequest.current.trace({
7
- group: :view,
8
- message: block.call
9
- })
10
- super(&block)
11
- end
12
-
13
- end
14
- end
15
- end
16
-
17
- module RailsPerformance
18
- module Extensions
19
- module Db
20
-
21
- def sql(event)
22
- CurrentRequest.current.trace({
23
- group: :db,
24
- duration: event.duration.round(2),
25
- sql: event.payload[:sql]
26
- })
27
- super(event)
28
- end
29
-
30
- end
31
- end
32
- end
33
-
1
+ module RailsPerformance
2
+ module Extensions
3
+ module View
4
+ # in env
5
+ # this works if config.log_level = :info
6
+ def info(&block)
7
+ CurrentRequest.current.trace({
8
+ group: :view,
9
+ message: block.call
10
+ })
11
+ super
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ module RailsPerformance
18
+ module Extensions
19
+ module Db
20
+ # in env
21
+ # this works if config.log_level = :debug
22
+ def sql(event)
23
+ CurrentRequest.current.trace({
24
+ group: :db,
25
+ duration: event.duration.round(2),
26
+ sql: event.payload[:sql]
27
+ })
28
+ super
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,34 +1,31 @@
1
- module RailsPerformance
2
- module Gems
3
- module CustomExtension
4
- extend self
5
-
6
- def measure(tag_name, namespace_name = nil)
7
- return yield unless RailsPerformance.enabled
8
- return yield unless RailsPerformance.include_custom_events
9
-
10
- begin
11
- now = Time.current
12
- status = 'success'
13
- result = yield
14
- result
15
- rescue Exception => ex
16
- status = 'error'
17
- raise(ex)
18
- ensure
19
- RailsPerformance::Models::CustomRecord.new(
20
- tag_name: tag_name,
21
- namespace_name: namespace_name,
22
- status: status,
23
- duration: (Time.current - now) * 1000,
24
- datetime: now.strftime(RailsPerformance::FORMAT),
25
- datetimei: now.to_i,
26
- ).save
27
-
28
- result
29
- end
30
- end
31
-
32
- end
33
- end
34
- end
1
+ module RailsPerformance
2
+ module Gems
3
+ module CustomExtension
4
+ extend self
5
+
6
+ def measure(tag_name, namespace_name = nil)
7
+ return yield unless RailsPerformance.enabled
8
+ return yield unless RailsPerformance.include_custom_events
9
+
10
+ begin
11
+ now = Time.current
12
+ status = "success"
13
+ result = yield
14
+ result
15
+ rescue Exception => ex # rubocop:disable Lint/RescueException
16
+ status = "error"
17
+ raise(ex)
18
+ ensure
19
+ RailsPerformance::Models::CustomRecord.new(
20
+ tag_name: tag_name,
21
+ namespace_name: namespace_name,
22
+ status: status,
23
+ duration: (Time.current - now) * 1000,
24
+ datetime: now.strftime(RailsPerformance::FORMAT),
25
+ datetimei: now.to_i
26
+ ).save
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,54 +1,50 @@
1
- module RailsPerformance
2
- module Gems
3
- class DelayedJobExt
4
-
5
- class Plugin < ::Delayed::Plugin
6
- callbacks do |lifecycle|
7
- lifecycle.around(:invoke_job) do |job, *args, &block|
8
- begin
9
- now = Time.current
10
- block.call(job, *args)
11
- status = 'success'
12
- rescue Exception => error
13
- status = 'error'
14
- raise error
15
- ensure
16
- meta_data = RailsPerformance::Gems::DelayedJobExt::Plugin.meta(job.payload_object)
17
- record = RailsPerformance::Models::DelayedJobRecord.new(
18
- jid: job.id,
19
- duration: (Time.current - now) * 1000,
20
- datetime: now.strftime(RailsPerformance::FORMAT),
21
- datetimei: now.to_i,
22
- source_type: meta_data[0],
23
- class_name: meta_data[1],
24
- method_name: meta_data[2],
25
- status: status
26
- )
27
- record.save
28
- end
29
- end
30
- end
31
-
32
- # [source_type, class_name, method_name, duration]
33
- def self.meta(payload_object)
34
- if payload_object.is_a?(::Delayed::PerformableMethod)
35
- if payload_object.object.is_a?(Module)
36
- [:class_method, payload_object.object.name, payload_object.method_name.to_s]
37
- else
38
- [:instance_method, payload_object.object.class.name, payload_object.method_name.to_s]
39
- end
40
- else
41
- [:instance_method, payload_object.class.name, "perform"]
42
- end
43
- rescue
44
- [:unknown, :unknown, :unknown]
45
- end
46
- end
47
-
48
- def self.init
49
- ::Delayed::Worker.plugins += [::RailsPerformance::Gems::DelayedJobExt::Plugin]
50
- end
51
-
52
- end
53
- end
54
- end
1
+ module RailsPerformance
2
+ module Gems
3
+ class DelayedJobExt
4
+ class Plugin < ::Delayed::Plugin
5
+ callbacks do |lifecycle|
6
+ lifecycle.around(:invoke_job) do |job, *args, &block|
7
+ now = Time.current
8
+ block.call(job, *args)
9
+ status = "success"
10
+ rescue Exception => error # rubocop:disable Lint/RescueException
11
+ status = "error"
12
+ raise error
13
+ ensure
14
+ meta_data = RailsPerformance::Gems::DelayedJobExt::Plugin.meta(job.payload_object)
15
+ record = RailsPerformance::Models::DelayedJobRecord.new(
16
+ jid: job.id,
17
+ duration: (Time.current - now) * 1000,
18
+ datetime: now.strftime(RailsPerformance::FORMAT),
19
+ datetimei: now.to_i,
20
+ source_type: meta_data[0],
21
+ class_name: meta_data[1],
22
+ method_name: meta_data[2],
23
+ status: status
24
+ )
25
+ record.save
26
+ end
27
+ end
28
+
29
+ # [source_type, class_name, method_name, duration]
30
+ def self.meta(payload_object)
31
+ if payload_object.is_a?(::Delayed::PerformableMethod)
32
+ if payload_object.object.is_a?(Module)
33
+ [:class_method, payload_object.object.name, payload_object.method_name.to_s]
34
+ else
35
+ [:instance_method, payload_object.object.class.name, payload_object.method_name.to_s]
36
+ end
37
+ else
38
+ [:instance_method, payload_object.class.name, "perform"]
39
+ end
40
+ rescue
41
+ [:unknown, :unknown, :unknown]
42
+ end
43
+ end
44
+
45
+ def self.init
46
+ ::Delayed::Worker.plugins += [::RailsPerformance::Gems::DelayedJobExt::Plugin]
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,35 +1,33 @@
1
- module RailsPerformance
2
- module Gems
3
- class GrapeExt
4
-
5
- def self.init
6
- ActiveSupport::Notifications.subscribe(/grape/) do |name, start, finish, id, payload|
7
- # TODO change to set
8
- CurrentRequest.current.ignore.add(:performance)
9
-
10
- now = Time.current
11
- CurrentRequest.current.data ||= {}
12
- CurrentRequest.current.record ||= RailsPerformance::Models::GrapeRecord.new(request_id: CurrentRequest.current.request_id)
13
- CurrentRequest.current.record.datetimei ||= now.to_i
14
- CurrentRequest.current.record.datetime ||= now.strftime(RailsPerformance::FORMAT)
15
-
16
- if ['endpoint_render.grape', 'endpoint_run.grape', 'format_response.grape'].include?(name)
17
- CurrentRequest.current.record.send(name.gsub(".", "_") + "=", (finish - start) * 1000)
18
- end
19
-
20
- if payload[:env]
21
- CurrentRequest.current.record.status = payload[:env]['api.endpoint'].status
22
- CurrentRequest.current.record.format = payload[:env]["api.format"]
23
- CurrentRequest.current.record.method = payload[:env]['REQUEST_METHOD']
24
- CurrentRequest.current.record.path = payload[:env]["PATH_INFO"]
25
- end
26
-
27
- if name == 'format_response.grape'
28
- CurrentRequest.current.record.save
29
- end
30
- end
31
- end
32
-
33
- end
34
- end
35
- end
1
+ module RailsPerformance
2
+ module Gems
3
+ class GrapeExt
4
+ def self.init
5
+ ActiveSupport::Notifications.subscribe(/grape/) do |name, start, finish, id, payload|
6
+ # TODO change to set
7
+ CurrentRequest.current.ignore.add(:performance)
8
+
9
+ now = Time.current
10
+ CurrentRequest.current.data ||= {}
11
+ CurrentRequest.current.record ||= RailsPerformance::Models::GrapeRecord.new(request_id: CurrentRequest.current.request_id)
12
+ CurrentRequest.current.record.datetimei ||= now.to_i
13
+ CurrentRequest.current.record.datetime ||= now.strftime(RailsPerformance::FORMAT)
14
+
15
+ if ["endpoint_render.grape", "endpoint_run.grape", "format_response.grape"].include?(name)
16
+ CurrentRequest.current.record.send(name.tr(".", "_") + "=", (finish - start) * 1000)
17
+ end
18
+
19
+ if payload[:env]
20
+ CurrentRequest.current.record.status = payload[:env]["api.endpoint"].status
21
+ CurrentRequest.current.record.format = payload[:env]["api.format"]
22
+ CurrentRequest.current.record.method = payload[:env]["REQUEST_METHOD"]
23
+ CurrentRequest.current.record.path = payload[:env]["PATH_INFO"]
24
+ end
25
+
26
+ if name == "format_response.grape"
27
+ CurrentRequest.current.record.save
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end