moneta 0.7.4 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
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