scout_rails 0.0.2 → 0.0.3.pre

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.
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.0.3.pre
2
+
3
+ * Removed dynamic ActiveRecord caller instrumentation
4
+ * Fixed issue that prevents the app from loading if ActiveRecord isn't used.
5
+
1
6
  # 0.0.2
2
7
 
3
8
  Doesn't prevent app from loading if no configuration exists for the current environment.
@@ -22,10 +22,6 @@ module ScoutRails
22
22
  attr_accessor :options # options passed to the agent when +#start+ is called.
23
23
  attr_accessor :metric_lookup # Hash used to lookup metric ids based on their name and scope
24
24
 
25
- # Hash of class (values are Sets of method names) that should be instrumented by examining
26
- # the ActiveRecord call stack.
27
- attr_accessor :dynamic_instruments
28
-
29
25
  # All access to the agent is thru this class method to ensure multiple Agent instances are not initialized per-Ruby process.
30
26
  def self.instance(options = {})
31
27
  @@instance ||= self.new(options)
@@ -40,7 +36,6 @@ module ScoutRails
40
36
  @store = ScoutRails::Store.new
41
37
  @layaway = ScoutRails::Layaway.new
42
38
  @config = ScoutRails::Config.new(options[:config_path])
43
- @dynamic_instruments = Hash.new
44
39
  @metric_lookup = Hash.new
45
40
  @process_cpu=ScoutRails::Instruments::Process::ProcessCpu.new(1) # TODO: the argument is the number of processors
46
41
  @process_memory=ScoutRails::Instruments::Process::ProcessMemory.new
@@ -134,22 +129,6 @@ module ScoutRails
134
129
  60
135
130
  end
136
131
 
137
- # Every time the worker thread completes, it calls this method
138
- # to add instruments to selected methods in the AR call stack.
139
- def add_dynamic_instruments
140
- dynamic_instruments.each do |class_name,to_instrument|
141
- klass = class_name.constantize
142
- klass.class_eval do
143
- if !klass.respond_to?(:instrument_method)
144
- include ::ScoutRails::Tracer
145
- end
146
- to_instrument.each do |m|
147
- self.instrument_method(m)
148
- end
149
- end
150
- end
151
- end
152
-
153
132
  # Creates the worker thread. The worker thread is a loop that runs continuously. It sleeps for +Agent#period+ and when it wakes,
154
133
  # processes data, either saving it to disk or reporting to Scout.
155
134
  def start_worker_thread(connection_options = {})
@@ -166,7 +145,6 @@ module ScoutRails
166
145
  now = Time.now
167
146
  end
168
147
  process_metrics
169
- add_dynamic_instruments
170
148
  while next_time <= now
171
149
  next_time += period
172
150
  end
@@ -20,29 +20,9 @@ module ScoutRails::Instruments
20
20
  end
21
21
  end
22
22
 
23
- # Searches for the first AR model in the call stack. If found, adds it to a Hash of
24
- # classes and methods to later instrument. Used to provide a better breakdown.
25
- def scout_instrument_caller(called)
26
- model_call = called.find { |call| call =~ /\/app\/models\/(.+)\.rb:\d+:in `(.+)'/ }
27
- if model_call and !model_call.include?("without_scout_instrument")
28
- set=ScoutRails::Agent.instance.dynamic_instruments[$1.camelcase] || Set.new
29
- ScoutRails::Agent.instance.dynamic_instruments[$1.camelcase] = (set << $2)
30
- end
31
- end
32
-
33
- # Only instrument the caller if dynamic_instruments isn't disabled. By default, it is enabled.
34
- def scout_dynamic?
35
- dynamic=ScoutRails::Agent.instance.config.settings['dynamic_instruments']
36
- dynamic.nil? or dynamic
37
- end
38
-
39
23
  def scout_ar_metric_name(sql,name)
40
24
  if name && (parts = name.split " ") && parts.size == 2
41
25
  model = parts.first
42
- # samples 10% of calls
43
- if scout_dynamic? and rand*10 < 1
44
- scout_instrument_caller(caller(10)[0..9]) # for performance, limits the number of call stack items to examine
45
- end
46
26
  operation = parts.last.downcase
47
27
  metric_name = case operation
48
28
  when 'load' then 'find'
@@ -74,7 +54,6 @@ def add_instruments
74
54
  ActiveRecord::Base.class_eval do
75
55
  include ::ScoutRails::Tracer
76
56
  end
77
- ScoutRails::Agent.instance.logger.debug "Dynamic instrumention is #{ActiveRecord::Base.connection.scout_dynamic? ? 'enabled' : 'disabled'}"
78
57
  end
79
58
  end
80
59
 
@@ -1,3 +1,3 @@
1
1
  module ScoutRails
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3.pre"
3
3
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3.pre
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Derek Haynes
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-09 00:00:00.000000000 Z
13
+ date: 2012-05-16 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Monitors a Ruby on Rails application and reports detailed metrics on
16
16
  performance to Scout, a hosted monitoring service.
@@ -60,9 +60,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
60
60
  required_rubygems_version: !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
- - - ! '>='
63
+ - - ! '>'
64
64
  - !ruby/object:Gem::Version
65
- version: '0'
65
+ version: 1.3.1
66
66
  requirements: []
67
67
  rubyforge_project: scout_rails
68
68
  rubygems_version: 1.8.10