Skip to content

Commit 5c73a0e

Browse files
committed
refactor: cleanup bin/datadog_backup flow
1 parent 69acc25 commit 5c73a0e

File tree

2 files changed

+43
-36
lines changed

2 files changed

+43
-36
lines changed

bin/datadog_backup

+38-30
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,24 @@ $stdout.sync = $stderr.sync = true
1313
LOGGER = Logger.new($stderr) unless defined?(LOGGER)
1414
LOGGER.level = Logger::INFO
1515

16-
##
17-
# Default parameters
18-
@options = {
19-
action: nil,
20-
datadog_api_key: ENV.fetch('DATADOG_API_KEY'),
21-
datadog_app_key: ENV.fetch('DATADOG_APP_KEY'),
22-
backup_dir: File.join(ENV.fetch('PWD'), 'backup'),
23-
diff_format: :color,
24-
resources: [DatadogBackup::Dashboards, DatadogBackup::Monitors],
25-
output_format: :yaml,
26-
force_restore: false,
27-
logger: LOGGER
28-
}
16+
def fatal(message)
17+
LOGGER.fatal(message)
18+
exit 1
19+
end
20+
21+
def options_valid?(options)
22+
%w[backup diffs restore].include?(options[:action]) &&
23+
options[:datadog_api_key] &&
24+
options[:datadog_app_key]
25+
end
2926

30-
def prereqs
27+
def prereqs(defaults)
3128
ARGV << '--help' if ARGV.empty?
3229

30+
result = defaults.dup
31+
3332
options = OptionParser.new do |opts|
34-
opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} <backup|diffs|restore>"
33+
opts.banner = "Usage: DATADOG_API_KEY=abc123 DATADOG_APP_KEY=abc123 #{File.basename($PROGRAM_NAME)} <backup|diffs|restore>"
3534
opts.separator ''
3635
opts.on_tail('-h', '--help', 'Show this message') do
3736
puts opts
@@ -47,40 +46,49 @@ def prereqs
4746
LOGGER.level = Logger::ERROR
4847
end
4948
opts.on('--backup-dir PATH', '`backup` by default') do |path|
50-
@options[:backup_dir] = path
49+
result[:backup_dir] = path
5150
end
5251
opts.on('--monitors-only') do
53-
@options[:resources] = [DatadogBackup::Monitors]
52+
result[:resources] = [DatadogBackup::Monitors]
5453
end
5554
opts.on('--dashboards-only') do
56-
@options[:resources] = [DatadogBackup::Dashboards]
55+
result[:resources] = [DatadogBackup::Dashboards]
5756
end
5857
opts.on(
5958
'--json',
6059
'format backups as JSON instead of YAML. Does not impact `diffs` nor `restore`, but do not mix formats in the same backup-dir.'
6160
) do
62-
@options[:output_format] = :json
61+
result[:output_format] = :json
6362
end
6463
opts.on('--no-color', 'removes colored output from diff format') do
65-
@options[:diff_format] = nil
64+
result[:diff_format] = nil
6665
end
6766
opts.on('--diff-format FORMAT', 'one of `color`, `html_simple`, `html`') do |format|
68-
@options[:diff_format] = format.to_sym
67+
result[:diff_format] = format.to_sym
6968
end
7069
opts.on('--force-restore', 'force restore to Datadog') do
71-
@options[:force_restore] = true
70+
result[:force_restore] = true
7271
end
7372
end
7473
options.parse!
7574

76-
@options[:action] = ARGV.first
77-
if %w[backup diffs restore].include?(@options[:action])
78-
else
79-
puts options
80-
exit 0
81-
end
75+
result[:action] = ARGV.first
76+
fatal(options) unless options_valid?(result)
77+
result
8278
end
8379

84-
prereqs
80+
##
81+
# Default parameters
82+
defaults = {
83+
action: nil,
84+
datadog_api_key: ENV.fetch('DATADOG_API_KEY', nil),
85+
datadog_app_key: ENV.fetch('DATADOG_APP_KEY', nil),
86+
backup_dir: File.join(ENV.fetch('PWD'), 'backup'),
87+
diff_format: :color,
88+
resources: [DatadogBackup::Dashboards, DatadogBackup::Monitors],
89+
output_format: :yaml,
90+
force_restore: false,
91+
logger: LOGGER
92+
}
8593

86-
DatadogBackup::Cli.new(@options).run!
94+
DatadogBackup::Cli.new(prereqs(defaults)).run!

spec/datadog_backup_bin_spec.rb

+5-6
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,11 @@ def run_bin(args = '', input = nil)
3737
]
3838

3939
env = {}
40-
41-
before do
42-
required_vars.each do |v|
43-
env[v] = v.downcase
44-
end
40+
required_vars.each do |v|
41+
env[v] = v.downcase
4542
end
4643

44+
4745
required_vars.map do |v|
4846
it "dies unless given ENV[#{v}]" do
4947
stub_const('ENV', env.dup.tap { |h| h.delete(v) })
@@ -53,8 +51,9 @@ def run_bin(args = '', input = nil)
5351
end
5452

5553
it 'supplies help' do
54+
stub_const('ENV', env)
5655
out_err, status = run_bin('--help')
57-
expect(out_err).to match(/Usage: datadog_backup/)
56+
expect(out_err).to match(/Usage: DATADOG_API_KEY=/)
5857
expect(status).to be_success
5958
end
6059
end

0 commit comments

Comments
 (0)