scout_rails 1.1.3 → 1.1.4.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,10 +17,12 @@ module ScoutRails
17
17
  if meta.metric_name =~ /\AController/
18
18
  controller_count += stats.call_count
19
19
  end
20
- end
21
- logger.debug "#{config.settings['name']} Delivering metrics for #{controller_count} requests."
20
+ end
21
+ sample, samples = store.fetch_and_reset_samples!
22
+ payload = Marshal.dump(:metrics => metrics, :sample => sample, :samples => samples)
23
+ logger.debug "#{config.settings['name']} Delivering payload [#{payload.size/1024} KB] for #{controller_count} requests and #{samples.size} slow transaction samples of durations: #{samples.map(&:total_call_time).join(',')}."
22
24
  response = post( checkin_uri,
23
- Marshal.dump(:metrics => metrics, :sample => store.sample),
25
+ payload,
24
26
  "Content-Type" => "application/json" )
25
27
  if response and response.is_a?(Net::HTTPSuccess)
26
28
  directives = Marshal.load(response.body)
@@ -29,9 +31,6 @@ module ScoutRails
29
31
  logger.info "Resetting metric_lookup."
30
32
  self.metric_lookup = Hash.new
31
33
  end
32
- store.transaction_sample_lock.synchronize do
33
- store.sample = nil
34
- end
35
34
  logger.debug "Metric Cache Size: #{metric_lookup.size}"
36
35
  end
37
36
  end
@@ -9,6 +9,7 @@ class ScoutRails::Store
9
9
  attr_accessor :transaction_hash
10
10
  attr_accessor :stack
11
11
  attr_accessor :sample
12
+ attr_accessor :samples # array of slow transaction samples
12
13
  attr_reader :transaction_sample_lock
13
14
 
14
15
  def initialize
@@ -19,6 +20,7 @@ class ScoutRails::Store
19
20
  @stack = Array.new
20
21
  # ensure background thread doesn't manipulate transaction sample while the store is.
21
22
  @transaction_sample_lock = Mutex.new
23
+ @samples = Array.new
22
24
  end
23
25
 
24
26
  # Called when the last stack item completes for the current transaction to clear
@@ -126,12 +128,28 @@ class ScoutRails::Store
126
128
  end
127
129
 
128
130
  # Stores the slowest transaction. This will be sent to the server.
131
+ # Includes the legacy single slow transaction and the array of samples.
129
132
  def store_sample(uri,transaction_hash,parent_meta,parent_stat,options = {})
130
133
  @transaction_sample_lock.synchronize do
131
134
  if parent_stat.total_call_time >= 2 and (@sample.nil? or (@sample and parent_stat.total_call_time > @sample.total_call_time))
132
135
  @sample = ScoutRails::TransactionSample.new(uri,parent_meta.metric_name,parent_stat.total_call_time,transaction_hash.dup)
133
136
  end
137
+ # tree map of all slow transactions
138
+ if parent_stat.total_call_time >= 2
139
+ @samples.push(ScoutRails::TransactionSample.new(uri,parent_meta.metric_name,parent_stat.total_call_time,transaction_hash.dup))
140
+ end
141
+ end
142
+ end
143
+
144
+ # Returns the slow samples and resets the values - used when reporting.
145
+ def fetch_and_reset_samples!
146
+ sample = @sample
147
+ samples = @samples
148
+ @transaction_sample_lock.synchronize do
149
+ self.sample = nil
150
+ self.samples = Array.new
134
151
  end
152
+ [sample,samples]
135
153
  end
136
154
 
137
155
  # Finds or creates the metric w/the given name in the metric_hash, and updates the time. Primarily used to
@@ -1,3 +1,3 @@
1
1
  module ScoutRails
2
- VERSION = "1.1.3"
2
+ VERSION = "1.1.4.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: 1.1.3
5
- prerelease:
4
+ version: 1.1.4.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: 2014-09-05 00:00:00.000000000 Z
13
+ date: 2015-06-12 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.
@@ -67,9 +67,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
67
67
  required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  none: false
69
69
  requirements:
70
- - - ! '>='
70
+ - - ! '>'
71
71
  - !ruby/object:Gem::Version
72
- version: '0'
72
+ version: 1.3.1
73
73
  requirements: []
74
74
  rubyforge_project: scout_rails
75
75
  rubygems_version: 1.8.23