Class: DynamoAutoscale::RuleSet

Inherits:
Object
  • Object
show all
Includes:
Logger
Defined in:
lib/dynamo-autoscale/rule_set.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logger

included, logger, #logger, logger=

Constructor Details

#initialize(path = nil, &block) ⇒ RuleSet

Returns a new instance of RuleSet.



7
8
9
10
11
12
13
14
15
16
# File 'lib/dynamo-autoscale/rule_set.rb', line 7

def initialize path = nil, &block
  @rules = Hash.new { |h, k| h[k] = [] }
  @current_table = :all

  if path
    instance_eval(File.read(path))
  elsif block
    instance_eval(&block)
  end
end

Instance Attribute Details

#rulesObject

Returns the value of attribute rules.



5
6
7
# File 'lib/dynamo-autoscale/rule_set.rb', line 5

def rules
  @rules
end

Instance Method Details

#checksumObject



64
65
66
# File 'lib/dynamo-autoscale/rule_set.rb', line 64

def checksum
  Digest::MD5.hexdigest(self.serialize)
end

#deep_dupObject



68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/dynamo-autoscale/rule_set.rb', line 68

def deep_dup
  duplicate = RuleSet.new
  new_rules = Hash.new { |h, k| h[k] = [] }

  @rules.each do |table_name, rules|
    rules.each do |rule|
      new_rules[table_name] << Rule.new(rule.metric, rule.opts)
    end
  end

  duplicate.rules = new_rules
  duplicate
end

#for(table_name) ⇒ Object



18
19
20
21
# File 'lib/dynamo-autoscale/rule_set.rb', line 18

def for table_name
  return @rules[:all] if table_name == :all
  @rules[table_name] + @rules[:all]
end

#reads(opts, &block) ⇒ Object



50
51
52
# File 'lib/dynamo-autoscale/rule_set.rb', line 50

def reads opts, &block
  @rules[@current_table] << Rule.new(:consumed_reads, opts, &block)
end

#serializeObject



54
55
56
57
58
59
60
61
62
# File 'lib/dynamo-autoscale/rule_set.rb', line 54

def serialize
  @rules.inject("") do |memo, (table_name, rules)|
    memo += "table #{table_name.inspect} do\n"
    rules.each do |rule|
      memo += "  #{rule.serialize}\n"
    end
    memo += "end\n"
  end
end

#table(table_name, &block) ⇒ Object



40
41
42
43
44
# File 'lib/dynamo-autoscale/rule_set.rb', line 40

def table table_name, &block
  @current_table = table_name
  instance_eval(&block)
  @current_table = :all
end

#test(table) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/dynamo-autoscale/rule_set.rb', line 23

def test table
  result = false
  rules  = self.for(table.name)

  rules.select(&:reads?).each do |rule|
    # logger.debug "[rule_set] Checking rule: #{rule.to_english}"
    break result = true if rule.test(table)
  end

  rules.select(&:writes?).each do |rule|
    # logger.debug "[rule_set] Checking rule: #{rule.to_english}"
    break result = true if rule.test(table)
  end

  result
end

#writes(opts, &block) ⇒ Object



46
47
48
# File 'lib/dynamo-autoscale/rule_set.rb', line 46

def writes opts, &block
  @rules[@current_table] << Rule.new(:consumed_writes, opts, &block)
end