lib/oboe/util.rb in oboe-2.7.1.7-java vs lib/oboe/util.rb in oboe-2.7.2.fuchs1
- old
+ new
@@ -1,45 +1,47 @@
# Copyright (c) 2013 AppNeta, Inc.
# All rights reserved.
module Oboe
+ ##
+ # Provides utility methods for use while in the business
+ # of instrumenting code
module Util
class << self
def contextual_name(cls)
# Attempt to infer a contextual name if not indicated
#
# For example:
# ::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.to_s.split(/::/).last
# => "AbstractMysqlAdapter"
#
- begin
- cls.to_s.split(/::/).last
- rescue
- end
+ cls.to_s.split(/::/).last
+ rescue
+ cls
end
##
# method_alias
#
# Centralized utility method to alias a method on an arbitrary
# class or module.
#
- def method_alias(cls, method, name=nil)
+ def method_alias(cls, method, name = nil)
name ||= contextual_name(cls)
- if cls.method_defined? method.to_sym or cls.private_method_defined? method.to_sym
+ 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 or
- cls.private_method_defined? without_oboe.to_sym
+ 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
@@ -52,11 +54,11 @@
# class_method_alias
#
# Centralized utility method to alias a class method on an arbitrary
# class or module
#
- def class_method_alias(cls, method, name=nil)
+ 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
@@ -79,51 +81,121 @@
# send_extend
#
# Centralized utility method to send an extend call for an
# arbitrary class
def send_extend(target_cls, cls)
- if defined?(target_cls)
- target_cls.send(:extend, cls)
- end
+ target_cls.send(:extend, cls) if defined?(target_cls)
end
##
# send_include
#
# Centralized utility method to send a include call for an
# arbitrary class
def send_include(target_cls, cls)
- if defined?(target_cls)
- target_cls.send(:include, cls)
- end
+ target_cls.send(:include, cls) if defined?(target_cls)
end
##
# static_asset?
#
# Given a path, this method determines whether it is a static asset or not (based
# solely on filename)
#
def static_asset?(path)
- return (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)
+ (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
##
# 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
+ # from The American Heritage Dictionary of the English Language, 4th Edition
#
# This method makes things 'purty' for reporting.
def prettify(x)
if (x.to_s =~ /^#</) == 0
x.class.to_s
else
x.to_s
end
end
+ ##
+ # build_report
+ #
+ # Internal: Build a hash of KVs that reports on the status of the
+ # running environment.
+ def build_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.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.message}"
+
+ Oboe.logger.debug "Error in build_report: #{e.message}"
+ Oboe.logger.debug e.backtrace
+ end
+ platform_info
+ end
end
end
end
-