time_bandits 0.6.0 → 0.6.1

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NWQxOTYzZGM3NGMxMGM5NTc0ZmViNTIyMzJhNDA1ODNiNTExMjg0ZA==
5
- data.tar.gz: !binary |-
6
- NmQ5MTdiMjNmNWRjNTgzYjA2OTNjM2ExYWI2YzcyNjdiZTI1ZDg1ZQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NzAxOTQ2ZDBlNzMyN2IzMWYzYTExOTc3MjVkNmE3MWUyYzBmOTAzNjZiZDgw
10
- NjY0Y2M3NjZmNDA2NzQ1Nzk2MmE4YzAzMmNjY2NkZWNhYWMzZTE1ZGMzYzk3
11
- NTJhZGZhMzNkZGQ5ZDQ3MGZiMzdhNDEyMGQ3ODAyYjFjZjE3Mjg=
12
- data.tar.gz: !binary |-
13
- MmJjYWFiOGQxNDc1YjA5MWI1OTI1NWZlYTNmOGNlZTc1OWFlNWI1MDkxYmI5
14
- N2YzNjEyMTRlMjc2MmFmZDFkZjIwNWJhMWE3Y2U0Y2Q2ZTAxN2EyZWIxYjhj
15
- MDVjNjBkYjBmYjc5OTMwNmQ2ODU5ODM0ZDExZWU5ZjVhZmU5ZWQ=
2
+ SHA1:
3
+ metadata.gz: 9fae2e6cc7b44a9befcffb7c710c1f760119a17c
4
+ data.tar.gz: fa6a537a7fff153f5e30917c53f0a284f7d81db7
5
+ SHA512:
6
+ metadata.gz: 7b813da44b27582d7be37fd98e5dc4c92cc4b05d00be9f3966cf7e98917f74bea5ff3e20e2f4a5f7885c67f513092082b844031db163a844ca3a1a1803fe2d40
7
+ data.tar.gz: 3ff9e7968d16b4462acd859a8280fbb24aad02fe90ed0036e735975ebac311ee882ae2063bda7c56b1cc1859b23e564b5c899c5e7d8ef7065a810e70cceae281
data/.gitignore CHANGED
@@ -5,3 +5,4 @@ pkg/*
5
5
  .bundle
6
6
  .DS_Store
7
7
  .rvmrc
8
+ dump.rdb
data/Gemfile CHANGED
@@ -6,5 +6,4 @@ gemspec
6
6
  # gem "activesupport", "3.2.13"
7
7
  gem "activesupport", "4.0.0"
8
8
 
9
- gem "debugger"
10
- gem "memcached"
9
+ gem "byebug"
data/README.rdoc CHANGED
@@ -84,7 +84,11 @@ In order for the test to run you need a running memcached and redis-server
84
84
 
85
85
  == Release Notes
86
86
 
87
- version 0.5.2
87
+ version 0.6.1
88
+ - switched to byebug (debugger does not full support 2.0 and 2.1 not at all)
89
+ - adapted garbage collection statistics to work for 2.1
90
+
91
+ version 0.6.0
88
92
  - added redis time consumer
89
93
  - fixed rails 4.0 problems with builtin mem_cache_store
90
94
  - now only consumers which measured something are added to the completed line
@@ -18,6 +18,7 @@ module TimeBandits
18
18
  end
19
19
 
20
20
  def enable_stats
21
+ return unless GC.respond_to? :enable_stats
21
22
  GC.enable_stats
22
23
  if defined?(PhusionPassenger)
23
24
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
@@ -26,13 +27,37 @@ module TimeBandits
26
27
  end
27
28
  end
28
29
 
30
+ if GC.respond_to?(:collections)
31
+ def _get_collections; GC.collections; end
32
+ elsif GC.respond_to?(:count)
33
+ def _get_collections; GC.count; end
34
+ else
35
+ def _get_collections; 0; end
36
+ end
37
+
38
+ if ObjectSpace.respond_to?(:allocated_objects)
39
+ def _get_allocated_objects; ObjectSpace.allocated_objects; end
40
+ elsif GC.respond_to?(:stat) && RUBY_VERSION >= "2.1.0"
41
+ def _get_allocated_objects; GC.stat(:total_allocated_object); end
42
+ else
43
+ def _get_allocated_objects; 0; end
44
+ end
45
+
46
+ if GC.respond_to?(:allocated_size)
47
+ def _get_allocated_size; GC.allocated_size; end
48
+ elsif GC.respond_to?(:total_malloced_bytes)
49
+ def _get_allocated_size; GC.total_malloced_bytes; end
50
+ else
51
+ def _get_allocated_size; 0; end
52
+ end
53
+
29
54
  if GC.respond_to? :heap_slots
30
55
 
31
56
  def reset
32
57
  @consumed = GC.time
33
- @collections = GC.collections
34
- @allocated_objects = ObjectSpace.allocated_objects
35
- @allocated_size = GC.allocated_size
58
+ @collections = _get_collections
59
+ @allocated_objects = _get_allocated_objects
60
+ @allocated_size = _get_allocated_size
36
61
  @heap_slots = GC.heap_slots
37
62
  end
38
63
 
@@ -40,7 +65,7 @@ module TimeBandits
40
65
 
41
66
  def reset
42
67
  @consumed = GC.time
43
- @collections = GC.collections
68
+ @collections = _get_collections
44
69
  end
45
70
 
46
71
  end
@@ -54,17 +79,17 @@ module TimeBandits
54
79
  end
55
80
 
56
81
  def collections
57
- GC.collections - @collections
82
+ _get_collections - @collections
58
83
  end
59
84
 
60
85
  if GC.respond_to? :heap_slots
61
86
 
62
87
  def allocated_objects
63
- ObjectSpace.allocated_objects - @allocated_objects
88
+ _get_allocated_objects - @allocated_objects
64
89
  end
65
90
 
66
91
  def allocated_size
67
- GC.allocated_size - @allocated_size
92
+ _get_allocated_size - @allocated_size
68
93
  end
69
94
 
70
95
  def heap_growth
@@ -72,13 +97,9 @@ module TimeBandits
72
97
  end
73
98
 
74
99
  if GC.respond_to? :heap_slots_live_after_last_gc
75
- def live_data_set_size
76
- GC.heap_slots_live_after_last_gc
77
- end
100
+ def live_data_set_size; GC.heap_slots_live_after_last_gc; end
78
101
  else
79
- def live_data_set_size
80
- 0
81
- end
102
+ def live_data_set_size; 0; end
82
103
  end
83
104
 
84
105
  GCFORMAT = "GC: %.3f(%d) | HP: %d(%d,%d,%d,%d)"
@@ -1,3 +1,3 @@
1
1
  module TimeBandits
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -0,0 +1,58 @@
1
+ require_relative '../test_helper'
2
+
3
+ class GCConsumerTest < Test::Unit::TestCase
4
+ def setup
5
+ TimeBandits.time_bandits = []
6
+ TimeBandits.add TimeBandits::TimeConsumers::GarbageCollection.instance
7
+ TimeBandits.reset
8
+ end
9
+
10
+ test "getting metrics" do
11
+ # example metrics hash:
12
+ sample = {
13
+ :gc_time => 0.5,
14
+ :gc_calls => 0,
15
+ :heap_growth => 0,
16
+ :heap_size => 116103,
17
+ :allocated_objects => 8,
18
+ :allocated_bytes => 152,
19
+ :live_data_set_size => 69437
20
+ }
21
+ m = TimeBandits.metrics
22
+ assert_equal sample.keys.sort, m.keys.sort
23
+ end
24
+
25
+ test "formatting" do
26
+ # example runtime:
27
+ # "GC: 0.000(0) | HP: 0(116101,6,0,69442)"
28
+ gc, heap = TimeBandits.runtime.split(' | ')
29
+ assert_equal "GC: 0.000(0)", gc
30
+ match = /\AHP: \d+\(\d+,\d+,\d+,\d+\)/
31
+ assert(heap =~ match, "#{heap} does not match #{match}")
32
+ end
33
+
34
+ test "collecting GC stats" do
35
+ work
36
+ check_work
37
+ end
38
+
39
+ private
40
+ def work
41
+ TimeBandits.reset
42
+ a = []
43
+ 10.times do |i|
44
+ a << (i.to_s * 100)
45
+ end
46
+ end
47
+ def check_work
48
+ GC.start
49
+ m = TimeBandits.metrics
50
+ assert 0 < m[:gc_calls]
51
+ assert 0 < m[:gc_time]
52
+ assert 0 <= m[:heap_growth]
53
+ assert 0 < m[:heap_size]
54
+ assert 0 < m[:allocated_objects]
55
+ assert 0 < m[:allocated_bytes]
56
+ assert 0 <= m[:live_data_set_size]
57
+ end
58
+ end
data/time_bandits.gemspec CHANGED
@@ -25,5 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency("ansi")
26
26
  s.add_development_dependency("dalli")
27
27
  s.add_development_dependency("redis")
28
+ s.add_development_dependency("memcached")
29
+ s.add_development_dependency("minitest", '~> 4.7.5')
28
30
  end
29
31
 
metadata CHANGED
@@ -1,113 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_bandits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Kaes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-19 00:00:00.000000000 Z
11
+ date: 2013-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: thread_variables
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
- - - ! '>='
17
+ - - ">="
17
18
  - !ruby/object:Gem::Version
18
19
  version: '0'
20
+ type: :runtime
21
+ prerelease: false
19
22
  version_requirements: !ruby/object:Gem::Requirement
20
23
  requirements:
21
- - - ! '>='
24
+ - - ">="
22
25
  - !ruby/object:Gem::Version
23
26
  version: '0'
24
- type: :runtime
25
- prerelease: false
26
- name: thread_variables
27
27
  - !ruby/object:Gem::Dependency
28
+ name: activesupport
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: 2.3.2
34
+ type: :runtime
35
+ prerelease: false
33
36
  version_requirements: !ruby/object:Gem::Requirement
34
37
  requirements:
35
- - - ! '>='
38
+ - - ">="
36
39
  - !ruby/object:Gem::Version
37
40
  version: 2.3.2
38
- type: :runtime
39
- prerelease: false
40
- name: activesupport
41
41
  - !ruby/object:Gem::Dependency
42
+ name: rake
42
43
  requirement: !ruby/object:Gem::Requirement
43
44
  requirements:
44
- - - ! '>='
45
+ - - ">="
45
46
  - !ruby/object:Gem::Version
46
47
  version: '0'
48
+ type: :development
49
+ prerelease: false
47
50
  version_requirements: !ruby/object:Gem::Requirement
48
51
  requirements:
49
- - - ! '>='
52
+ - - ">="
50
53
  - !ruby/object:Gem::Version
51
54
  version: '0'
52
- type: :development
53
- prerelease: false
54
- name: rake
55
55
  - !ruby/object:Gem::Dependency
56
+ name: mocha
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
- - - ! '>='
59
+ - - ">="
59
60
  - !ruby/object:Gem::Version
60
61
  version: '0'
62
+ type: :development
63
+ prerelease: false
61
64
  version_requirements: !ruby/object:Gem::Requirement
62
65
  requirements:
63
- - - ! '>='
66
+ - - ">="
64
67
  - !ruby/object:Gem::Version
65
68
  version: '0'
66
- type: :development
67
- prerelease: false
68
- name: mocha
69
69
  - !ruby/object:Gem::Dependency
70
+ name: ansi
70
71
  requirement: !ruby/object:Gem::Requirement
71
72
  requirements:
72
- - - ! '>='
73
+ - - ">="
73
74
  - !ruby/object:Gem::Version
74
75
  version: '0'
76
+ type: :development
77
+ prerelease: false
75
78
  version_requirements: !ruby/object:Gem::Requirement
76
79
  requirements:
77
- - - ! '>='
80
+ - - ">="
78
81
  - !ruby/object:Gem::Version
79
82
  version: '0'
80
- type: :development
81
- prerelease: false
82
- name: ansi
83
83
  - !ruby/object:Gem::Dependency
84
+ name: dalli
84
85
  requirement: !ruby/object:Gem::Requirement
85
86
  requirements:
86
- - - ! '>='
87
+ - - ">="
87
88
  - !ruby/object:Gem::Version
88
89
  version: '0'
90
+ type: :development
91
+ prerelease: false
89
92
  version_requirements: !ruby/object:Gem::Requirement
90
93
  requirements:
91
- - - ! '>='
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: redis
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
92
102
  - !ruby/object:Gem::Version
93
103
  version: '0'
94
104
  type: :development
95
105
  prerelease: false
96
- name: dalli
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
112
+ name: memcached
98
113
  requirement: !ruby/object:Gem::Requirement
99
114
  requirements:
100
- - - ! '>='
115
+ - - ">="
101
116
  - !ruby/object:Gem::Version
102
117
  version: '0'
118
+ type: :development
119
+ prerelease: false
103
120
  version_requirements: !ruby/object:Gem::Requirement
104
121
  requirements:
105
- - - ! '>='
122
+ - - ">="
106
123
  - !ruby/object:Gem::Version
107
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: minitest
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 4.7.5
108
132
  type: :development
109
133
  prerelease: false
110
- name: redis
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 4.7.5
111
139
  description: Rails Completed Line on Steroids
112
140
  email:
113
141
  - skaes@railsexpress.de
@@ -115,7 +143,7 @@ executables: []
115
143
  extensions: []
116
144
  extra_rdoc_files: []
117
145
  files:
118
- - .gitignore
146
+ - ".gitignore"
119
147
  - Gemfile
120
148
  - README.rdoc
121
149
  - README_RAILS2.rdoc
@@ -145,6 +173,7 @@ files:
145
173
  - test/unit/active_support_notifications_test.rb
146
174
  - test/unit/base_test.rb
147
175
  - test/unit/dalli_test.rb
176
+ - test/unit/gc_consumer_test.rb
148
177
  - test/unit/memcached_test.rb
149
178
  - test/unit/redis_test.rb
150
179
  - time_bandits.gemspec
@@ -158,17 +187,17 @@ require_paths:
158
187
  - lib
159
188
  required_ruby_version: !ruby/object:Gem::Requirement
160
189
  requirements:
161
- - - ! '>='
190
+ - - ">="
162
191
  - !ruby/object:Gem::Version
163
192
  version: '0'
164
193
  required_rubygems_version: !ruby/object:Gem::Requirement
165
194
  requirements:
166
- - - ! '>='
195
+ - - ">="
167
196
  - !ruby/object:Gem::Version
168
197
  version: '0'
169
198
  requirements: []
170
199
  rubyforge_project:
171
- rubygems_version: 2.0.5
200
+ rubygems_version: 2.2.0
172
201
  signing_key:
173
202
  specification_version: 4
174
203
  summary: Custom performance logging for Rails
@@ -177,5 +206,6 @@ test_files:
177
206
  - test/unit/active_support_notifications_test.rb
178
207
  - test/unit/base_test.rb
179
208
  - test/unit/dalli_test.rb
209
+ - test/unit/gc_consumer_test.rb
180
210
  - test/unit/memcached_test.rb
181
211
  - test/unit/redis_test.rb