Class: DatadogBackup::Cli
- Inherits:
-
Object
- Object
- DatadogBackup::Cli
show all
- Includes:
- Options
- Defined in:
- lib/datadog_backup/cli.rb
Overview
CLI is the command line interface for the datadog_backup gem.
Instance Method Summary
collapse
Methods included from Options
#action, #backup_dir, #concurrency_limit, #diff_format, #disable_array_sort, #force_restore, #output_format, #resources
Constructor Details
#initialize(options) ⇒ Cli
rubocop:enable Style/StringConcatenation
67
68
69
|
# File 'lib/datadog_backup/cli.rb', line 67
def initialize(options)
@options = options
end
|
Instance Method Details
#all_diff_futures ⇒ Object
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/datadog_backup/cli.rb', line 11
def all_diff_futures
LOGGER.info("Starting diffs on #{::DatadogBackup::ThreadPool::TPOOL.max_length} threads")
any_resource_instance
.all_file_ids_for_selected_resources
.map do |file_id|
Concurrent::Promises.future_on(::DatadogBackup::ThreadPool::TPOOL, file_id) do |fid|
[fid, getdiff(fid)]
end
end
end
|
#any_resource_instance ⇒ Object
22
23
24
|
# File 'lib/datadog_backup/cli.rb', line 22
def any_resource_instance
resource_instances.first
end
|
#backup ⇒ Object
26
27
28
29
30
|
# File 'lib/datadog_backup/cli.rb', line 26
def backup
resource_instances.each(&:purge)
resource_instances.each(&:backup)
any_resource_instance.all_files
end
|
#definitive_resource_instance(id) ⇒ Object
32
33
34
|
# File 'lib/datadog_backup/cli.rb', line 32
def definitive_resource_instance(id)
matching_resource_instance(any_resource_instance.class_from_id(id))
end
|
rubocop:disable Style/StringConcatenation
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/datadog_backup/cli.rb', line 47
def format_diff_output(diff_output)
case diff_format
when nil, :color
diff_output.map do |id, diff|
" ---\n id: #{id}\n#{diff}"
end.join("\n")
when :html
'<html><head><style>' +
Diffy::CSS +
'</style></head><body>' +
diff_output.map do |id, diff|
"<br><br> ---<br><strong> id: #{id}</strong><br>#{diff}"
end.join('<br>') +
'</body></html>'
else
raise 'Unexpected diff_format.'
end
end
|
#getdiff(id) ⇒ Object
36
37
38
39
40
41
42
43
44
|
# File 'lib/datadog_backup/cli.rb', line 36
def getdiff(id)
result = definitive_resource_instance(id).diff(id)
case result
when '---' || '' || "\n" || '<div class="diff"></div>'
nil
else
result
end
end
|
#restore ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/datadog_backup/cli.rb', line 71
def restore
futures = all_diff_futures
watcher = ::DatadogBackup::ThreadPool.watcher
futures.each do |future|
id, diff = *future.value!
next if diff.nil? || diff.empty?
if @options[:force_restore]
definitive_resource_instance(id).restore(id)
else
ask_to_restore(id, diff)
end
end
watcher.join if watcher.status
end
|
#run! ⇒ Object
88
89
90
91
92
|
# File 'lib/datadog_backup/cli.rb', line 88
def run!
puts(send(action.to_sym))
rescue SystemExit, Interrupt
::DatadogBackup::ThreadPool.shutdown
end
|