Module: Oboe::Util
- Defined in:
- lib/oboe/util.rb,
lib/oboe/loading.rb
Overview
Provides utility methods for use while in the business of instrumenting code
Defined Under Namespace
Modules: Base64URL
Class Method Summary collapse
-
.build_init_report ⇒ Object
build_report.
-
.class_method_alias(cls, method, name = nil) ⇒ Object
class_method_alias.
- .contextual_name(cls) ⇒ Object
-
.method_alias(cls, method, name = nil) ⇒ Object
method_alias.
-
.prettify(x) ⇒ Object
prettify.
-
.send_extend(target_cls, cls) ⇒ Object
send_extend.
-
.send_include(target_cls, cls) ⇒ Object
send_include.
-
.static_asset?(path) ⇒ Boolean
static_asset?.
Class Method Details
.build_init_report ⇒ Object
build_report
Internal: Build a hash of KVs that reports on the status of the running environment. This is used on stack boot in __Init reporting and for Oboe.support_report.
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 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/oboe/util.rb', line 130 def build_init_report platform_info = { '__Init' => 1 } begin platform_info['Force'] = true platform_info['Ruby.Platform.Version'] = RUBY_PLATFORM platform_info['Ruby.Version'] = RUBY_VERSION platform_info['Ruby.Oboe.Version'] = ::Oboe::Version::STRING platform_info['RubyHeroku.Oboe.Version'] = ::OboeHeroku::Version::STRING if defined?(::OboeHeroku) # Report the framework in use if defined?(::RailsLts) platform_info['Ruby.RailsLts.Version'] = "RailsLts-#{::RailsLts::VERSION}" elsif defined?(::Rails) platform_info['Ruby.Rails.Version'] = "Rails-#{::Rails.version}" end platform_info['Ruby.Grape.Version'] = "Grape-#{::Grape::VERSION}" if defined?(::Grape) platform_info['Ruby.Cramp.Version'] = "Cramp-#{::Cramp::VERSION}" if defined?(::Cramp) if defined?(::Padrino) platform_info['Ruby.Padrino.Version'] = "Padrino-#{::Padrino::VERSION}" elsif defined?(::Sinatra) platform_info['Ruby.Sinatra.Version'] = "Sinatra-#{::Sinatra::VERSION}" end # Report the instrumented libraries platform_info['Ruby.Cassandra.Version'] = "Cassandra-#{::Cassandra.VERSION}" if defined?(::Cassandra) platform_info['Ruby.Dalli.Version'] = "Dalli-#{::Dalli::VERSION}" if defined?(::Dalli) platform_info['Ruby.Faraday.Version'] = "Faraday-#{::Faraday::VERSION}" if defined?(::Faraday) platform_info['Ruby.MemCache.Version'] = "MemCache-#{::MemCache::VERSION}" if defined?(::MemCache) platform_info['Ruby.Moped.Version'] = "Moped-#{::Moped::VERSION}" if defined?(::Moped) platform_info['Ruby.Redis.Version'] = "Redis-#{::Redis::VERSION}" if defined?(::Redis) platform_info['Ruby.Resque.Version'] = "Resque-#{::Resque::VERSION}" if defined?(::Resque) # Special case since the Mongo 1.x driver doesn't embed the version number in the gem directly if ::Gem.loaded_specs.key?('mongo') platform_info['Ruby.Mongo.Version'] = "Mongo-#{::Gem.loaded_specs['mongo'].version}" end # Report the server in use (if possible) if defined?(::Unicorn) platform_info['Ruby.AppContainer.Version'] = "Unicorn-#{::Unicorn::Const::UNICORN_VERSION}" elsif defined?(::Puma) platform_info['Ruby.AppContainer.Version'] = "Puma-#{::Puma::Const::PUMA_VERSION} (#{::Puma::Const::CODE_NAME})" elsif defined?(::PhusionPassenger) platform_info['Ruby.AppContainer.Version'] = "#{::PhusionPassenger::PACKAGE_NAME}-#{::PhusionPassenger::VERSION_STRING}" elsif defined?(::Thin) platform_info['Ruby.AppContainer.Version'] = "Thin-#{::Thin::VERSION::STRING} (#{::Thin::VERSION::CODENAME})" elsif defined?(::Mongrel) platform_info['Ruby.AppContainer.Version'] = "Mongrel-#{::Mongrel::Const::MONGREL_VERSION}" elsif defined?(::Mongrel2) platform_info['Ruby.AppContainer.Version'] = "Mongrel2-#{::Mongrel2::VERSION}" elsif defined?(::Trinidad) platform_info['Ruby.AppContainer.Version'] = "Trinidad-#{::Trinidad::VERSION}" elsif defined?(::WEBrick) platform_info['Ruby.AppContainer.Version'] = "WEBrick-#{::WEBrick::VERSION}" else platform_info['Ruby.AppContainer.Version'] = File.basename($PROGRAM_NAME) end rescue StandardError, ScriptError => e # Also rescue ScriptError (aka SyntaxError) in case one of the expected # version defines don't exist platform_info['Error'] = "Error in build_report: #{e.}" Oboe.logger.warn "[oboe/warn] Error in build_init_report: #{e.}" Oboe.logger.debug e.backtrace end platform_info end |
.class_method_alias(cls, method, name = nil) ⇒ Object
class_method_alias
Centralized utility method to alias a class method on an arbitrary class or module
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/oboe/util.rb', line 59 def class_method_alias(cls, method, name = nil) name ||= contextual_name(cls) if cls.singleton_methods.include? method.to_sym # Strip '!' or '?' from method if present safe_method_name = method.to_s.chop if method.to_s =~ /\?$|\!$/ safe_method_name ||= method without_oboe = "#{safe_method_name}_without_oboe" with_oboe = "#{safe_method_name}_with_oboe" # Only alias if we haven't done so already unless cls.singleton_methods.include? without_oboe.to_sym cls.singleton_class.send(:alias_method, without_oboe, "#{method}") cls.singleton_class.send(:alias_method, "#{method}", with_oboe) end else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument #{name}. Partial traces may occur." end end |
.contextual_name(cls) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/oboe/util.rb', line 10 def contextual_name(cls) # Attempt to infer a contextual name if not indicated # # For example: # ::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.to_s.split(/::/).last # => "AbstractMysqlAdapter" # cls.to_s.split(/::/).last rescue cls end |
.method_alias(cls, method, name = nil) ⇒ Object
method_alias
Centralized utility method to alias a method on an arbitrary class or module.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/oboe/util.rb', line 28 def method_alias(cls, method, name = nil) name ||= contextual_name(cls) if cls.method_defined?(method.to_sym) || cls.private_method_defined?(method.to_sym) # Strip '!' or '?' from method if present safe_method_name = method.to_s.chop if method.to_s =~ /\?$|\!$/ safe_method_name ||= method without_oboe = "#{safe_method_name}_without_oboe" with_oboe = "#{safe_method_name}_with_oboe" # Only alias if we haven't done so already unless cls.method_defined?(without_oboe.to_sym) || cls.private_method_defined?(without_oboe.to_sym) cls.class_eval do alias_method without_oboe, "#{method}" alias_method "#{method}", with_oboe end end else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument #{name}. Partial traces may occur." end end |
.prettify(x) ⇒ Object
prettify
Even to my surprise, ‘prettify’ is a real word: transitive v. To make pretty or prettier, especially in a superficial or insubstantial way.
from The American Heritage Dictionary of the English Language, 4th Edition
This method makes things ‘purty’ for reporting.
116 117 118 119 120 121 122 |
# File 'lib/oboe/util.rb', line 116 def prettify(x) if (x.to_s =~ /^#</) == 0 x.class.to_s else x.to_s end end |
.send_extend(target_cls, cls) ⇒ Object
send_extend
Centralized utility method to send an extend call for an arbitrary class
85 86 87 |
# File 'lib/oboe/util.rb', line 85 def send_extend(target_cls, cls) target_cls.send(:extend, cls) if defined?(target_cls) end |
.send_include(target_cls, cls) ⇒ Object
send_include
Centralized utility method to send a include call for an arbitrary class
94 95 96 |
# File 'lib/oboe/util.rb', line 94 def send_include(target_cls, cls) target_cls.send(:include, cls) if defined?(target_cls) end |
.static_asset?(path) ⇒ Boolean
static_asset?
Given a path, this method determines whether it is a static asset or not (based solely on filename)
104 105 106 |
# File 'lib/oboe/util.rb', line 104 def static_asset?(path) (path =~ /\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|ttf|woff|svg|less)$/i) end |