1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
|
# frozen_string_literal: true
require 'socket'
module Marginalia
module Comment
mattr_accessor :components, :lines_to_ignore, :prepend_comment
Marginalia::Comment.components ||= [:application, :controller, :action]
def self.update!(controller = nil)
self.marginalia_controller = controller
end
def self.update_job!(job)
self.marginalia_job = job
end
def self.update_adapter!(adapter)
self.marginalia_adapter = adapter
end
def self.construct_comment
ret = String.new
self.components.each do |c|
component_value = self.send(c)
if component_value.present?
ret << "#{c}:#{component_value},"
end
end
ret.chop!
ret = self.escape_sql_comment(ret)
ret
end
def self.construct_inline_comment
return nil if inline_annotations.none?
escape_sql_comment(inline_annotations.join)
end
def self.escape_sql_comment(str)
while str.include?('/*') || str.include?('*/')
str = str.gsub('/*', '').gsub('*/', '')
end
str
end
def self.clear!
self.marginalia_controller = nil
end
def self.clear_job!
self.marginalia_job = nil
end
private
def self.marginalia_controller=(controller)
Thread.current[:marginalia_controller] = controller
end
def self.marginalia_controller
Thread.current[:marginalia_controller]
end
def self.marginalia_job=(job)
Thread.current[:marginalia_job] = job
end
def self.marginalia_job
Thread.current[:marginalia_job]
end
def self.marginalia_adapter=(adapter)
Thread.current[:marginalia_adapter] = adapter
end
def self.marginalia_adapter
Thread.current[:marginalia_adapter]
end
def self.application
if defined?(Rails.application)
Marginalia.application_name ||= Rails.application.class.name.split("::").first
else
Marginalia.application_name ||= "rails"
end
Marginalia.application_name
end
def self.job
marginalia_job.class.name if marginalia_job
end
def self.controller
marginalia_controller.controller_name if marginalia_controller.respond_to? :controller_name
end
def self.controller_with_namespace
marginalia_controller.class.name if marginalia_controller
end
def self.action
marginalia_controller.action_name if marginalia_controller.respond_to? :action_name
end
def self.sidekiq_job
marginalia_job["class"] if marginalia_job && marginalia_job.respond_to?(:[])
end
DEFAULT_LINES_TO_IGNORE_REGEX = %r{\.rvm|/ruby/gems/|vendor/|marginalia|rbenv|monitor\.rb.*mon_synchronize}
def self.line
Marginalia::Comment.lines_to_ignore ||= DEFAULT_LINES_TO_IGNORE_REGEX
last_line = caller.detect do |line|
line !~ Marginalia::Comment.lines_to_ignore
end
if last_line
root = if defined?(Rails) && Rails.respond_to?(:root)
Rails.root.to_s
elsif defined?(RAILS_ROOT)
RAILS_ROOT
else
""
end
if last_line.start_with? root
last_line = last_line[root.length..-1]
end
last_line
end
end
def self.hostname
@cached_hostname ||= Socket.gethostname
end
def self.pid
Process.pid
end
def self.request_id
if marginalia_controller.respond_to?(:request) && marginalia_controller.request.respond_to?(:uuid)
marginalia_controller.request.uuid
end
end
def self.socket
if self.connection_config.present?
self.connection_config[:socket]
end
end
def self.db_host
if self.connection_config.present?
self.connection_config[:host]
end
end
def self.database
if self.connection_config.present?
self.connection_config[:database]
end
end
if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new('6.1')
def self.connection_config
return if marginalia_adapter.pool.nil?
marginalia_adapter.pool.spec.config
end
else
def self.connection_config
# `pool` might be a NullPool which has no db_config
return unless marginalia_adapter.pool.respond_to?(:db_config)
marginalia_adapter.pool.db_config.configuration_hash
end
end
def self.inline_annotations
Thread.current[:marginalia_inline_annotations] ||= []
end
end
end
|