moneta 0.7.4 → 0.7.5

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.
Files changed (165) hide show
  1. data/.gitignore +1 -2
  2. data/.travis.yml +20 -13
  3. data/CHANGES +5 -0
  4. data/Gemfile +24 -25
  5. data/LICENSE +1 -1
  6. data/README.md +32 -16
  7. data/Rakefile +36 -6
  8. data/lib/moneta/builder.rb +20 -6
  9. data/lib/moneta/mixins.rb +11 -4
  10. data/lib/moneta/version.rb +1 -1
  11. data/script/benchmarks +378 -0
  12. data/script/{generate-specs.rb → generate-specs} +92 -83
  13. data/script/install-bundle +26 -0
  14. data/script/kill-travis +16 -0
  15. data/script/start-services +8 -0
  16. data/script/upload-bundle +2 -0
  17. data/spec/helper.rb +9 -3
  18. data/spec/moneta/adapter_activerecord_spec.rb +1 -1
  19. data/spec/moneta/adapter_cassandra_spec.rb +1 -1
  20. data/spec/moneta/adapter_cassandra_with_default_expires_spec.rb +2 -2
  21. data/spec/moneta/adapter_client_spec.rb +1 -1
  22. data/spec/moneta/adapter_cookie_spec.rb +2 -2
  23. data/spec/moneta/adapter_couch_spec.rb +1 -1
  24. data/spec/moneta/adapter_datamapper_spec.rb +1 -1
  25. data/spec/moneta/adapter_daybreak_spec.rb +2 -2
  26. data/spec/moneta/adapter_dbm_spec.rb +1 -1
  27. data/spec/moneta/adapter_file_spec.rb +1 -1
  28. data/spec/moneta/adapter_fog_spec.rb +2 -2
  29. data/spec/moneta/adapter_gdbm_spec.rb +1 -1
  30. data/spec/moneta/adapter_hbase_spec.rb +1 -1
  31. data/spec/moneta/adapter_leveldb_spec.rb +1 -1
  32. data/spec/moneta/adapter_localmemcache_spec.rb +1 -1
  33. data/spec/moneta/adapter_lruhash_spec.rb +2 -2
  34. data/spec/moneta/adapter_memcached_dalli_spec.rb +1 -1
  35. data/spec/moneta/adapter_memcached_dalli_with_default_expires_spec.rb +1 -1
  36. data/spec/moneta/adapter_memcached_native_spec.rb +1 -1
  37. data/spec/moneta/adapter_memcached_native_with_default_expires_spec.rb +1 -1
  38. data/spec/moneta/adapter_memcached_spec.rb +1 -1
  39. data/spec/moneta/adapter_memcached_with_default_expires_spec.rb +1 -1
  40. data/spec/moneta/adapter_memory_spec.rb +19 -1
  41. data/spec/moneta/adapter_mongo_spec.rb +2 -2
  42. data/spec/moneta/adapter_mongo_with_default_expires_spec.rb +1 -1
  43. data/spec/moneta/adapter_pstore_spec.rb +1 -1
  44. data/spec/moneta/adapter_redis_spec.rb +1 -1
  45. data/spec/moneta/adapter_redis_with_default_expires_spec.rb +1 -1
  46. data/spec/moneta/adapter_restclient_spec.rb +1 -1
  47. data/spec/moneta/adapter_riak_spec.rb +1 -1
  48. data/spec/moneta/adapter_sdbm_spec.rb +1 -1
  49. data/spec/moneta/adapter_sequel_spec.rb +1 -1
  50. data/spec/moneta/adapter_sqlite_spec.rb +1 -1
  51. data/spec/moneta/adapter_tdb_spec.rb +1 -1
  52. data/spec/moneta/adapter_tokyocabinet_bdb_spec.rb +1 -1
  53. data/spec/moneta/adapter_tokyocabinet_hdb_spec.rb +1 -1
  54. data/spec/moneta/adapter_yaml_spec.rb +1 -1
  55. data/spec/moneta/cache_file_memory_spec.rb +2 -2
  56. data/spec/moneta/cache_memory_null_spec.rb +2 -2
  57. data/spec/moneta/expires_file_spec.rb +1 -1
  58. data/spec/moneta/expires_memory_spec.rb +19 -19
  59. data/spec/moneta/expires_memory_with_default_expires_spec.rb +19 -19
  60. data/spec/moneta/lock_spec.rb +19 -1
  61. data/spec/moneta/null_adapter_spec.rb +1 -1
  62. data/spec/moneta/optionmerger_spec.rb +14 -1
  63. data/spec/moneta/pool_spec.rb +1 -1
  64. data/spec/moneta/proxy_expires_memory_spec.rb +19 -1
  65. data/spec/moneta/proxy_redis_spec.rb +1 -1
  66. data/spec/moneta/shared_spec.rb +3 -3
  67. data/spec/moneta/simple_activerecord_spec.rb +1 -1
  68. data/spec/moneta/simple_activerecord_with_expires_spec.rb +1 -1
  69. data/spec/moneta/simple_cassandra_spec.rb +1 -1
  70. data/spec/moneta/simple_client_tcp_spec.rb +1 -1
  71. data/spec/moneta/simple_client_unix_spec.rb +1 -1
  72. data/spec/moneta/simple_couch_spec.rb +1 -1
  73. data/spec/moneta/simple_couch_with_expires_spec.rb +1 -1
  74. data/spec/moneta/simple_datamapper_spec.rb +1 -1
  75. data/spec/moneta/simple_datamapper_with_expires_spec.rb +1 -1
  76. data/spec/moneta/simple_datamapper_with_repository_spec.rb +1 -1
  77. data/spec/moneta/simple_daybreak_spec.rb +1 -1
  78. data/spec/moneta/simple_daybreak_with_expires_spec.rb +1 -1
  79. data/spec/moneta/simple_dbm_spec.rb +1 -1
  80. data/spec/moneta/simple_dbm_with_expires_spec.rb +1 -1
  81. data/spec/moneta/simple_file_spec.rb +1 -1
  82. data/spec/moneta/simple_file_with_expires_spec.rb +1 -1
  83. data/spec/moneta/simple_fog_spec.rb +1 -1
  84. data/spec/moneta/simple_fog_with_expires_spec.rb +1 -1
  85. data/spec/moneta/simple_gdbm_spec.rb +1 -1
  86. data/spec/moneta/simple_gdbm_with_expires_spec.rb +1 -1
  87. data/spec/moneta/simple_hashfile_spec.rb +1 -1
  88. data/spec/moneta/simple_hashfile_with_expires_spec.rb +1 -1
  89. data/spec/moneta/simple_hbase_spec.rb +1 -1
  90. data/spec/moneta/simple_hbase_with_expires_spec.rb +1 -1
  91. data/spec/moneta/simple_leveldb_spec.rb +1 -1
  92. data/spec/moneta/simple_leveldb_with_expires_spec.rb +1 -1
  93. data/spec/moneta/simple_localmemcache_spec.rb +1 -1
  94. data/spec/moneta/simple_localmemcache_with_expires_spec.rb +1 -1
  95. data/spec/moneta/simple_lruhash_spec.rb +1 -1
  96. data/spec/moneta/simple_lruhash_with_expires_spec.rb +1 -1
  97. data/spec/moneta/simple_memcached_dalli_spec.rb +1 -1
  98. data/spec/moneta/simple_memcached_native_spec.rb +1 -1
  99. data/spec/moneta/simple_memcached_spec.rb +1 -1
  100. data/spec/moneta/simple_memory_spec.rb +1 -1
  101. data/spec/moneta/simple_memory_with_compress_spec.rb +1 -1
  102. data/spec/moneta/simple_memory_with_expires_spec.rb +1 -1
  103. data/spec/moneta/simple_memory_with_json_key_serializer_spec.rb +1 -1
  104. data/spec/moneta/simple_memory_with_json_serializer_spec.rb +1 -1
  105. data/spec/moneta/simple_memory_with_json_value_serializer_spec.rb +1 -1
  106. data/spec/moneta/simple_memory_with_prefix_spec.rb +1 -1
  107. data/spec/moneta/simple_memory_with_snappy_compress_spec.rb +1 -1
  108. data/spec/moneta/simple_mongo_spec.rb +1 -1
  109. data/spec/moneta/simple_null_spec.rb +1 -1
  110. data/spec/moneta/simple_pstore_spec.rb +1 -1
  111. data/spec/moneta/simple_pstore_with_expires_spec.rb +1 -1
  112. data/spec/moneta/simple_redis_spec.rb +1 -1
  113. data/spec/moneta/simple_restclient_spec.rb +1 -1
  114. data/spec/moneta/simple_riak_spec.rb +1 -1
  115. data/spec/moneta/simple_riak_with_expires_spec.rb +1 -1
  116. data/spec/moneta/simple_sdbm_spec.rb +1 -1
  117. data/spec/moneta/simple_sdbm_with_expires_spec.rb +1 -1
  118. data/spec/moneta/simple_sequel_spec.rb +1 -1
  119. data/spec/moneta/simple_sequel_with_expires_spec.rb +1 -1
  120. data/spec/moneta/simple_sqlite_spec.rb +1 -1
  121. data/spec/moneta/simple_sqlite_with_expires_spec.rb +1 -1
  122. data/spec/moneta/simple_tdb_spec.rb +1 -1
  123. data/spec/moneta/simple_tdb_with_expires_spec.rb +1 -1
  124. data/spec/moneta/simple_tokyocabinet_spec.rb +1 -1
  125. data/spec/moneta/simple_tokyocabinet_with_expires_spec.rb +1 -1
  126. data/spec/moneta/simple_yaml_spec.rb +1 -1
  127. data/spec/moneta/simple_yaml_with_expires_spec.rb +1 -1
  128. data/spec/moneta/stack_file_memory_spec.rb +2 -2
  129. data/spec/moneta/stack_memory_file_spec.rb +3 -3
  130. data/spec/moneta/transformer_bencode_spec.rb +1 -1
  131. data/spec/moneta/transformer_bert_spec.rb +1 -1
  132. data/spec/moneta/transformer_bson_spec.rb +1 -1
  133. data/spec/moneta/transformer_bzip2_spec.rb +1 -1
  134. data/spec/moneta/transformer_json_spec.rb +1 -1
  135. data/spec/moneta/transformer_key_marshal_spec.rb +19 -19
  136. data/spec/moneta/transformer_key_yaml_spec.rb +19 -19
  137. data/spec/moneta/transformer_lzma_spec.rb +1 -1
  138. data/spec/moneta/transformer_lzo_spec.rb +1 -1
  139. data/spec/moneta/transformer_marshal_base64_spec.rb +1 -1
  140. data/spec/moneta/transformer_marshal_escape_spec.rb +1 -1
  141. data/spec/moneta/transformer_marshal_hmac_spec.rb +1 -1
  142. data/spec/moneta/transformer_marshal_md5_spec.rb +1 -1
  143. data/spec/moneta/transformer_marshal_md5_spread_spec.rb +1 -1
  144. data/spec/moneta/transformer_marshal_prefix_spec.rb +1 -1
  145. data/spec/moneta/transformer_marshal_rmd160_spec.rb +1 -1
  146. data/spec/moneta/transformer_marshal_sha1_spec.rb +1 -1
  147. data/spec/moneta/transformer_marshal_sha256_spec.rb +1 -1
  148. data/spec/moneta/transformer_marshal_sha384_spec.rb +1 -1
  149. data/spec/moneta/transformer_marshal_sha512_spec.rb +1 -1
  150. data/spec/moneta/transformer_marshal_spec.rb +1 -1
  151. data/spec/moneta/transformer_marshal_truncate_spec.rb +1 -1
  152. data/spec/moneta/transformer_marshal_uuencode_spec.rb +1 -1
  153. data/spec/moneta/transformer_msgpack_spec.rb +1 -1
  154. data/spec/moneta/transformer_ox_spec.rb +1 -1
  155. data/spec/moneta/transformer_quicklz_spec.rb +1 -1
  156. data/spec/moneta/transformer_snappy_spec.rb +1 -1
  157. data/spec/moneta/transformer_tnet_spec.rb +1 -1
  158. data/spec/moneta/transformer_value_marshal_spec.rb +1 -1
  159. data/spec/moneta/transformer_value_yaml_spec.rb +1 -1
  160. data/spec/moneta/transformer_yaml_spec.rb +1 -1
  161. data/spec/moneta/transformer_zlib_spec.rb +1 -1
  162. data/spec/monetaspecs.rb +655 -151
  163. metadata +8 -6
  164. data/benchmarks/run.rb +0 -327
  165. data/script/install-bundle.rb +0 -35
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moneta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-01-04 00:00:00.000000000 Z
14
+ date: 2013-01-06 00:00:00.000000000 Z
15
15
  dependencies: []
16
16
  description: A unified interface to key/value stores
17
17
  email:
@@ -34,7 +34,6 @@ files:
34
34
  - README.md
35
35
  - Rakefile
36
36
  - SPEC.md
37
- - benchmarks/run.rb
38
37
  - lib/action_dispatch/middleware/session/moneta_store.rb
39
38
  - lib/active_support/cache/moneta_store.rb
40
39
  - lib/moneta.rb
@@ -92,8 +91,12 @@ files:
92
91
  - lib/rack/moneta_store.rb
93
92
  - lib/rack/session/moneta.rb
94
93
  - moneta.gemspec
95
- - script/generate-specs.rb
96
- - script/install-bundle.rb
94
+ - script/benchmarks
95
+ - script/generate-specs
96
+ - script/install-bundle
97
+ - script/kill-travis
98
+ - script/start-services
99
+ - script/upload-bundle
97
100
  - spec/action_dispatch/fixtures/session_autoload_test/foo.rb
98
101
  - spec/action_dispatch/session_moneta_store_spec.rb
99
102
  - spec/active_support/cache_moneta_store_spec.rb
@@ -426,4 +429,3 @@ test_files:
426
429
  - spec/rack/moneta_cookies_spec.rb
427
430
  - spec/rack/moneta_store_spec.rb
428
431
  - spec/rack/session_moneta_spec.rb
429
- has_rdoc:
data/benchmarks/run.rb DELETED
@@ -1,327 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $: << File.join(File.dirname(__FILE__), '..', 'lib')
4
- require 'benchmark'
5
- require 'moneta'
6
-
7
- STORES = {
8
- # SDBM is unstable
9
- # :SDBM => { :file => 'bench.sdbm' },
10
- # YAML is so fucking slow
11
- # :YAML => { :file => 'bench.yaml' },
12
- :ActiveRecord => { :connection => { :adapter => 'sqlite3', :database => ':memory:' } },
13
- :Cassandra => {},
14
- :Client => {},
15
- :Couch => {},
16
- :DBM => { :file => 'bench.dbm' },
17
- :DataMapper => { :setup => 'sqlite3:bench.datamapper' },
18
- :Daybreak => { :file => 'bench.daybreak' },
19
- :File => { :dir => 'bench.file' },
20
- :GDBM => { :file => 'bench.gdbm' },
21
- :HBase => {},
22
- :HashFile => { :dir => 'bench.hashfile' },
23
- :LRUHash => {},
24
- :LevelDB => { :dir => 'bench.leveldb' },
25
- :LocalMemCache => { :file => 'bench.lmc' },
26
- :MemcachedDalli => {},
27
- :MemcachedNative => {},
28
- :Memory => {},
29
- :Mongo => {},
30
- :PStore => { :file => 'bench.pstore' },
31
- :Redis => {},
32
- :RestClient => { :url => 'http://localhost:8808/' },
33
- :Riak => {},
34
- :Sequel => { :db => 'sqlite:/' },
35
- :Sqlite => { :file => ':memory:' },
36
- :TDB => { :file => 'bench.tdb' },
37
- }
38
-
39
- CONFIGS = {
40
- :uniform_small => {
41
- :runs => 3,
42
- :keys => 1000,
43
- :min_key_length => 1,
44
- :max_key_length => 32,
45
- :key_dist => :uniform,
46
- :min_val_length => 0,
47
- :max_val_length => 256,
48
- :val_dist => :uniform
49
- },
50
- :uniform_medium => {
51
- :runs => 3,
52
- :keys => 100,
53
- :min_key_length => 3,
54
- :max_key_length => 200,
55
- :key_dist => :uniform,
56
- :min_val_length => 0,
57
- :max_val_length => 1024,
58
- :val_dist => :uniform
59
- },
60
- :uniform_large => {
61
- :runs => 3,
62
- :keys => 100,
63
- :min_key_length => 3,
64
- :max_key_length => 200,
65
- :key_dist => :uniform,
66
- :min_val_length => 0,
67
- :max_val_length => 10240,
68
- :val_dist => :uniform
69
- },
70
- :normal_small => {
71
- :runs => 3,
72
- :keys => 1000,
73
- :min_key_length => 1,
74
- :max_key_length => 32,
75
- :key_dist => :normal,
76
- :min_val_length => 0,
77
- :max_val_length => 256,
78
- :val_dist => :normal
79
- },
80
- :normal_medium => {
81
- :runs => 3,
82
- :keys => 100,
83
- :min_key_length => 3,
84
- :max_key_length => 200,
85
- :key_dist => :normal,
86
- :min_val_length => 0,
87
- :max_val_length => 1024,
88
- :val_dist => :normal
89
- },
90
- :normal_large => {
91
- :runs => 3,
92
- :keys => 100,
93
- :min_key_length => 3,
94
- :max_key_length => 200,
95
- :key_dist => :normal,
96
- :min_val_length => 0,
97
- :max_val_length => 10240,
98
- :val_dist => :normal
99
- },
100
- }
101
-
102
- config_name = ARGV.size == 1 ? ARGV.first.to_sym : :uniform_medium
103
- unless config = CONFIGS[config_name]
104
- puts "Configuration #{config_name} not found"
105
- exit
106
- end
107
-
108
- DICT = 'ABCDEFGHIJKLNOPQRSTUVWXYZabcdefghijklnopqrstuvwxyz123456789'.freeze
109
-
110
- class String
111
- def random(n)
112
- (1..n).map { self[rand(size),1] }.join
113
- end
114
- end
115
-
116
- class Array
117
- def sum
118
- inject(0, &:+)
119
- end
120
-
121
- def randomize
122
- rest, result = dup, []
123
- result << rest.slice!(rand(rest.size)) until result.size == size
124
- result
125
- end
126
- end
127
-
128
- Process.fork do
129
- begin
130
- Moneta::Server.new(Moneta.new(:Memory)).run
131
- rescue Exception => ex
132
- puts "\e[31mFailed to start Moneta server - #{ex.message}\e[0m"
133
- end
134
- end
135
-
136
- Process.fork do
137
- require 'rack'
138
- require 'webrick'
139
- require 'httpi'
140
- require 'rack/moneta_rest'
141
-
142
- # Keep webrick quiet
143
- ::WEBrick::HTTPServer.class_eval do
144
- def access_log(config, req, res); end
145
- end
146
- ::WEBrick::BasicLog.class_eval do
147
- def log(level, data); end
148
- end
149
-
150
- Rack::Server.start(:app => Rack::Builder.app do
151
- use Rack::Lint
152
- run Rack::MonetaRest.new(:store => :Memory)
153
- end,
154
- :environment => :none,
155
- :server => :webrick,
156
- :Port => 8808)
157
- end
158
-
159
- sleep 1 # Wait for servers
160
-
161
- STORES.each do |name, options|
162
- begin
163
- if name == :DataMapper
164
- begin
165
- require 'dm-core'
166
- DataMapper.setup(:default, :adapter => :in_memory)
167
- rescue LoadError => ex
168
- puts "\e[31mFailed to load DataMapper - #{ex.message}\e[0m"
169
- end
170
- elsif name == :Riak
171
- require 'riak'
172
- Riak.disable_list_keys_warnings = true
173
- elsif name == :RestClient
174
- require 'httpi'
175
- HTTPI.log = false
176
- end
177
-
178
- cache = Moneta.new(name, options.dup)
179
- cache['test'] = 'test'
180
- rescue Exception => ex
181
- puts "\e[31m#{name} not benchmarked - #{ex.message}\e[0m"
182
- STORES.delete(name)
183
- ensure
184
- cache.close if cache
185
- end
186
- end
187
-
188
- HEADER = "\n Minimum Maximum Total Average Ops/s"
189
- SEPARATOR = '=' * 68
190
-
191
- puts "\e[1m\e[36m#{SEPARATOR}\n\e[36mConfig #{config_name}\n\e[36m#{SEPARATOR}\e[0m"
192
- config.each do |k,v|
193
- puts '%-16s = %-10s' % [k,v]
194
- end
195
-
196
- module Rand
197
- extend self
198
-
199
- def normal_rand(mean, stddev)
200
- # Box-Muller transform
201
- theta = 2 * Math::PI * (rand(1e10) / 1e10)
202
- scale = stddev * Math.sqrt(-2 * Math.log(1 - (rand(1e10) / 1e10)))
203
- [mean + scale * Math.cos(theta),
204
- mean + scale * Math.sin(theta)]
205
- end
206
-
207
- def uniform(min, max)
208
- rand(max - min) + min
209
- end
210
-
211
- def normal(min, max)
212
- mean = (min + max) / 2
213
- stddev = (max - min) / 4
214
- loop do
215
- val = normal_rand(mean, stddev)
216
- return val.first if val.first >= min && val.first <= max
217
- return val.last if val.last >= min && val.last <= max
218
- end
219
- end
220
- end
221
-
222
- stats, data, summary = {}, {}, []
223
-
224
- until data.size == config[:keys]
225
- key = DICT.random(Rand.send(config[:key_dist], config[:min_key_length], config[:max_key_length]))
226
- data[key] = DICT.random(Rand.send(config[:val_dist], config[:min_val_length], config[:max_val_length]))
227
- end
228
-
229
- key_lengths, val_lengths = data.keys.map(&:size), data.values.map(&:size)
230
- data = data.to_a
231
-
232
- def write_histogram(file, sizes)
233
- min = sizes.min
234
- delta = sizes.max - min
235
- histogram = []
236
- sizes.each do |s|
237
- s = 10 * (s - min) / delta
238
- histogram[s] ||= 0
239
- histogram[s] += 1
240
- end
241
- File.open(file, 'w') do |f|
242
- histogram.each_with_index { |n,i| f.puts "#{i*delta/10+min} #{n}" }
243
- end
244
- end
245
-
246
- write_histogram('key.histogram', key_lengths)
247
- write_histogram('value.histogram', val_lengths)
248
-
249
- puts "\n\e[1m\e[34m#{SEPARATOR}\n\e[34mComputing keys and values...\n\e[34m#{SEPARATOR}\e[0m"
250
- puts %{ Minimum Maximum Total Average}
251
- puts 'Key Length % 8d % 8d % 8d % 8d ' % [key_lengths.min, key_lengths.max, key_lengths.sum, key_lengths.sum / data.size]
252
- puts 'Value Length % 8d % 8d % 8d % 8d ' % [val_lengths.min, val_lengths.max, val_lengths.sum, val_lengths.sum / data.size]
253
-
254
- STORES.each do |name, options|
255
- begin
256
- puts "\n\e[1m\e[34m#{SEPARATOR}\n\e[34m#{name}\n\e[34m#{SEPARATOR}\e[0m"
257
-
258
- cache = Moneta.new(name, options.dup)
259
-
260
- stats[name] = {
261
- :write => [],
262
- :read => [],
263
- :sum => [],
264
- :error => []
265
- }
266
-
267
- %w(Rehearse Measure).each do |type|
268
- state = ''
269
- print "%s [%#{2 * config[:runs]}s] " % [type, state]
270
-
271
- config[:runs].times do |run|
272
- cache.clear
273
- print "%s[%-#{2 * config[:runs]}s] " % ["\b" * (2 * config[:runs] + 3), state << 'W']
274
-
275
- data = data.randomize
276
- m1 = Benchmark.measure do
277
- data.each {|k,v| cache[k] = v }
278
- end
279
-
280
- print "%s[%-#{2 * config[:runs]}s] " % ["\b" * (2 * config[:runs] + 3), state << 'R']
281
-
282
- data = data.randomize
283
- error = 0
284
- m2 = Benchmark.measure do
285
- data.each do |k, v|
286
- error += 1 if v != cache[k]
287
- end
288
- end
289
-
290
- if type == 'Measure'
291
- stats[name][:write] << m1.real
292
- stats[name][:error] << error
293
- stats[name][:read] << m2.real
294
- stats[name][:sum] << (m1.real + m2.real)
295
- end
296
- end
297
- end
298
-
299
- puts HEADER
300
- [:write, :read, :sum].each do |i|
301
- total = stats[name][i].sum
302
- ops = (config[:runs] * data.size) / total
303
- line = '%-17.17s %-5s % 8d % 8d % 8d % 8d % 8d' %
304
- [name, i, stats[name][i].min * 1000, stats[name][i].max * 1000,
305
- total * 1000, total * 1000 / config[:runs], ops]
306
- summary << [-ops, line << "\n"] if i == :sum
307
- puts line
308
- end
309
-
310
- errors = stats[name][:error].sum
311
- if errors > 0
312
- puts "\e[31m%-23.23s % 8d % 8d % 8d % 8d\e[0m" %
313
- ['Read errors', stats[name][:error].min, stats[name][:error].max, errors, errors / config[:runs]]
314
- else
315
- puts "\e[32mNo read errors"
316
- end
317
- rescue StandardError => ex
318
- puts "\n\e[31mFailed to benchmark #{name} - #{ex.message}\e[0m\n"
319
- ensure
320
- cache.close if cache
321
- end
322
- end
323
-
324
- puts "\n\e[1m\e[36m#{SEPARATOR}\n\e[36mSummary #{config_name}: #{config[:runs]} runs, #{data.size} keys\n\e[36m#{SEPARATOR}\e[0m#{HEADER}\n"
325
- summary.sort_by(&:first).each do |entry|
326
- puts entry.last
327
- end
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Inspired by https://coderwall.com/p/x8exja
3
-
4
- def cmd(s)
5
- puts s
6
- system(s)
7
- end
8
-
9
- def cmd!(s)
10
- cmd(s) || abort("#{s} failed")
11
- end
12
-
13
- BUNDLE_FILE = "bundle-#{RUBY_VERSION}-#{defined?(JRUBY_VERSION) ? 'jruby' : 'mri'}.tar.gz"
14
-
15
- if cmd("wget -O #{BUNDLE_FILE} http://s3.amazonaws.com/minad-moneta/#{BUNDLE_FILE}")
16
- cmd! 'rm -rf .bundle'
17
- cmd! "tar -xf #{BUNDLE_FILE}"
18
- cmd! 'bundle install --path .bundle'
19
- else
20
- $: << File.expand_path(File.join(__FILE__, '..', '..', 'lib'))
21
-
22
- cmd! 'gem install --no-rdoc --no-ri fog'
23
- require 'rubygems'
24
- require 'fog'
25
- require 'moneta'
26
-
27
- store = Moneta::Adapters::Fog.new(:provider => 'AWS',
28
- :aws_access_key_id => ENV['AWS_KEY_ID'],
29
- :aws_secret_access_key => ENV['AWS_ACCESS_KEY'],
30
- :dir => 'minad-moneta')
31
-
32
- cmd! 'bundle install --path .bundle'
33
- cmd! "tar -czf #{BUNDLE_FILE} .bundle"
34
- store.store(BUNDLE_FILE, File.read(BUNDLE_FILE), :public => true)
35
- end