Class: ScoutApm::Environment
- Inherits:
-
Object
- Object
- ScoutApm::Environment
- Includes:
- Singleton
- Defined in:
- lib/scout_apm/environment.rb
Constant Summary collapse
- STDOUT_LOGGER =
begin l = Logger.new(STDOUT) l.level = Logger::INFO l end
- SERVER_INTEGRATIONS =
I’ve put Thin and Webrick last as they are often used in development and included in Gemfiles but less likely used in production.
[ ScoutApm::ServerIntegrations::Passenger.new(STDOUT_LOGGER), ScoutApm::ServerIntegrations::Unicorn.new(STDOUT_LOGGER), ScoutApm::ServerIntegrations::Rainbows.new(STDOUT_LOGGER), ScoutApm::ServerIntegrations::Puma.new(STDOUT_LOGGER), ScoutApm::ServerIntegrations::Thin.new(STDOUT_LOGGER), ScoutApm::ServerIntegrations::Webrick.new(STDOUT_LOGGER), ScoutApm::ServerIntegrations::Null.new(STDOUT_LOGGER), # must be last ]
- BACKGROUND_JOB_INTEGRATIONS =
[ ScoutApm::BackgroundJobIntegrations::Resque.new, ScoutApm::BackgroundJobIntegrations::Sidekiq.new, ScoutApm::BackgroundJobIntegrations::Shoryuken.new, ScoutApm::BackgroundJobIntegrations::Sneakers.new, ScoutApm::BackgroundJobIntegrations::DelayedJob.new, ScoutApm::BackgroundJobIntegrations::Que.new, ScoutApm::BackgroundJobIntegrations::Faktory.new, ]
- FRAMEWORK_INTEGRATIONS =
[ ScoutApm::FrameworkIntegrations::Rails2.new, ScoutApm::FrameworkIntegrations::Rails3Or4.new, ScoutApm::FrameworkIntegrations::Sinatra.new, ScoutApm::FrameworkIntegrations::Ruby.new, # Fallback if none match ]
- PLATFORM_INTEGRATIONS =
[ ScoutApm::PlatformIntegrations::Heroku.new, ScoutApm::PlatformIntegrations::CloudFoundry.new, ScoutApm::PlatformIntegrations::Server.new, ]
Instance Method Summary collapse
-
#app_server ⇒ Object
App server’s name (symbol).
-
#app_server_integration(force = false) ⇒ Object
Returns the whole integration object This needs to be improved.
- #application_name ⇒ Object
- #background_job_integrations ⇒ Object
- #database_engine ⇒ Object
- #env ⇒ Object
-
#forking? ⇒ Boolean
If forking, don’t start worker thread in the master process.
- #framework ⇒ Object
- #framework_integration ⇒ Object
- #framework_root ⇒ Object
- #git_revision ⇒ Object
- #hostname ⇒ Object
-
#interactive? ⇒ Boolean
If both stdin & stdout are interactive and the Rails::Console constant is defined.
- #jruby? ⇒ Boolean
-
#os ⇒ Object
Returns a string representation of the OS (ex: darwin, linux).
- #platform_integration ⇒ Object
- #processors ⇒ Object
- #raw_database_adapter ⇒ Object
- #root ⇒ Object
-
#rubinius? ⇒ Boolean
ruby checks.
- #ruby_187? ⇒ Boolean
- #ruby_19? ⇒ Boolean
- #ruby_2? ⇒ Boolean
- #ruby_3? ⇒ Boolean
- #ruby_minor ⇒ Object
- #scm_subdirectory ⇒ Object
-
#sinatra? ⇒ Boolean
framework checks.
-
#supports_kwarg_delegation? ⇒ Boolean
Returns true if this Ruby version makes positional and keyword arguments incompatible.
-
#supports_module_prepend? ⇒ Boolean
Returns true if this Ruby version supports Module#prepend.
Instance Method Details
#app_server ⇒ Object
App server’s name (symbol)
138 139 140 |
# File 'lib/scout_apm/environment.rb', line 138 def app_server app_server_integration.name end |
#app_server_integration(force = false) ⇒ Object
Returns the whole integration object This needs to be improved. Frequently, multiple app servers gem are present and which ever is checked first becomes the designated app server.
Next step: (1) list out all detected app servers (2) install hooks for those that need it (passenger, rainbows, unicorn).
132 133 134 135 |
# File 'lib/scout_apm/environment.rb', line 132 def app_server_integration(force=false) @app_server = nil if force @app_server ||= SERVER_INTEGRATIONS.detect{ |integration| integration.present? } end |
#application_name ⇒ Object
65 66 67 68 69 |
# File 'lib/scout_apm/environment.rb', line 65 def application_name Agent.instance.context.config.value("name") || framework_integration.application_name || "App" end |
#background_job_integrations ⇒ Object
148 149 150 151 152 153 154 |
# File 'lib/scout_apm/environment.rb', line 148 def background_job_integrations if Agent.instance.context.config.value("enable_background_jobs") @background_job_integrations ||= BACKGROUND_JOB_INTEGRATIONS.select {|integration| integration.present?} else [] end end |
#database_engine ⇒ Object
71 72 73 |
# File 'lib/scout_apm/environment.rb', line 71 def database_engine framework_integration.database_engine end |
#env ⇒ Object
49 50 51 |
# File 'lib/scout_apm/environment.rb', line 49 def env @env ||= framework_integration.env end |
#forking? ⇒ Boolean
If forking, don’t start worker thread in the master process. Since it’s started as a Thread, it won’t survive the fork.
144 145 146 |
# File 'lib/scout_apm/environment.rb', line 144 def forking? app_server_integration.forking? || (background_job_integration && background_job_integration.forking?) end |
#framework ⇒ Object
53 54 55 |
# File 'lib/scout_apm/environment.rb', line 53 def framework framework_integration.name end |
#framework_integration ⇒ Object
57 58 59 |
# File 'lib/scout_apm/environment.rb', line 57 def framework_integration @framework ||= FRAMEWORK_INTEGRATIONS.detect{ |integration| integration.present? } end |
#framework_root ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/scout_apm/environment.rb', line 104 def framework_root if override_root = Agent.instance.context.config.value("application_root") return override_root end if framework == :rails RAILS_ROOT.to_s elsif framework == :rails3_or_4 Rails.root elsif framework == :sinatra Sinatra::Application.root || "." else '.' end end |
#git_revision ⇒ Object
123 124 125 |
# File 'lib/scout_apm/environment.rb', line 123 def git_revision @git_revision ||= ScoutApm::GitRevision.new(Agent.instance.context) end |
#hostname ⇒ Object
119 120 121 |
# File 'lib/scout_apm/environment.rb', line 119 def hostname @hostname ||= Agent.instance.context.config.value("hostname") || platform_integration.hostname end |
#interactive? ⇒ Boolean
If both stdin & stdout are interactive and the Rails::Console constant is defined
157 158 159 |
# File 'lib/scout_apm/environment.rb', line 157 def interactive? defined?(::Rails::Console) && $stdout.isatty && $stdin.isatty end |
#jruby? ⇒ Boolean
167 168 169 |
# File 'lib/scout_apm/environment.rb', line 167 def jruby? defined?(JRuby) end |
#os ⇒ Object
Returns a string representation of the OS (ex: darwin, linux)
207 208 209 210 211 212 213 214 215 216 |
# File 'lib/scout_apm/environment.rb', line 207 def os return @os if @os raw_os = RbConfig::CONFIG['target_os'] match = raw_os.match(/([a-z]+)/) if match @os = match[1] else @os = raw_os end end |
#platform_integration ⇒ Object
61 62 63 |
# File 'lib/scout_apm/environment.rb', line 61 def platform_integration @platform ||= PLATFORM_INTEGRATIONS.detect{ |integration| integration.present? } end |
#processors ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/scout_apm/environment.rb', line 79 def processors @processors ||= begin proc_file = '/proc/cpuinfo' processors = if !File.exist?(proc_file) 1 else lines = File.read("/proc/cpuinfo").lines.to_a lines.grep(/^processor\s*:/i).size end [processors, 1].compact.max end end |
#raw_database_adapter ⇒ Object
75 76 77 |
# File 'lib/scout_apm/environment.rb', line 75 def raw_database_adapter framework_integration.raw_database_adapter end |
#root ⇒ Object
100 101 102 |
# File 'lib/scout_apm/environment.rb', line 100 def root @root ||= framework_root end |
#rubinius? ⇒ Boolean
ruby checks
163 164 165 |
# File 'lib/scout_apm/environment.rb', line 163 def rubinius? RUBY_VERSION =~ /rubinius/i end |
#ruby_187? ⇒ Boolean
176 177 178 179 |
# File 'lib/scout_apm/environment.rb', line 176 def ruby_187? return @ruby_187 if defined?(@ruby_187) @ruby_187 = defined?(RUBY_VERSION) && RUBY_VERSION.match(/^1\.8\.7/) end |
#ruby_19? ⇒ Boolean
171 172 173 174 |
# File 'lib/scout_apm/environment.rb', line 171 def ruby_19? return @ruby_19 if defined?(@ruby_19) @ruby_19 = defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby" && RUBY_VERSION.match(/^1\.9/) end |
#ruby_2? ⇒ Boolean
181 182 183 184 |
# File 'lib/scout_apm/environment.rb', line 181 def ruby_2? return @ruby_2 if defined?(@ruby_2) @ruby_2 = defined?(RUBY_VERSION) && RUBY_VERSION.match(/^2/) end |
#ruby_3? ⇒ Boolean
186 187 188 189 |
# File 'lib/scout_apm/environment.rb', line 186 def ruby_3? return @ruby_3 if defined?(@ruby_3) @ruby_3 = defined?(RUBY_VERSION) && RUBY_VERSION.match(/^3/) end |
#ruby_minor ⇒ Object
191 192 193 194 |
# File 'lib/scout_apm/environment.rb', line 191 def ruby_minor return @ruby_minor if defined?(@ruby_minor) @ruby_minor = defined?(RUBY_VERSION) && RUBY_VERSION.split(".")[1].to_i end |
#scm_subdirectory ⇒ Object
92 93 94 95 96 97 98 |
# File 'lib/scout_apm/environment.rb', line 92 def scm_subdirectory @scm_subdirectory ||= if Agent.instance.context.config.value('scm_subdirectory').empty? '' else Agent.instance.context.config.value('scm_subdirectory').sub(/^\//, '') # Trim any leading slash end end |
#sinatra? ⇒ Boolean
framework checks
220 221 222 |
# File 'lib/scout_apm/environment.rb', line 220 def sinatra? framework_integration.name == :sinatra end |
#supports_kwarg_delegation? ⇒ Boolean
Returns true if this Ruby version makes positional and keyword arguments incompatible
202 203 204 |
# File 'lib/scout_apm/environment.rb', line 202 def supports_kwarg_delegation? ruby_3? || (ruby_2? && ruby_minor >= 7) end |
#supports_module_prepend? ⇒ Boolean
Returns true if this Ruby version supports Module#prepend.
197 198 199 |
# File 'lib/scout_apm/environment.rb', line 197 def supports_module_prepend? ruby_2? || ruby_3? end |