Class: Moe::TableManager

Inherits:
Object
  • Object
show all
Defined in:
lib/moe/table_manager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTableManager

Returns a new instance of TableManager.



6
7
8
9
10
# 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

Instance Attribute Details

#dateObject (readonly)

Returns the value of attribute date.



3
4
5
# File 'lib/moe/table_manager.rb', line 3

def date
  @date
end

#dynaObject

Returns the value of attribute dyna.



4
5
6
# File 'lib/moe/table_manager.rb', line 4

def dyna
  @dyna
end

#metaObject

Returns the value of attribute meta.



4
5
6
# File 'lib/moe/table_manager.rb', line 4

def meta
  @meta
end

Instance Method Details

#build(model, copies = 1, hash_key = "hash", range_key = nil, read_capacity = 5, write_capacity = 10, read_tables = []) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 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

   = {
    read_tables:  read_tables << write_tables.first,
    write_tables: write_tables
  }

   model, 

  [ read_tables, write_tables ]
end

#increment(model) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/moe/table_manager.rb', line 30

def increment(model)
   =  model
  table    = load_table [:write_tables].first

  if table[:table_name].include? date
    raise "Moe sez: Cannot increment twice on the same day!"
  end

  build model,
        [:write_tables].size,
        table[:key][:hash],
        table[:key][:range],
        table[:read_capacity],
        table[:write_capacity],
        [:read_tables]
end

#load_metadata(model) ⇒ Object



47
48
49
50
51
52
# File 'lib/moe/table_manager.rb', line 47

def (model)
   = dyna.get_item meta_table_names,
                            { "hash" => { s: munged_model(model) } }

  MultiJson.load ["payload"]["s"], symbolize_keys: true
end

#load_table(table_name) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# 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_nameObject



65
66
67
# File 'lib/moe/table_manager.rb', line 65

def meta_table_name
  "moe_#{ENV['RAILS_ENV']}_manager"
end

#meta_table_namesObject



69
70
71
# File 'lib/moe/table_manager.rb', line 69

def meta_table_names
  ["#{meta_table_name}_1", "#{meta_table_name}_2"]
end

#table_name(model) ⇒ Object



73
74
75
# 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) ⇒ Object



77
78
79
80
81
82
83
84
# File 'lib/moe/table_manager.rb', line 77

def (model, payload)
  item = { 
    "hash"    => munged_model(model),
    "payload" => MultiJson.dump(payload)
  }

  dyna.put_item meta_table_names, item
end