class Fragmenter::Redis
Attributes
fragmenter[R]
Public Class Methods
new(fragmenter)
click to toggle source
# File lib/fragmenter/redis.rb, line 13 def initialize(fragmenter) @fragmenter = fragmenter end
Public Instance Methods
clean!()
click to toggle source
# File lib/fragmenter/redis.rb, line 57 def clean! redis.del store_key, meta_key end
complete?()
click to toggle source
# File lib/fragmenter/redis.rb, line 43 def complete? redis.hlen(store_key).to_s == redis.hget(meta_key, :total) end
fragments()
click to toggle source
# File lib/fragmenter/redis.rb, line 39 def fragments redis.hkeys(store_key).sort end
meta()
click to toggle source
# File lib/fragmenter/redis.rb, line 35 def meta redis.hgetall meta_key end
meta_key()
click to toggle source
# File lib/fragmenter/redis.rb, line 21 def meta_key [store_key, 'options'].join('-') end
rebuild()
click to toggle source
# File lib/fragmenter/redis.rb, line 47 def rebuild benchmark_rebuilding do redis.hmget(store_key, *fragments).join('') end rescue ::Redis::CommandError log 'Failure rebuilding, most likely there are no fragments to rebuild' '' end
store(blob, options)
click to toggle source
# File lib/fragmenter/redis.rb, line 25 def store(blob, options) fragment = Fragmenter::Fragment.new(blob, options) if fragment.valid? persist_fragment(fragment) else false end end
store_key()
click to toggle source
# File lib/fragmenter/redis.rb, line 17 def store_key fragmenter.key end
Private Instance Methods
benchmark_persistence(fragment) { || ... }
click to toggle source
# File lib/fragmenter/redis.rb, line 80 def benchmark_persistence(fragment, &block) log %(Storing #{fragment.number}/#{fragment.total}...) start_time = Time.now yield end_time = Time.now log %(Stored (#{end_time - start_time}) #{fragment.number}/#{fragment.total} #{fragment.blob.size} bytes) end
benchmark_rebuilding() { || ... }
click to toggle source
# File lib/fragmenter/redis.rb, line 90 def benchmark_rebuilding(&block) log %(Rebuilding #{fragments.length} fragments...) start_time = Time.now rebuilt = yield end_time = Time.now log %(Rebuilt (#{end_time - start_time}) #{fragments.length} fragments #{rebuilt.size} bytes) rebuilt end
log(message)
click to toggle source
# File lib/fragmenter/redis.rb, line 63 def log(message) logger.info "Fragmenter: #{message}" end
persist_fragment(fragment)
click to toggle source
# File lib/fragmenter/redis.rb, line 67 def persist_fragment(fragment) benchmark_persistence(fragment) do redis.multi do redis.hset store_key, fragment.padded_number, fragment.blob redis.hset meta_key, :content_type, fragment.content_type redis.hset meta_key, :total, fragment.total redis.expire store_key, expiration redis.expire meta_key, expiration end end end