memory_tracker 1.0.6 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -5,9 +5,6 @@ source "https://rubygems.org"
5
5
  # development dependencies will be added by default to the :development group.
6
6
  gemspec
7
7
 
8
- # jquery-rails is used by the dummy application
9
- gem "jquery-rails"
10
-
11
8
  # Declare any dependencies that are still in development here instead of in
12
9
  # your gemspec. These might include edge Rails or gems from your path or
13
10
  # Git. Remember to move these dependencies to your gemspec before releasing
data/Gemfile.lock CHANGED
@@ -1,8 +1,20 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ memory_tracker (1.0.6)
5
+ activesupport
6
+ sys-proctable
7
+
1
8
  GEM
2
- remote: http://rubygems.org/
9
+ remote: https://rubygems.org/
3
10
  specs:
4
- addressable (2.3.5)
5
- builder (3.2.2)
11
+ activesupport (4.0.1)
12
+ i18n (~> 0.6, >= 0.6.4)
13
+ minitest (~> 4.2)
14
+ multi_json (~> 1.3)
15
+ thread_safe (~> 0.1)
16
+ tzinfo (~> 0.3.37)
17
+ atomic (1.1.14)
6
18
  columnize (0.3.6)
7
19
  debugger (1.6.2)
8
20
  columnize (>= 0.3.1)
@@ -11,44 +23,10 @@ GEM
11
23
  debugger-linecache (1.2.0)
12
24
  debugger-ruby_core_source (1.2.3)
13
25
  diff-lcs (1.2.4)
14
- faraday (0.8.8)
15
- multipart-post (~> 1.2.0)
16
- git (1.2.6)
17
- github_api (0.10.1)
18
- addressable
19
- faraday (~> 0.8.1)
20
- hashie (>= 1.2)
21
- multi_json (~> 1.4)
22
- nokogiri (~> 1.5.2)
23
- oauth2
24
- hashie (2.0.5)
25
- highline (1.6.20)
26
- httpauth (0.2.0)
27
- jeweler (1.8.8)
28
- builder
29
- bundler (~> 1.0)
30
- git (>= 1.2.5)
31
- github_api (= 0.10.1)
32
- highline (>= 1.6.15)
33
- nokogiri (= 1.5.10)
34
- rake
35
- rdoc
26
+ i18n (0.6.5)
36
27
  json (1.8.1)
37
- jwt (0.1.8)
38
- multi_json (>= 1.5)
28
+ minitest (4.7.5)
39
29
  multi_json (1.8.2)
40
- multi_xml (0.5.5)
41
- multipart-post (1.2.0)
42
- nokogiri (1.5.10)
43
- oauth2 (0.9.2)
44
- faraday (~> 0.8)
45
- httpauth (~> 0.2)
46
- jwt (~> 0.1.4)
47
- multi_json (~> 1.0)
48
- multi_xml (~> 0.5)
49
- rack (~> 1.2)
50
- rack (1.5.2)
51
- rake (10.1.0)
52
30
  rdoc (3.12.2)
53
31
  json (~> 1.4)
54
32
  rspec (2.14.1)
@@ -60,6 +38,9 @@ GEM
60
38
  diff-lcs (>= 1.1.3, < 2.0)
61
39
  rspec-mocks (2.14.4)
62
40
  sys-proctable (0.9.3)
41
+ thread_safe (0.1.3)
42
+ atomic
43
+ tzinfo (0.3.38)
63
44
 
64
45
  PLATFORMS
65
46
  ruby
@@ -67,7 +48,6 @@ PLATFORMS
67
48
  DEPENDENCIES
68
49
  bundler (~> 1.0)
69
50
  debugger
70
- jeweler (~> 1.8.7)
51
+ memory_tracker!
71
52
  rdoc (~> 3.12)
72
53
  rspec (~> 2.14.0)
73
- sys-proctable
data/README.md CHANGED
@@ -7,8 +7,18 @@ MemoryTracker collects, analyzes and reports memory usage data of each controlle
7
7
  * Display stats on every controller action of the application in a engine webpage embedded in the gem.
8
8
 
9
9
  # Dashboard
10
+ ## Screenshot
10
11
  The dashboard is at /memtracker in the host application (but you need to mount the engine in the app first, see below).
11
- ![Dashboard snapshot](https://github.com/plerohellec/memory_tracker/tree/master/docs/memory_tracker_dashboard.png?raw=true)
12
+
13
+ [Dashboard snapshot](https://raw.github.com/plerohellec/memory_tracker/master/docs/memory_tracker_dashboard.png)
14
+
15
+ That's where the collected statistics are displayed.
16
+
17
+ ## What to look for?
18
+ * Controller actions that have a non zero "heap used" value. Those actions required more memory than was available in the currently allocated heaps.
19
+ * Controller actions that have a "total_allocated_object" value N times higher than the average.
20
+ * Controller actions that trigger the garbage collector frequently. That the "count" value in the dashboard.
21
+
12
22
 
13
23
  # How?
14
24
  MemoryTracker uses system memory data and Ruby garbage collector statistics to find the memory currently used by The Rails processes, how many objects were allocated in Ruby heaps, how many heaps were created and how many times the garbage collector ran. The MemoryTracker middleware captures the data before and after each HHTP request and saves the deltas per controller/action in a variety of stores.
@@ -20,10 +30,34 @@ MemoryTracker currently comes with 3 stores.
20
30
 
21
31
  * The InMemoryStore keeps counters in memory for the process where it runs. This store in itself uses very little memory as it only keeps a set of counters per controller/action in the application. Since it doesn't do any IO, it is also extremely fast. The data is immediately available without any need for a background aggregation tasks.
22
32
 
23
- * The GcStatLogfile store simply write memory stats to a log file called '#{Rails.root}/log/memtracker_gcstat.log' after each HTTP request.
33
+ * The GcStatLogfile store simply writes memory stats to a log file called '#{Rails.root}/log/memtracker_gcstat.log' after each HTTP request.
24
34
 
25
35
  * The UrlLogfileStore also stores data in a log file ('#{Rails.root}/log/memtracker_urls.log') but instead of writing the raw memory data, it records the URL that was requested along with the memory deltas between the current request and the previous one. It also highlights the urls where the deltas were the greatest. It's sometimes interesting to browse through this file URLs that are particularly greedy.
26
36
 
37
+ # Config file
38
+ [memory_tracker.yml](https://github.com/plerohellec/memory_tracker/blob/master/config/memory_tracker.yml)
39
+
40
+ The config file is optional. If you choose to write one, place it in "#{Rails.root}/config".
41
+ In the absence of a custom config file, memory_tracker will fallback to the file linked above in the gem.
42
+
43
+ By creating you own config file, you can choose which stores are enabled and tune them. By default all stores are enabled. Here is a sample config file that enables only the InMemoryStore with a 4 hour long data window:
44
+
45
+ ```yml
46
+ defaults: &defaults
47
+ stores:
48
+ - name: memory
49
+ window_length: 14400
50
+
51
+
52
+ production:
53
+ <<: *defaults
54
+
55
+ development:
56
+ <<: *defaults
57
+
58
+ test:
59
+ <<: *defaults
60
+ ```
27
61
 
28
62
  # Enabling MemoryTracker
29
63
  Add it to your Gemfile:
@@ -39,6 +73,7 @@ Once the app is running, go to /memtracker to review the list of controller acti
39
73
  # Requirements
40
74
  The gem has been tested and is compatible with:
41
75
  * Ruby 2.0
76
+ * Ruby 1.9 but 1.9 GC.stat does not include the total_allocated_object number so its value remains at 0 in MemoryTracker.
42
77
  * Rails 3.2
43
78
 
44
79
  # Tips
@@ -52,7 +87,7 @@ The gem has been tested and is compatible with:
52
87
  # Coming soon
53
88
  * Redis store.
54
89
  * Store and report the most expensive URLs.
55
- * Support for Ruby 1.9 and Rails 4.
90
+ * Support for Rails 4 (it might already work, it's just not been tested yet).
56
91
 
57
92
  # Contributing to memory_tracker
58
93
 
@@ -32,7 +32,7 @@
32
32
  </table>
33
33
 
34
34
  <h2>Legend</h2>
35
- <p>All numbers are average per controller action.</p>
35
+ <p>All numbers are average per controller action HTTP request served.</p>
36
36
  <i>
37
37
  <ul>
38
38
  <li>num: number of HTTP requests</li>
@@ -5,17 +5,40 @@ module MemoryTracker
5
5
  engine_base_dir = File.expand_path("../../..", __FILE__)
6
6
  app_base_dir = File.expand_path("../../../app", __FILE__)
7
7
  lib_base_dir = File.expand_path("../../../lib", __FILE__)
8
+ config_base_dir = File.expand_path("../../../config", __FILE__)
8
9
 
9
10
  config.autoload_paths << lib_base_dir
10
11
 
12
+
13
+ initializer "memory_tracker.load_config" do |app|
14
+ app_config_file_path = "#{app.root}/config/memory_tracker.yml"
15
+ gem_config_file_path = "#{config_base_dir}/memory_tracker.yml"
16
+ if File.exist?(app_config_file_path)
17
+ config_file_path = app_config_file_path
18
+ elsif File.exist?(gem_config_file_path)
19
+ config_file_path = gem_config_file_path
20
+ end
21
+
22
+ if config_file_path
23
+ Rails.logger.debug "Reading #{config_file_path}"
24
+ config = YAML.load_file(config_file_path)
25
+ config = config.fetch(Rails.env) { raise "#{Rails.env} environment key is missing from #{config_file_path}" }
26
+ MemoryTracker.instance.config = ActiveSupport::HashWithIndifferentAccess.new(config)
27
+ end
28
+ end
29
+
11
30
  initializer "memory_tracker.add_middleware" do |app|
12
31
  app.middleware.use MemoryTracker::Middleware
13
32
  end
14
33
 
15
34
  initializer "memory_tracker.setup_stores" do |app|
16
- MemoryTracker.instance.add_store(Stores::UrlLogfileStore.new(ActiveSupport::BufferedLogger, "#{Rails.root}/log/memtracker_urls.log"))
17
- MemoryTracker.instance.add_store(Stores::GcstatLogfileStore.new(ActiveSupport::BufferedLogger, "#{Rails.root}/log/memtracker_gcstat.log"))
18
- MemoryTracker.instance.add_store(Stores::InMemoryStore::Manager.new)
35
+ if MemoryTracker.instance.config
36
+ MemoryTracker.instance.config[:stores].each do |store|
37
+ Stores::Loader.enable_store(MemoryTracker.instance, store)
38
+ end
39
+ else
40
+ Stores::Loader.enable_all(MemoryTracker.instance)
41
+ end
19
42
  end
20
43
  end
21
44
  end
@@ -3,12 +3,12 @@ module MemoryTracker
3
3
  include Singleton
4
4
  include Enumerable
5
5
 
6
- attr_accessor :gcstat_logger
7
-
6
+ attr_accessor :config
7
+
8
8
  def stores
9
9
  @stores ||= {}
10
10
  end
11
-
11
+
12
12
  def add_store(store)
13
13
  stores[store.name] = store
14
14
  end
@@ -29,19 +29,6 @@ module MemoryTracker
29
29
  stores[store_name].stats
30
30
  end
31
31
 
32
- def self.track_block(*args)
33
- self.instance.track_block(*args)
34
- end
35
-
36
- def track_block(name, &block)
37
- raise ArgumentError unless block_given?
38
- before = GC.stat
39
- ret = yield
40
- after = GC.stat
41
- gcstat_logger.debug "gcstat diff for #{name}: #{GcStat.gcdiff(before, after)}"
42
- ret
43
- end
44
-
45
32
  private
46
33
 
47
34
  def each_store
@@ -1,13 +1,14 @@
1
1
  module MemoryTracker
2
2
  module Stores
3
- class GcstatLogfileStore
4
- def initialize(logger_class, logfile_path)
5
- @logger = logger_class.new(logfile_path)
6
- @num_lines = 0
7
- end
3
+ class GcstatLogfileStore < Base
4
+ register_store :gcstat_logfile
8
5
 
9
- def name
10
- :gcstat_logfile
6
+ def initialize(opts)
7
+ logger_class = opts.fetch(:logger_class, 'ActiveSupport::BufferedLogger')
8
+ filename = opts.fetch(:filename, "#{Rails.root}/log/memtracker_gcstat.log")
9
+
10
+ @logger = logger_class.constantize.new(filename)
11
+ @num_lines = 0
11
12
  end
12
13
 
13
14
  def push(request)
@@ -1,16 +1,16 @@
1
1
  module MemoryTracker
2
2
  module Stores
3
3
  module InMemoryStore
4
- class Manager
5
- def initialize(window_length = 60*60*4)
6
- @length = window_length
4
+ class Manager < Base
5
+ register_store :memory
6
+
7
+ def initialize(opts = {})
8
+ @length = opts.fetch(:window_length, 60*60*4)
9
+
7
10
  @window1 = StatInterval.new(Time.now - @length/2, @length)
8
11
  @window2 = StatInterval.new(Time.now, @length)
9
12
  end
10
13
 
11
- def name
12
- :memory
13
- end
14
14
 
15
15
  def push(request)
16
16
  rotate_windows
@@ -1,17 +1,17 @@
1
1
  module MemoryTracker
2
2
  module Stores
3
- class UrlLogfileStore
4
- def initialize(logger_class, logfile_path)
5
- @logger = logger_class.new(logfile_path)
6
- end
3
+ class UrlLogfileStore < Base
4
+ register_store :url_logfile
5
+
6
+ def initialize(opts)
7
+ logger_class = opts.fetch(:logger_class, 'ActiveSupport::BufferedLogger')
8
+ filename = opts.fetch(:filename, "#{Rails.root}/log/memtracker_urls.log")
7
9
 
8
- def name
9
- :url_logfile
10
+ @logger = logger_class.constantize.new(filename)
10
11
  end
11
12
 
12
13
  def push(request)
13
14
  @request = request
14
-
15
15
  write_request_log
16
16
  end
17
17
 
@@ -1,3 +1,3 @@
1
1
  module MemoryTracker
2
- VERSION = "1.0.6"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -57,6 +57,7 @@ Gem::Specification.new do |s|
57
57
  s.add_development_dependency(%q<rspec>, ["~> 2.14.0"])
58
58
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
59
59
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
60
+ s.add_dependency('activesupport')
60
61
 
61
62
  else
62
63
  s.add_dependency(%q<sys-proctable>, [">= 0"])
@@ -64,6 +65,7 @@ Gem::Specification.new do |s|
64
65
  s.add_dependency(%q<rspec>, ["~> 2.14.0"])
65
66
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
66
67
  s.add_dependency(%q<bundler>, ["~> 1.0"])
68
+ s.add_dependency('activesupport')
67
69
 
68
70
  end
69
71
  else
@@ -72,5 +74,6 @@ Gem::Specification.new do |s|
72
74
  s.add_dependency(%q<rspec>, ["~> 2.14.0"])
73
75
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
74
76
  s.add_dependency(%q<bundler>, ["~> 1.0"])
77
+ s.add_dependency('activesupport')
75
78
  end
76
79
  end
@@ -1,10 +1,14 @@
1
+ require 'spec_helper'
2
+
1
3
  module MemoryTracker
2
4
  module Stores
3
5
  describe GcstatLogfileStore do
4
6
  before :each do
5
- logger_class = double("logger_class")
7
+ logger_class_name = double("logger_class_name")
8
+ logger_class = double("logger_class")
9
+ allow(logger_class_name).to receive(:constantize) { logger_class }
6
10
  allow(logger_class).to receive(:new)
7
- @logstore = GcstatLogfileStore.new logger_class, "foo/log"
11
+ @logstore = GcstatLogfileStore.new(:logger_class => logger_class_name, :filename => "foo/log")
8
12
  end
9
13
 
10
14
  it 'implements the store role' do
@@ -38,13 +38,13 @@ module MemoryTracker
38
38
  end
39
39
 
40
40
  it 'should respond to name' do
41
- manager = Manager.new(60)
41
+ manager = Manager.new(:window_length => 60)
42
42
  manager.should respond_to(:name)
43
43
  end
44
44
 
45
45
  it 'should return stats from older window' do
46
46
  Time.stub(:now).and_return(start_time)
47
- manager = Manager.new(60)
47
+ manager = Manager.new(:window_length => 60)
48
48
  request = Request.new(@env)
49
49
  stub_gcstat_delta('Boat', 'sail')
50
50
  manager.push(request.close)
@@ -64,7 +64,7 @@ module MemoryTracker
64
64
 
65
65
  it 'should rotate windows' do
66
66
  Time.stub(:now).and_return(start_time)
67
- manager = Manager.new(60)
67
+ manager = Manager.new(:window_length => 60)
68
68
  request = Request.new(@env)
69
69
  stub_gcstat_delta('Boat', 'sail')
70
70
  manager.push(request.close)
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ module MemoryTracker
4
+ module Stores
5
+ describe Loader do
6
+ context :register_store do
7
+ it 'should record stores by name' do
8
+ store_class = double('my_store_class')
9
+ Loader.register_store :my_store, store_class
10
+ Loader.store_classes.should include(:my_store)
11
+ end
12
+ end
13
+
14
+ context :enable_store do
15
+ it 'should send add_store to memory_tracker' do
16
+ store_class = double('my_store_class')
17
+ store = double('my_store')
18
+ allow(store_class).to receive(:new) { store }
19
+ memory_tracker = double('memory_tracker')
20
+ memory_tracker.should_receive(:add_store).with(store)
21
+
22
+ Loader.register_store :my_store, store_class
23
+ Loader.enable_store(memory_tracker, :name => :my_store)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,10 +1,14 @@
1
+ require 'spec_helper'
2
+
1
3
  module MemoryTracker
2
4
  module Stores
3
5
  describe UrlLogfileStore do
4
6
  before :each do
5
- logger_class = double("logger_class")
7
+ logger_class_name = double("logger_class_name")
8
+ logger_class = double("logger_class")
9
+ allow(logger_class_name).to receive(:constantize) { logger_class }
6
10
  allow(logger_class).to receive(:new)
7
- @logstore = UrlLogfileStore.new logger_class, "foo/log"
11
+ @logstore = UrlLogfileStore.new(:logger_class => logger_class_name, :filename => "foo/log")
8
12
  end
9
13
 
10
14
  it 'implements the store role' do
data/spec/spec_helper.rb CHANGED
@@ -3,12 +3,15 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
 
4
4
  require 'singleton'
5
5
 
6
+ require 'active_support/core_ext'
6
7
  require 'rspec'
7
8
  require 'sys/proctable'
8
9
  require 'memory_tracker'
9
10
  require 'memory_tracker/gc_stat'
10
11
  require 'memory_tracker/request'
11
12
  require 'memory_tracker/memory_tracker'
13
+ require 'memory_tracker/stores/base'
14
+ require 'memory_tracker/stores/loader'
12
15
  require 'memory_tracker/stores/in_memory_store'
13
16
  require 'memory_tracker/stores/gcstat_logfile_store'
14
17
  require 'memory_tracker/stores/url_logfile_store'
@@ -33,3 +36,10 @@ RSpec.configure do |config|
33
36
  # config.mock_with :rr
34
37
  # config.mock_with :rspec
35
38
  end
39
+
40
+ class Rails
41
+ def self.root
42
+ ''
43
+ end
44
+ end
45
+
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memory_tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Philippe Le Rohellec
@@ -13,34 +14,39 @@ dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: sys-proctable
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: debugger
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rspec
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ~>
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: rdoc
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ~>
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ~>
67
76
  - !ruby/object:Gem::Version
@@ -69,6 +78,7 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: bundler
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ~>
74
84
  - !ruby/object:Gem::Version
@@ -76,10 +86,27 @@ dependencies:
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ~>
81
92
  - !ruby/object:Gem::Version
82
93
  version: '1.0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: activesupport
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
83
110
  description: Collect and analyze memory usage data for each individual Rails action
84
111
  controller.
85
112
  email: philippe@lerohellec.com
@@ -115,30 +142,32 @@ files:
115
142
  - spec/spec_helper.rb
116
143
  - spec/lib/stores/gcstat_logfile_store_spec.rb
117
144
  - spec/lib/stores/in_memory_store_spec.rb
145
+ - spec/lib/stores/loader_spec.rb
118
146
  - spec/lib/stores/url_logfile_store_spec.rb
119
147
  - spec/lib/request_spec.rb
120
148
  - spec/lib/memory_tracker_spec.rb
121
149
  homepage: http://github.com/plerohellec/memory_tracker
122
150
  licenses:
123
151
  - MIT
124
- metadata: {}
125
152
  post_install_message:
126
153
  rdoc_options: []
127
154
  require_paths:
128
155
  - lib
129
156
  required_ruby_version: !ruby/object:Gem::Requirement
157
+ none: false
130
158
  requirements:
131
- - - '>='
159
+ - - ! '>='
132
160
  - !ruby/object:Gem::Version
133
161
  version: '0'
134
162
  required_rubygems_version: !ruby/object:Gem::Requirement
163
+ none: false
135
164
  requirements:
136
- - - '>='
165
+ - - ! '>='
137
166
  - !ruby/object:Gem::Version
138
167
  version: '0'
139
168
  requirements: []
140
169
  rubyforge_project:
141
- rubygems_version: 2.0.3
170
+ rubygems_version: 1.8.25
142
171
  signing_key:
143
172
  specification_version: 4
144
173
  summary: Rails memory allocations tracker
@@ -146,6 +175,7 @@ test_files:
146
175
  - spec/spec_helper.rb
147
176
  - spec/lib/stores/gcstat_logfile_store_spec.rb
148
177
  - spec/lib/stores/in_memory_store_spec.rb
178
+ - spec/lib/stores/loader_spec.rb
149
179
  - spec/lib/stores/url_logfile_store_spec.rb
150
180
  - spec/lib/request_spec.rb
151
181
  - spec/lib/memory_tracker_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: adeca7dfc23c7e1fc6ba5c3411ed54639ca30b87
4
- data.tar.gz: b94c7d23aa9f03912cdc4be6c025860428e97aa7
5
- SHA512:
6
- metadata.gz: 67c83299b9e960365b3a8429402b2b05f63c8b4baeb589ceef5385d2f24c63be1d3d285629b35f718a3c0bac93953e88a65d732c31d73df6cae1498a126a6f22
7
- data.tar.gz: d7d17859238f52bfac1cb69a4c00761444f64a08f339bed9c0c7c45f941edc5db05e6b058e1f9c9f2008ccb771b9b547e5f07da9a9ce7dbe68dcb85dda65c0a7