memory_tracker 1.0.1 → 1.0.2
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.
- checksums.yaml +4 -4
- data/Gemfile +17 -13
- data/Rakefile +23 -33
- data/app/controllers/memory_tracker/application_controller.rb +4 -0
- data/app/controllers/memory_tracker/dashboards_controller.rb +3 -1
- data/config/routes.rb +1 -1
- data/lib/memory_tracker/engine.rb +2 -2
- data/lib/memory_tracker/middleware.rb +1 -1
- data/lib/memory_tracker.rb +3 -1
- data/memory_tracker.gemspec +13 -23
- metadata +12 -35
- data/VERSION +0 -1
- data/docs/design.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed7411c3ae8a1b418508a857bad90241f23b6d75
|
4
|
+
data.tar.gz: 3179b61d06cc3ced27d8028e9a6682ad209270a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66da2d7a7c95b15b208f216220db2fca964e11c5657a4120136523c7c51b5daa9034f0d372c1e86651955fad44dde80374976abdf80aa19e9f1ac639fe09f18c
|
7
|
+
data.tar.gz: 168ba701e08ca80c37fda873e32eef965a76e70b698d45a1d2192beabf0daa6f5c79ef3c41d1ba2d06687d639d08c610a60f4a5508924bb75fc3c6c2033f10bd
|
data/Gemfile
CHANGED
@@ -1,13 +1,17 @@
|
|
1
|
-
source "
|
2
|
-
|
3
|
-
gem
|
4
|
-
|
5
|
-
#
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
# Declare your gem's dependencies in memory_tracker.gemspec.
|
4
|
+
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
+
# development dependencies will be added by default to the :development group.
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
# jquery-rails is used by the dummy application
|
9
|
+
gem "jquery-rails"
|
10
|
+
|
11
|
+
# Declare any dependencies that are still in development here instead of in
|
12
|
+
# your gemspec. These might include edge Rails or gems from your path or
|
13
|
+
# Git. Remember to move these dependencies to your gemspec before releasing
|
14
|
+
# your gem to rubygems.org.
|
15
|
+
|
16
|
+
# To use debugger
|
17
|
+
# gem 'debugger'
|
data/Rakefile
CHANGED
@@ -1,30 +1,29 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler'
|
1
|
+
#!/usr/bin/env rake
|
5
2
|
begin
|
6
|
-
|
7
|
-
rescue
|
8
|
-
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
11
6
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
gem.homepage = "http://github.com/plerohellec/memory_tracker"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = %Q{Rails memory allocations tracker}
|
21
|
-
gem.description = %Q{Collect and analyze memory usage data for each individual Rails action controller.}
|
22
|
-
gem.email = "philippe@lerohellec.com"
|
23
|
-
gem.authors = ["Philippe Le Rohellec"]
|
24
|
-
# dependencies defined in Gemfile
|
25
|
-
gem.add_dependency 'sys-proctable'
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
26
13
|
end
|
27
|
-
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'MemoryTracker'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
load 'rails/tasks/engine.rake'
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
28
27
|
|
29
28
|
require 'rspec/core'
|
30
29
|
require 'rspec/core/rake_task'
|
@@ -39,12 +38,3 @@ end
|
|
39
38
|
|
40
39
|
task :default => :spec
|
41
40
|
|
42
|
-
require 'rdoc/task'
|
43
|
-
Rake::RDocTask.new do |rdoc|
|
44
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
45
|
-
|
46
|
-
rdoc.rdoc_dir = 'rdoc'
|
47
|
-
rdoc.title = "memory_tracker #{version}"
|
48
|
-
rdoc.rdoc_files.include('README*')
|
49
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
50
|
-
end
|
data/config/routes.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module MemoryTracker
|
2
|
-
class Engine < Rails::Engine
|
2
|
+
class Engine < ::Rails::Engine
|
3
3
|
|
4
|
-
|
4
|
+
isolate_namespace MemoryTracker
|
5
5
|
|
6
6
|
engine_base_dir = File.expand_path("../../..", __FILE__)
|
7
7
|
app_base_dir = File.expand_path("../../../app", __FILE__)
|
data/lib/memory_tracker.rb
CHANGED
data/memory_tracker.gemspec
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
5
2
|
|
3
|
+
# Maintain your gem's version:
|
4
|
+
require "memory_tracker/version"
|
5
|
+
|
6
|
+
# Describe your gem and declare its dependencies:
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "memory_tracker"
|
8
|
-
s.version =
|
9
|
+
s.version = MemoryTracker::VERSION
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
12
|
s.authors = ["Philippe Le Rohellec"]
|
12
13
|
s.date = "2013-11-15"
|
14
|
+
s.summary = "Rails memory allocations tracker"
|
13
15
|
s.description = "Collect and analyze memory usage data for each individual Rails action controller."
|
14
16
|
s.email = "philippe@lerohellec.com"
|
15
17
|
s.extra_rdoc_files = [
|
@@ -22,13 +24,12 @@ Gem::Specification.new do |s|
|
|
22
24
|
"LICENSE.txt",
|
23
25
|
"README.rdoc",
|
24
26
|
"Rakefile",
|
25
|
-
"
|
27
|
+
"app/controllers/memory_tracker/application_controller.rb",
|
26
28
|
"app/controllers/memory_tracker/dashboards_controller.rb",
|
27
29
|
"app/helpers/memory_tracker/dashboards_helper.rb",
|
28
30
|
"app/views/layouts/memory_tracker.html.erb",
|
29
31
|
"app/views/memory_tracker/dashboards/index.html.erb",
|
30
32
|
"config/routes.rb",
|
31
|
-
"docs/design.rb",
|
32
33
|
"lib/memory_tracker.rb",
|
33
34
|
"lib/memory_tracker/engine.rb",
|
34
35
|
"lib/memory_tracker/env.rb",
|
@@ -39,19 +40,12 @@ Gem::Specification.new do |s|
|
|
39
40
|
"lib/memory_tracker/stores/gcstat_logfile_store.rb",
|
40
41
|
"lib/memory_tracker/stores/in_memory_store.rb",
|
41
42
|
"lib/memory_tracker/stores/url_logfile_store.rb",
|
42
|
-
"memory_tracker.gemspec"
|
43
|
-
|
44
|
-
|
45
|
-
"spec/lib/stores/gcstat_logfile_store_spec.rb",
|
46
|
-
"spec/lib/stores/in_memory_store_spec.rb",
|
47
|
-
"spec/lib/stores/url_logfile_store_spec.rb",
|
48
|
-
"spec/spec_helper.rb"
|
49
|
-
]
|
43
|
+
"memory_tracker.gemspec"]
|
44
|
+
s.test_files = Dir["spec/**/*"]
|
45
|
+
|
50
46
|
s.homepage = "http://github.com/plerohellec/memory_tracker"
|
51
47
|
s.licenses = ["MIT"]
|
52
|
-
s.require_paths = ["lib"]
|
53
48
|
s.rubygems_version = "2.0.3"
|
54
|
-
s.summary = "Rails memory allocations tracker"
|
55
49
|
|
56
50
|
if s.respond_to? :specification_version then
|
57
51
|
s.specification_version = 4
|
@@ -62,16 +56,14 @@ Gem::Specification.new do |s|
|
|
62
56
|
s.add_development_dependency(%q<rspec>, ["~> 2.14.0"])
|
63
57
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
64
58
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
65
|
-
|
66
|
-
s.add_runtime_dependency(%q<sys-proctable>, [">= 0"])
|
59
|
+
|
67
60
|
else
|
68
61
|
s.add_dependency(%q<sys-proctable>, [">= 0"])
|
69
62
|
s.add_dependency(%q<debugger>, [">= 0"])
|
70
63
|
s.add_dependency(%q<rspec>, ["~> 2.14.0"])
|
71
64
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
72
65
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
73
|
-
|
74
|
-
s.add_dependency(%q<sys-proctable>, [">= 0"])
|
66
|
+
|
75
67
|
end
|
76
68
|
else
|
77
69
|
s.add_dependency(%q<sys-proctable>, [">= 0"])
|
@@ -79,8 +71,6 @@ Gem::Specification.new do |s|
|
|
79
71
|
s.add_dependency(%q<rspec>, ["~> 2.14.0"])
|
80
72
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
81
73
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
82
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
|
83
|
-
s.add_dependency(%q<sys-proctable>, [">= 0"])
|
84
74
|
end
|
85
75
|
end
|
86
76
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memory_tracker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philippe Le Rohellec
|
@@ -80,34 +80,6 @@ dependencies:
|
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: jeweler
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ~>
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.8.7
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ~>
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 1.8.7
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: sys-proctable
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - '>='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - '>='
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
83
|
description: Collect and analyze memory usage data for each individual Rails action
|
112
84
|
controller.
|
113
85
|
email: philippe@lerohellec.com
|
@@ -122,13 +94,12 @@ files:
|
|
122
94
|
- LICENSE.txt
|
123
95
|
- README.rdoc
|
124
96
|
- Rakefile
|
125
|
-
-
|
97
|
+
- app/controllers/memory_tracker/application_controller.rb
|
126
98
|
- app/controllers/memory_tracker/dashboards_controller.rb
|
127
99
|
- app/helpers/memory_tracker/dashboards_helper.rb
|
128
100
|
- app/views/layouts/memory_tracker.html.erb
|
129
101
|
- app/views/memory_tracker/dashboards/index.html.erb
|
130
102
|
- config/routes.rb
|
131
|
-
- docs/design.rb
|
132
103
|
- lib/memory_tracker.rb
|
133
104
|
- lib/memory_tracker/engine.rb
|
134
105
|
- lib/memory_tracker/env.rb
|
@@ -140,12 +111,12 @@ files:
|
|
140
111
|
- lib/memory_tracker/stores/in_memory_store.rb
|
141
112
|
- lib/memory_tracker/stores/url_logfile_store.rb
|
142
113
|
- memory_tracker.gemspec
|
143
|
-
- spec/
|
144
|
-
- spec/lib/request_spec.rb
|
114
|
+
- spec/spec_helper.rb
|
145
115
|
- spec/lib/stores/gcstat_logfile_store_spec.rb
|
146
116
|
- spec/lib/stores/in_memory_store_spec.rb
|
147
117
|
- spec/lib/stores/url_logfile_store_spec.rb
|
148
|
-
- spec/
|
118
|
+
- spec/lib/request_spec.rb
|
119
|
+
- spec/lib/memory_tracker_spec.rb
|
149
120
|
homepage: http://github.com/plerohellec/memory_tracker
|
150
121
|
licenses:
|
151
122
|
- MIT
|
@@ -170,4 +141,10 @@ rubygems_version: 2.0.3
|
|
170
141
|
signing_key:
|
171
142
|
specification_version: 4
|
172
143
|
summary: Rails memory allocations tracker
|
173
|
-
test_files:
|
144
|
+
test_files:
|
145
|
+
- spec/spec_helper.rb
|
146
|
+
- spec/lib/stores/gcstat_logfile_store_spec.rb
|
147
|
+
- spec/lib/stores/in_memory_store_spec.rb
|
148
|
+
- spec/lib/stores/url_logfile_store_spec.rb
|
149
|
+
- spec/lib/request_spec.rb
|
150
|
+
- spec/lib/memory_tracker_spec.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.0.1
|
data/docs/design.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
module MemoryTracker
|
2
|
-
class Middleware
|
3
|
-
end
|
4
|
-
|
5
|
-
class Engine
|
6
|
-
def initialize_stores
|
7
|
-
MemoryTracker.instance.add_store(InMemoryStore.new)
|
8
|
-
MemoryTracker.instance.add_store(LogfileStore.new)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class MemoryTracker
|
13
|
-
GCSTAT_LOGFILE = "#{Rails.root}/log/gcstat.log"
|
14
|
-
|
15
|
-
include Singleton
|
16
|
-
|
17
|
-
def stores
|
18
|
-
@stores ||= {}
|
19
|
-
end
|
20
|
-
|
21
|
-
def add_stores
|
22
|
-
end
|
23
|
-
|
24
|
-
def start_request(env)
|
25
|
-
@request = Request.new(env)
|
26
|
-
end
|
27
|
-
|
28
|
-
def end_request(status)
|
29
|
-
@request.close
|
30
|
-
stores.each { |store| store.push(@request) }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class Request
|
35
|
-
attr_reader :controller, :action, :gcstat_delta
|
36
|
-
def initialize(env)
|
37
|
-
@start_gcstat = GcStat.new(rss, vsize)
|
38
|
-
end
|
39
|
-
|
40
|
-
def close
|
41
|
-
@end_gcstat = GcStat.new(rss, vsize)
|
42
|
-
@gcstat_delta = GcStatDelta.new(@start_gcstat, @end_gcstat)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class GcStat
|
47
|
-
attr_reader :stat
|
48
|
-
def initialize(rss, vsize)
|
49
|
-
@stat = GC.stat.merge({ :rss => rss, :vsize => vsize})
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
class GcStatDelta
|
54
|
-
def initialize(before, after)
|
55
|
-
@stat = after.inject({}) do |h, (k, v)|
|
56
|
-
h[k] = after[k] - before [k]
|
57
|
-
h
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
module Stores
|
63
|
-
class InMemoryStore::Manager
|
64
|
-
def initialize(window_length)
|
65
|
-
@window1 = StatInterval.new(Time.now - length/2)
|
66
|
-
@window2 = StatInterval.new(Time.now)
|
67
|
-
end
|
68
|
-
|
69
|
-
def name
|
70
|
-
:memory
|
71
|
-
end
|
72
|
-
|
73
|
-
def rotate_windows
|
74
|
-
if @window1.start_time + length > Time.now
|
75
|
-
@window1 = @window2
|
76
|
-
@window2 = Window.new(Time.now)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def push
|
81
|
-
rotate_windows
|
82
|
-
@window1.push(request)
|
83
|
-
@window2.push(request)
|
84
|
-
end
|
85
|
-
|
86
|
-
def stats
|
87
|
-
@window1.stats
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
class InMemoryStore::StatInterval
|
92
|
-
attr_reader :start_time, :duration, :size
|
93
|
-
attr_accessor :data # {}
|
94
|
-
|
95
|
-
def initialize
|
96
|
-
@data = {}
|
97
|
-
end
|
98
|
-
|
99
|
-
def push(request)
|
100
|
-
@size += 1
|
101
|
-
delta = request.gcstat_delta
|
102
|
-
delta.each do |key|
|
103
|
-
increment_action_counter(request.controller, request.action, key, delta[key])
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def increment_action_counter(controller, action, key, value)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|