rdstune 0.8.0 → 1.0.0
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.
- checksums.yaml +4 -4
- data/bin/rdstune +10 -10
- data/lib/rdstune.rb +88 -82
- data/lib/version.rb +3 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b304bd65c257d28fe26645a22f45af55266b6b5
|
4
|
+
data.tar.gz: 1e828da1b0e0a1f664619dba251ce75001c3b43c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46f46ddd08ccdbcbaf82eccaf1bd843fecd0235b8a083c35c723340528846064518c9bb8238e46394a160cd8ee8be3df0561791bcb4dbc98f04e161c15085f2e
|
7
|
+
data.tar.gz: 13c519d846d21ecacbb9627b0448689356d594deab4421a84973ad52cf4a5e7085a2ac8b6cbabba9dd0942668a8ecfb55648b05108c951d96831c22fba3b981d
|
data/bin/rdstune
CHANGED
@@ -5,18 +5,11 @@ require_relative '../lib/rdstune'
|
|
5
5
|
require_relative '../lib/version'
|
6
6
|
|
7
7
|
p = Trollop::Parser.new do
|
8
|
-
version "rdstune version: #{VERSION}"
|
8
|
+
version "rdstune version: #{RDSTUNE::VERSION}"
|
9
9
|
banner <<-EOS
|
10
10
|
|
11
11
|
This gem creates a Parameter Group with sane defaults for your PostgreSQL RDS instances
|
12
12
|
|
13
|
-
Make sure you set the following environment variables
|
14
|
-
(or their ~/.aws/credentials equivilant)
|
15
|
-
|
16
|
-
export AWS_ACCESS_KEY="AWS_ACCESS_KEY"
|
17
|
-
export AWS_SECRET_KEY="AWS_SECRET_KEY"
|
18
|
-
export AWS_REGION='REGION' # ex: us-west-2
|
19
|
-
|
20
13
|
Options:
|
21
14
|
EOS
|
22
15
|
opt :type, "Type of Database Server (Web/DW/Mixed/Desktop)", :type => :string, :default => 'web'
|
@@ -24,7 +17,10 @@ EOS
|
|
24
17
|
opt :connections, "Specify the Target Max Connections", :type => :integer
|
25
18
|
opt :oversubscribe, "Oversubscribe the number of connections", :type => :integer
|
26
19
|
opt :name, "Name of your RDS Parameter Group", :type => :string
|
27
|
-
opt :family, "Database Family (Postgres version)", :type => :string, :default => 'postgres9.
|
20
|
+
opt :family, "Database Family (Postgres version)", :type => :string, :default => 'postgres9.4'
|
21
|
+
opt :access_key_id, "Set the AWS Access Key for the account (default: $AWS_ACCESS_KEY_ID)", :type => :string, :default => ENV['AWS_ACCESS_KEY_ID']
|
22
|
+
opt :secret_access_key, "Set the AWS Secret Key for the account (default: $AWS_SECRET_ACCESS_KEY)", :type => :string, :default => ENV['AWS_SECRET_ACCESS_KEY']
|
23
|
+
opt :region, "Specify the AWS Region for the account (default: $AWS_REGION)", :type => :string, :default => ENV['AWS_REGION']
|
28
24
|
opt :version, "Show the current version of rdstune"
|
29
25
|
end
|
30
26
|
|
@@ -38,8 +34,12 @@ end
|
|
38
34
|
|
39
35
|
name = opts[:name] || "rdstune-#{opts[:type]}-#{opts[:memory]}-#{opts[:connections]}".gsub('.','-')
|
40
36
|
options = {}
|
37
|
+
aws_credentials = { :access_key_id => opts[:access_key_id],
|
38
|
+
:secret_access_key => opts[:secret_access_key],
|
39
|
+
:region => opts[:region] }
|
41
40
|
options['connections'] = opts[:connections] if opts[:connections]
|
42
41
|
options['oversubscribe'] = opts[:oversubscribe] if opts[:oversubscribe]
|
43
|
-
rdstune = RdsTune.new opts[:type], opts[:memory],
|
42
|
+
rdstune = RDSTUNE::RdsTune.new(type: opts[:type], memory: opts[:memory],
|
43
|
+
aws_credentials: aws_credentials, options: options)
|
44
44
|
rdstune.create_parameter_group name, opts[:family]
|
45
45
|
rdstune.display_config
|
data/lib/rdstune.rb
CHANGED
@@ -2,104 +2,110 @@ require 'aws-sdk'
|
|
2
2
|
require 'mrtuner'
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
module RDSTUNE
|
6
|
+
class RdsTune < MrTuner
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
group_name = name
|
18
|
-
group_family = family
|
19
|
-
unless find_parameter_group(group_name)
|
20
|
-
@rds.create_db_parameter_group({
|
21
|
-
:db_parameter_group_name => group_name,
|
22
|
-
:db_parameter_group_family => group_family,
|
23
|
-
:description => "Created by RdsTune - #{@type} - #{@memory} - #{Time.now.to_s}"
|
24
|
-
})
|
8
|
+
def initialize(type:, memory:, options: {}, aws_credentials: {}, rds_client: nil)
|
9
|
+
if rds_client
|
10
|
+
@rds = rds_client
|
11
|
+
else
|
12
|
+
@rds = Aws::RDS::Client.new(aws_credentials)
|
13
|
+
end
|
14
|
+
@type = type
|
15
|
+
@memory = memory
|
16
|
+
@options = options
|
17
|
+
super(@type, @memory, @options)
|
25
18
|
end
|
26
|
-
update_parameter_group(group_name)
|
27
|
-
end
|
28
19
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
20
|
+
def create_parameter_group(name = nil, family = nil)
|
21
|
+
abort("Please Specify a Parameter Group Name: #{name} or Family: #{family}") unless name && family
|
22
|
+
group_name = name
|
23
|
+
group_family = family
|
24
|
+
unless find_parameter_group(group_name)
|
25
|
+
@rds.create_db_parameter_group({
|
26
|
+
:db_parameter_group_name => group_name,
|
27
|
+
:db_parameter_group_family => group_family,
|
28
|
+
:description => "Created by RdsTune - #{@type} - #{@memory} - #{Time.now.to_s}"
|
35
29
|
})
|
36
|
-
|
37
|
-
|
38
|
-
rescue Aws::RDS::Errors::InvalidDBParameterGroupState
|
39
|
-
abort("Parameter group not updateable at this time " + Aws::RDS::Errors::InvalidDBParameterGroupState)
|
30
|
+
end
|
31
|
+
update_parameter_group(group_name)
|
40
32
|
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def generate_update(group_name)
|
44
|
-
parameters = get_all_parameters(group_name)
|
45
|
-
new_config = get_config
|
46
|
-
out = Array.new
|
47
|
-
new_config.each do |p, v|
|
48
|
-
parameter = get_parameter(p.to_s, parameters)
|
49
|
-
low,high = parameter[:allowed_values].split('-')
|
50
33
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
34
|
+
private
|
35
|
+
def update_parameter_group(group_name)
|
36
|
+
begin
|
37
|
+
@rds.modify_db_parameter_group({
|
38
|
+
:db_parameter_group_name => group_name,
|
39
|
+
:parameters => generate_update(group_name)
|
40
|
+
})
|
41
|
+
puts "Group #{group_name } created."
|
42
|
+
return group_name
|
43
|
+
rescue Aws::RDS::Errors::InvalidDBParameterGroupState
|
44
|
+
abort("Parameter group not updateable at this time " + Aws::RDS::Errors::InvalidDBParameterGroupState)
|
57
45
|
end
|
46
|
+
end
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
v = high if v.to_f > high.to_f
|
67
|
-
parameter[:parameter_value] = v.to_i.to_s
|
68
|
-
end
|
48
|
+
def generate_update(group_name)
|
49
|
+
parameters = get_all_parameters(group_name)
|
50
|
+
new_config = get_config
|
51
|
+
out = Array.new
|
52
|
+
new_config.each do |p, v|
|
53
|
+
parameter = get_parameter(p.to_s, parameters)
|
54
|
+
low,high = parameter[:allowed_values].split('-')
|
69
55
|
|
70
|
-
|
71
|
-
parameter[:
|
72
|
-
|
73
|
-
|
56
|
+
# Convert Bytes to Kibibytes for Memory parameters
|
57
|
+
case parameter[:parameter_name]
|
58
|
+
when 'work_mem','maintenance_work_mem'
|
59
|
+
v = v / 1024
|
60
|
+
when 'shared_buffers','effective_cache_size'
|
61
|
+
v = (v / 1024) / 8
|
62
|
+
end
|
63
|
+
|
64
|
+
case parameter[:data_type]
|
65
|
+
when 'float'
|
66
|
+
v = low if v.to_f < low.to_f
|
67
|
+
v = high if v.to_f > high.to_f
|
68
|
+
parameter[:parameter_value] = v.to_f.to_s
|
69
|
+
when 'integer'
|
70
|
+
v = low if v.to_f < low.to_f
|
71
|
+
v = high if v.to_f > high.to_f
|
72
|
+
parameter[:parameter_value] = v.to_i.to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
if parameter[:apply_type] == 'dynamic'
|
76
|
+
parameter[:apply_method] = 'immediate'
|
77
|
+
else
|
78
|
+
parameter[:apply_method] = 'pending-reboot'
|
79
|
+
end
|
80
|
+
out.push(parameter)
|
74
81
|
end
|
75
|
-
out
|
82
|
+
out
|
76
83
|
end
|
77
|
-
out
|
78
|
-
end
|
79
84
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
def get_all_parameters(group_name)
|
86
|
+
marker = ""
|
87
|
+
parameters = []
|
88
|
+
loop do
|
89
|
+
resp = @rds.describe_db_parameters( :db_parameter_group_name => group_name, :marker => marker)
|
90
|
+
parameters += resp[:parameters]
|
91
|
+
marker = resp[:marker]
|
92
|
+
break unless marker
|
93
|
+
end
|
94
|
+
parameters
|
88
95
|
end
|
89
|
-
parameters
|
90
|
-
end
|
91
96
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
+
def find_parameter_group(name)
|
98
|
+
begin
|
99
|
+
@rds.describe_db_parameter_groups( { :db_parameter_group_name => name } )
|
100
|
+
rescue Aws::RDS::Errors::DBParameterGroupNotFound
|
101
|
+
nil
|
102
|
+
end
|
97
103
|
end
|
98
|
-
end
|
99
104
|
|
100
|
-
|
101
|
-
|
102
|
-
|
105
|
+
def get_parameter(name, parameters)
|
106
|
+
parameters.select {|parameter| parameter[:parameter_name] == name}.first
|
107
|
+
end
|
103
108
|
|
104
109
|
|
110
|
+
end
|
105
111
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdstune
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Kerr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -74,9 +74,9 @@ require_paths:
|
|
74
74
|
- lib
|
75
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
|
-
- - "
|
77
|
+
- - "~>"
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: '0'
|
79
|
+
version: '2.0'
|
80
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - ">="
|
@@ -84,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
84
|
version: '0'
|
85
85
|
requirements: []
|
86
86
|
rubyforge_project:
|
87
|
-
rubygems_version: 2.4.
|
87
|
+
rubygems_version: 2.4.1
|
88
88
|
signing_key:
|
89
89
|
specification_version: 4
|
90
90
|
summary: Creates Tuned RDS Parameter Group for Postgres
|