dynamo-autoscale 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ v0.1.3
2
+
3
+ - Minor logging tweaks.
4
+ - Fixed an undefined method error that stopped Dynamo from scaling.
5
+
1
6
  v0.1.2
2
7
 
3
8
  - Fixed a require error that caused the program to bomb out in certain
@@ -12,7 +12,7 @@ module DynamoAutoscale
12
12
  # polling always happens on interval boundaries regardless of how long
13
13
  # polling takes.
14
14
  sleep_duration = INTERVAL - ((Time.now.to_i + INTERVAL) % INTERVAL)
15
- logger.debug "Sleeping for #{sleep_duration} seconds..."
15
+ logger.debug "[cw_poller] Sleeping for #{sleep_duration} seconds..."
16
16
  sleep(sleep_duration)
17
17
 
18
18
  do_poll(tables, &block)
@@ -20,7 +20,7 @@ module DynamoAutoscale
20
20
  end
21
21
 
22
22
  def do_poll tables, &block
23
- logger.debug "Beginning CloudWatch poll..."
23
+ logger.debug "[cw_poller] Beginning CloudWatch poll..."
24
24
  now = Time.now
25
25
 
26
26
  tables.each do |table|
@@ -11,14 +11,14 @@ module DynamoAutoscale
11
11
  if datum[:provisioned_reads] and (datum[:consumed_reads] > datum[:provisioned_reads])
12
12
  lost_reads = datum[:consumed_reads] - datum[:provisioned_reads]
13
13
 
14
- logger.warn "[reads] Lost units: #{lost_reads} " +
14
+ logger.warn "[dispatcher][reads] Lost units: #{lost_reads} " +
15
15
  "(#{datum[:consumed_reads]} - #{datum[:provisioned_reads]})"
16
16
  end
17
17
 
18
18
  if datum[:provisioned_writes] and (datum[:consumed_writes] > datum[:provisioned_writes])
19
19
  lost_writes = datum[:consumed_writes] - datum[:provisioned_writes]
20
20
 
21
- logger.warn "[writes] Lost units: #{lost_writes} " +
21
+ logger.warn "[dispatcher][writes] Lost units: #{lost_writes} " +
22
22
  "(#{datum[:consumed_writes]} - #{datum[:provisioned_writes]})"
23
23
  end
24
24
 
@@ -29,7 +29,8 @@ module DynamoAutoscale
29
29
  DynamoAutoscale.rules.test(table)
30
30
  @last_check[table.name] = time
31
31
  else
32
- logger.debug "Skipped rule check, already checked for a later data point."
32
+ logger.debug "[dispatcher] Skipped rule check, already checked for " +
33
+ "a later data point."
33
34
  end
34
35
 
35
36
  DynamoAutoscale.current_table = nil
@@ -1,5 +1,9 @@
1
1
  module DynamoAutoscale
2
2
  class DynamoActioner < Actioner
3
+ def dynamo
4
+ @dynamo ||= AWS::DynamoDB.new.tables[table.name]
5
+ end
6
+
3
7
  def scale metric, value
4
8
  aws_throughput_key = case metric
5
9
  when :reads
@@ -12,22 +16,18 @@ module DynamoAutoscale
12
16
  end
13
17
 
14
18
  def scale_both reads, writes
15
- dynamo_scale(table, {
16
- read_capacity_units: reads, write_capacity_units: writes
17
- })
19
+ dynamo_scale(read_capacity_units: reads, write_capacity_units: writes)
18
20
  end
19
21
 
20
22
  private
21
23
 
22
- def self.dynamo_scale opts
23
- aws_table = AWS::DynamoDB.new.tables[table.name]
24
-
25
- if aws_table.status == :updating
26
- logger.warn "Cannot scale throughputs. Table is updating."
24
+ def dynamo_scale opts
25
+ if dynamo.status == :updating
26
+ logger.warn "[actioner] Cannot scale throughputs. Table is updating."
27
27
  return false
28
28
  end
29
29
 
30
- aws_table.provision_throughput(opts)
30
+ dynamo.provision_throughput(opts)
31
31
  return true
32
32
  rescue AWS::DynamoDB::Errors::ValidationException => e
33
33
  # When you try to set throughput to a negative value or the same value it
@@ -23,7 +23,7 @@ module DynamoAutoscale
23
23
  data = JSON.parse(File.read(table_path)).symbolize_keys
24
24
 
25
25
  if data[:consumed_writes].nil? or data[:consumed_reads].nil?
26
- logger.warn "Lacking data for table #{table_name}. Skipping."
26
+ logger.warn "[ld_poller] Lacking data for table #{table_name}. Skipping."
27
27
  next
28
28
  end
29
29
 
@@ -1,5 +1,7 @@
1
1
  module DynamoAutoscale
2
2
  class Rule
3
+ include DynamoAutoscale::Logger
4
+
3
5
  attr_accessor :metric, :opts
4
6
 
5
7
  CONDITIONS = {
@@ -26,7 +26,7 @@ module DynamoAutoscale
26
26
  # :consumed_reads=>342.4033333333333}
27
27
  def tick time, datum
28
28
  if time < (Time.now.utc - TIME_WINDOW)
29
- logger.warn "Attempted to insert data outside of the time window."
29
+ logger.warn "[table] Attempted to insert data outside of the time window."
30
30
  return
31
31
  end
32
32
 
@@ -36,14 +36,14 @@ module DynamoAutoscale
36
36
  datum[:provisioned_writes] = last_provisioned_for :writes, at: time
37
37
 
38
38
  if datum[:provisioned_writes]
39
- logger.debug "Filled in gap in provisioned writes."
39
+ logger.debug "[table] Filled in gap in provisioned writes."
40
40
  end
41
41
  end
42
42
  if datum[:provisioned_reads].nil?
43
43
  datum[:provisioned_reads] = last_provisioned_for :reads, at: time
44
44
 
45
45
  if datum[:provisioned_reads]
46
- logger.debug "Filled in gap in provisioned reads."
46
+ logger.debug "[table] Filled in gap in provisioned reads."
47
47
  end
48
48
  end
49
49
 
@@ -51,7 +51,7 @@ module DynamoAutoscale
51
51
 
52
52
  # The code below here just makes sure that we're trimming data points that
53
53
  # are outside of the time window.
54
- logger.debug "Pruning data that may be outside of time window..."
54
+ logger.debug "[table] Pruning data that may be outside of time window..."
55
55
  now = Time.now.utc
56
56
  to_delete = @data.each.take_while { |key, _| key < (now - TIME_WINDOW) }
57
57
  to_delete.each { |key, _| @data.delete(key) }
@@ -280,7 +280,7 @@ module DynamoAutoscale
280
280
  `r --no-save --args #{data_tmp} #{png_tmp} < #{r_script}`
281
281
 
282
282
  if $? != 0
283
- logger.error "Failed to create graph."
283
+ logger.error "[table] Failed to create graph."
284
284
  else
285
285
  `open #{png_tmp}` if opts[:open]
286
286
  end
@@ -298,7 +298,7 @@ module DynamoAutoscale
298
298
  `r --no-save --args #{data_tmp} #{png_tmp} < #{r_script}`
299
299
 
300
300
  if $? != 0
301
- logger.error "Failed to create graph."
301
+ logger.error "[table] Failed to create graph."
302
302
  else
303
303
  `open #{png_tmp}`
304
304
  end
@@ -1,3 +1,3 @@
1
1
  module DynamoAutoscale
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamo-autoscale
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: