class Moe::TableManager
Attributes
date[R]
dyna[RW]
meta[RW]
Public Class Methods
new()
click to toggle source
# File lib/moe/table_manager.rb, line 6 def initialize @date = Time.now.strftime("%F") @dyna = Dyna.new @meta = dyna.find(meta_table_names.first) || dyna.create_table(meta_table_name, 2) end
Public Instance Methods
build(model, copies=1, hash_key="hash", range_key=nil, read_capacity=5, write_capacity=10, read_tables=[])
click to toggle source
# File lib/moe/table_manager.rb, line 12 def build(model, copies=1, hash_key="hash", range_key=nil, read_capacity=5, write_capacity=10, read_tables=[]) write_tables = dyna.create_table table_name(model), copies, hash_key, range_key, read_capacity, write_capacity metadata = { read_tables: read_tables << write_tables.first, write_tables: write_tables } update_metadata model, metadata [ read_tables, write_tables ] end
increment(model)
click to toggle source
# File lib/moe/table_manager.rb, line 30 def increment(model) metadata = load_metadata model table = load_table metadata[:write_tables].first if table[:table_name].include? date raise "Moe sez: Cannot increment twice on the same day!" end build model, metadata[:write_tables].size, table[:key][:hash], table[:key][:range], table[:read_capacity], table[:write_capacity], metadata[:read_tables] end
load_metadata(model)
click to toggle source
# File lib/moe/table_manager.rb, line 47 def load_metadata(model) metadata = dyna.get_item meta_table_names, { "hash" => { s: munged_model(model) } } MultiJson.load metadata["payload"]["s"], symbolize_keys: true end
load_table(table_name)
click to toggle source
# File lib/moe/table_manager.rb, line 54 def load_table(table_name) table = dyna.find table_name { table_name: table.table.table_name, key: get_key(table.table.key_schema), read_capacity: table.table.provisioned_throughput.read_capacity_units, write_capacity: table.table.provisioned_throughput.write_capacity_units } end
meta_table_name()
click to toggle source
# File lib/moe/table_manager.rb, line 65 def meta_table_name "moe_#{ENV['RAILS_ENV']}_manager" end
meta_table_names()
click to toggle source
# File lib/moe/table_manager.rb, line 69 def meta_table_names ["#{meta_table_name}_1", "#{meta_table_name}_2"] end
table_name(model)
click to toggle source
# File lib/moe/table_manager.rb, line 73 def table_name(model) "moe_#{ENV['RAILS_ENV']}_#{date}_#{munged_model(model)}".downcase end
update_metadata(model, payload)
click to toggle source
# File lib/moe/table_manager.rb, line 77 def update_metadata(model, payload) item = { "hash" => munged_model(model), "payload" => MultiJson.dump(payload) } dyna.put_item meta_table_names, item end
Private Instance Methods
get_key(key_schema)
click to toggle source
# File lib/moe/table_manager.rb, line 88 def get_key(key_schema) {}.tap do |key| key_schema.each do |k| if k.key_type == "HASH" key[:hash] = k.attribute_name else key[:range] = k.attribute_name end end end end
munged_model(model)
click to toggle source
# File lib/moe/table_manager.rb, line 100 def munged_model(model) model.gsub(/::/, "_") end