datadog_backup 3.0.0.alpha.2 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ada6cc077ab1a7145bdbee5db768e9544a50a20f427c49bf86aabfe63ab2b74
4
- data.tar.gz: 0e40617381ac33d1b4094cd277303dca2d0ece0372f7f13a3b4161eac304f34c
3
+ metadata.gz: 332899376b51dd8ad98dda7a3528b7a7c80ca8cbbd2c4bbe9c2cb9976a1c7024
4
+ data.tar.gz: 68b89a77b5148006b16388c7a93241ca50fcecb6bc4edc09ab36cf34a80d92e8
5
5
  SHA512:
6
- metadata.gz: 437faae8390ce834b7a20bfcf6f2097f94a8ab93a808aa0c5594e1972e0e8b9497e16838dda7b02f89349b8a41c721e4577ea552cf1b267ea923b016d00f77dc
7
- data.tar.gz: 9a96702e3928e1768adc888dc206cdf13e4a7a3adb9b99a385dd487338b52ff62028de96e87220eb487b9959d73e58a1a02d12f125c906b8e62209ad6e65d94d
6
+ metadata.gz: ab35b9e6a6152cc22ff3de7714ed60f2bca54c056a510d5726e5d33921a0f54d088195bfd7b992494545ccdfa8350e99e097c19155cfde4f7396049aeaad9650
7
+ data.tar.gz: 4f2f791146658c9a9e4185ef3bda43180a5ef46938dd6b2754aa493bcac9949f19a53f70b972a125ae51ad7b71f6f8c309767d83654e40a4d7d5f4be70e6c39c
@@ -25,7 +25,6 @@ jobs:
25
25
  run: |
26
26
  bundle exec rspec --format documentation --require spec_helper
27
27
  release:
28
- if: github.event_name == 'push'
29
28
  needs: rspec
30
29
  runs-on: ubuntu-latest
31
30
  env:
@@ -36,7 +35,6 @@ jobs:
36
35
  uses: ruby/setup-ruby@v1
37
36
  with:
38
37
  ruby-version: 2.7
39
- bundler-cache: true
40
38
  - name: Zip
41
39
  run : |
42
40
  zip -r datadog_backup.zip ./*
data/.gitignore CHANGED
@@ -120,4 +120,6 @@ backup/
120
120
 
121
121
  .envrc
122
122
 
123
- .vscode
123
+ .vscode
124
+ spec/examples.txt
125
+
data/.rubocop.yml CHANGED
@@ -1,78 +1,37 @@
1
- require: rubocop-rspec
1
+ # The behavior of RuboCop can be controlled via the .rubocop.yml
2
+ # configuration file. It makes it possible to enable/disable
3
+ # certain cops (checks) and to alter their behavior if they accept
4
+ # any parameters. The file can be placed either in your home
5
+ # directory or in some project directory.
6
+ #
7
+ # RuboCop will start looking for the configuration file in the directory
8
+ # where the inspected file is and continue its way up to the root directory.
9
+ #
10
+ # See https://docs.rubocop.org/rubocop/configuration
11
+ require:
12
+ - rubocop-rspec
2
13
 
3
- Gemspec/DateAssignment: # (new in 1.10)
4
- Enabled: true
5
- Layout/LineEndStringConcatenationIndentation: # (new in 1.18)
6
- Enabled: true
7
- Layout/SpaceBeforeBrackets: # (new in 1.7)
8
- Enabled: true
9
- Lint/AmbiguousAssignment: # (new in 1.7)
10
- Enabled: true
11
- Lint/DeprecatedConstants: # (new in 1.8)
12
- Enabled: true
13
- Lint/DuplicateBranch: # (new in 1.3)
14
- Enabled: true
15
- Lint/DuplicateRegexpCharacterClassElement: # (new in 1.1)
16
- Enabled: true
17
- Lint/EmptyBlock: # (new in 1.1)
18
- Enabled: true
19
- Lint/EmptyClass: # (new in 1.3)
20
- Enabled: true
21
- Lint/EmptyInPattern: # (new in 1.16)
22
- Enabled: true
23
- Lint/LambdaWithoutLiteralBlock: # (new in 1.8)
24
- Enabled: true
25
- Lint/NoReturnInBeginEndBlocks: # (new in 1.2)
26
- Enabled: true
27
- Lint/NumberedParameterAssignment: # (new in 1.9)
28
- Enabled: true
29
- Lint/OrAssignmentToConstant: # (new in 1.9)
30
- Enabled: true
31
- Lint/RedundantDirGlobSort: # (new in 1.8)
32
- Enabled: true
33
- Lint/SymbolConversion: # (new in 1.9)
34
- Enabled: true
35
- Lint/ToEnumArguments: # (new in 1.1)
36
- Enabled: true
37
- Lint/TripleQuotes: # (new in 1.9)
38
- Enabled: true
39
- Lint/UnexpectedBlockArity: # (new in 1.5)
40
- Enabled: true
41
- Lint/UnmodifiedReduceAccumulator: # (new in 1.1)
42
- Enabled: true
43
- Naming/InclusiveLanguage: # (new in 1.18)
44
- Enabled: true
45
- Style/ArgumentsForwarding: # (new in 1.1)
46
- Enabled: true
47
- Style/CollectionCompact: # (new in 1.2)
48
- Enabled: true
49
- Style/DocumentDynamicEvalDefinition: # (new in 1.1)
50
- Enabled: true
51
- Style/EndlessMethod: # (new in 1.8)
52
- Enabled: true
53
- Style/HashConversion: # (new in 1.10)
54
- Enabled: true
55
- Style/HashExcept: # (new in 1.7)
56
- Enabled: true
57
- Style/IfWithBooleanLiteralBranches: # (new in 1.9)
58
- Enabled: true
59
- Style/InPatternThen: # (new in 1.16)
60
- Enabled: true
61
- Style/MultilineInPatternThen: # (new in 1.16)
62
- Enabled: true
63
- Style/NegatedIfElseCondition: # (new in 1.2)
64
- Enabled: true
65
- Style/NilLambda: # (new in 1.3)
66
- Enabled: true
67
- Style/QuotedSymbols: # (new in 1.16)
68
- Enabled: true
69
- Style/RedundantArgument: # (new in 1.4)
70
- Enabled: true
71
- Style/StringChars: # (new in 1.12)
72
- Enabled: true
73
- Style/SwapValues: # (new in 1.1)
74
- Enabled: true
75
- RSpec/IdenticalEqualityAssertion: # (new in 2.4)
76
- Enabled: true
77
- RSpec/Rails/AvoidSetupHook: # (new in 2.4)
78
- Enabled: true
14
+ AllCops:
15
+ TargetRubyVersion: 2.7
16
+ NewCops: enable
17
+
18
+ Layout/LineLength:
19
+ Enabled: false
20
+
21
+ Metrics/BlockLength:
22
+ Enabled: false
23
+
24
+ Metrics/ClassLength:
25
+ Enabled: false
26
+
27
+ Metrics/MethodLength:
28
+ Enabled: false
29
+
30
+ Naming/AccessorMethodName:
31
+ Enabled: false
32
+
33
+ RSpec/MultipleMemoizedHelpers:
34
+ Enabled: false
35
+
36
+ RSpec/ExampleLength:
37
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,42 @@
1
+ ## [3.1.1](https://github.com/scribd/datadog_backup/compare/v3.1.0...v3.1.1) (2022-09-01)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * catch SystemExit so that rspec can complete ([9eee0e5](https://github.com/scribd/datadog_backup/commit/9eee0e5c5ea857baeafcf3fbc0f1c8f3748b0ca8))
7
+ * specify minimum ruby version in Gemfile ([c7f48f9](https://github.com/scribd/datadog_backup/commit/c7f48f95269a23549e28576434292d4ba1332d59))
8
+
9
+
10
+ ### Reverts
11
+
12
+ * Revert "fix: specify minimum ruby version in Gemfile" ([e934ac2](https://github.com/scribd/datadog_backup/commit/e934ac2611c9bb557a181dd2f6f6b2678287773d))
13
+
14
+ # [3.1.0](https://github.com/scribd/datadog_backup/compare/v3.0.0...v3.1.0) (2022-08-30)
15
+
16
+
17
+ ### Features
18
+
19
+ * backup and restore synthetics ([#139](https://github.com/scribd/datadog_backup/issues/139)) ([a46cadc](https://github.com/scribd/datadog_backup/commit/a46cadc7d196dcb0f20bf31d06cde6a13a390835))
20
+
21
+ # [3.0.0](https://github.com/scribd/datadog_backup/compare/v2.0.2...v3.0.0) (2022-08-25)
22
+
23
+
24
+ * feat!: release 3.0 (#136) ([3d23b03](https://github.com/scribd/datadog_backup/commit/3d23b03668e888886f394de2fa4884aa1e3ca287)), closes [#136](https://github.com/scribd/datadog_backup/issues/136)
25
+
26
+
27
+ ### BREAKING CHANGES
28
+
29
+ * DATADOG_API_KEY and DATADOG_APP_KEY are no longer the environment variables used to authenticate to Datadog. Instead, set the environment variables DD_API_KEY and DD_APP_KEY.
30
+ * ruby 2.6 is no longer supported. Please upgrade to ruby 2.7 or higher.
31
+ * The options `--ssh` and `--ssshh` are no longer supported. Instead, please use `--quiet` to supress logging. `--debug` remains supported.
32
+ * The environment variable `DATADOG_HOST` is no longer supported. Instead, please use `DD_SITE_URL`.
33
+
34
+ refactor: The legacy [dogapi-rb ](https://github.com/DataDog/dogapi-rb) gem is replaced with [faraday](https://lostisland.github.io/faraday/). The [official client library](https://github.com/DataDog/datadog-api-client-ruby) was considered, but was not adopted as I had a hard time grok-ing it.
35
+
36
+ * chore: permit logging from tests, but only error+
37
+
38
+ Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net>
39
+
1
40
  # [3.0.0-alpha.2](https://github.com/scribd/datadog_backup/compare/v3.0.0-alpha.1...v3.0.0-alpha.2) (2022-08-25)
2
41
 
3
42
 
data/README.md CHANGED
@@ -16,7 +16,7 @@ Additional features may be built out over time.
16
16
  ## Breaking Changes
17
17
  v3 is a backwards incompatible change.
18
18
 
19
- - [] DATADOG_API_KEY and DATADOG_APP_KEY are no longer the environment variables used to authenticate to Datadog. Instead, set the environment variables DD_API_KEY and DD_APP_KEY.
19
+ - [ ] DATADOG_API_KEY and DATADOG_APP_KEY are no longer the environment variables used to authenticate to Datadog. Instead, set the environment variables DD_API_KEY and DD_APP_KEY.
20
20
  - [ ] ruby 2.6 is no longer supported. Please upgrade to ruby 2.7 or higher.
21
21
  - [ ] The options `--ssh` and `--ssshh` are no longer supported. Instead, please use `--quiet` to supress logging. `--debug` remains supported.
22
22
  - [ ] The environment variable `DATADOG_HOST` is no longer supported. Instead, please use `DD_SITE_URL`.
@@ -86,7 +86,7 @@ DD_API_KEY | The Application key for the Datadog account
86
86
 
87
87
  ### Usage in a Github repo
88
88
 
89
- See [example/](https://github.com/scribd/datadog_backup/tree/master/example) for an example implementation as a repo that backs up your Datadog dashboards hourly.
89
+ See [example/](https://github.com/scribd/datadog_backup/tree/main/example) for an example implementation as a repo that backs up your Datadog dashboards hourly.
90
90
 
91
91
  # Development
92
92
 
data/bin/datadog_backup CHANGED
@@ -11,7 +11,6 @@ LOGGER.level = Logger::INFO
11
11
 
12
12
  require 'datadog_backup'
13
13
 
14
-
15
14
  def fatal(message)
16
15
  LOGGER.fatal(message)
17
16
  exit 1
@@ -19,10 +18,10 @@ end
19
18
 
20
19
  def options_valid?(options)
21
20
  %w[backup diffs restore].include?(options[:action])
22
- %w[DD_API_KEY DD_APP_KEY].all? { |key| ENV[key] }
21
+ %w[DD_API_KEY DD_APP_KEY].all? { |key| ENV.fetch(key, nil) }
23
22
  end
24
23
 
25
- def prereqs(defaults)
24
+ def prereqs(defaults) # rubocop:disable Metrics/AbcSize
26
25
  ARGV << '--help' if ARGV.empty?
27
26
 
28
27
  result = defaults.dup
@@ -49,6 +48,9 @@ def prereqs(defaults)
49
48
  opts.on('--dashboards-only') do
50
49
  result[:resources] = [DatadogBackup::Dashboards]
51
50
  end
51
+ opts.on('--synthetics-only') do
52
+ result[:resources] = [DatadogBackup::Synthetics]
53
+ end
52
54
  opts.on(
53
55
  '--json',
54
56
  'format backups as JSON instead of YAML. Does not impact `diffs` nor `restore`, but do not mix formats in the same backup-dir.'
@@ -78,9 +80,9 @@ defaults = {
78
80
  action: nil,
79
81
  backup_dir: File.join(ENV.fetch('PWD'), 'backup'),
80
82
  diff_format: :color,
81
- resources: [DatadogBackup::Dashboards, DatadogBackup::Monitors],
83
+ resources: [DatadogBackup::Dashboards, DatadogBackup::Monitors, DatadogBackup::Synthetics],
82
84
  output_format: :yaml,
83
85
  force_restore: false
84
86
  }
85
87
 
86
- DatadogBackup::Cli.new(prereqs(defaults)).run!
88
+ DatadogBackup::Cli.new(prereqs(defaults)).run!
@@ -13,13 +13,13 @@ Gem::Specification.new do |spec|
13
13
  spec.description = 'A utility to backup and restore Datadog accounts'
14
14
  spec.homepage = 'https://github.com/scribd/datadog_backup'
15
15
  spec.license = 'MIT'
16
+ spec.metadata['rubygems_mfa_required'] = 'true'
16
17
 
17
18
  spec.files = `git ls-files -z`.split("\x0")
18
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^spec/})
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.required_ruby_version = ['>= 2.7']
22
+ spec.required_ruby_version = '>= 2.7'
23
23
 
24
24
  spec.add_dependency 'amazing_print'
25
25
  spec.add_dependency 'concurrent-ruby'
@@ -28,11 +28,10 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency 'faraday'
29
29
  spec.add_dependency 'faraday-retry'
30
30
 
31
-
32
31
  spec.add_development_dependency 'bundler'
32
+ spec.add_development_dependency 'guard-rspec'
33
33
  spec.add_development_dependency 'pry'
34
34
  spec.add_development_dependency 'pry-byebug'
35
- spec.add_development_dependency 'guard-rspec'
36
35
  spec.add_development_dependency 'rspec'
37
36
  spec.add_development_dependency 'rubocop'
38
37
  spec.add_development_dependency 'rubocop-rspec'
@@ -4,6 +4,7 @@ require 'optparse'
4
4
  require 'amazing_print'
5
5
 
6
6
  module DatadogBackup
7
+ # CLI is the command line interface for the datadog_backup gem.
7
8
  class Cli
8
9
  include ::DatadogBackup::Options
9
10
 
@@ -11,9 +12,9 @@ module DatadogBackup
11
12
  LOGGER.info("Starting diffs on #{::DatadogBackup::ThreadPool::TPOOL.max_length} threads")
12
13
  any_resource_instance
13
14
  .all_file_ids_for_selected_resources
14
- .map do |id|
15
- Concurrent::Promises.future_on(::DatadogBackup::ThreadPool::TPOOL, id) do |id|
16
- [id, getdiff(id)]
15
+ .map do |file_id|
16
+ Concurrent::Promises.future_on(::DatadogBackup::ThreadPool::TPOOL, file_id) do |fid|
17
+ [fid, getdiff(fid)]
17
18
  end
18
19
  end
19
20
  end
@@ -32,32 +33,17 @@ module DatadogBackup
32
33
  matching_resource_instance(any_resource_instance.class_from_id(id))
33
34
  end
34
35
 
35
- def diffs
36
- futures = all_diff_futures
37
- ::DatadogBackup::ThreadPool.watcher.join
38
-
39
- format_diff_output(
40
- Concurrent::Promises
41
- .zip(*futures)
42
- .value!
43
- .compact
44
- )
45
- end
46
-
47
36
  def getdiff(id)
48
37
  result = definitive_resource_instance(id).diff(id)
49
38
  case result
50
- when ''
51
- nil
52
- when "\n"
53
- nil
54
- when '<div class="diff"></div>'
39
+ when '---' || '' || "\n" || '<div class="diff"></div>'
55
40
  nil
56
41
  else
57
42
  result
58
43
  end
59
44
  end
60
45
 
46
+ # rubocop:disable Style/StringConcatenation
61
47
  def format_diff_output(diff_output)
62
48
  case diff_format
63
49
  when nil, :color
@@ -69,58 +55,31 @@ module DatadogBackup
69
55
  Diffy::CSS +
70
56
  '</style></head><body>' +
71
57
  diff_output.map do |id, diff|
72
- "<br><br> ---<br><strong> id: #{id}</strong><br>" + diff
58
+ "<br><br> ---<br><strong> id: #{id}</strong><br>#{diff}"
73
59
  end.join('<br>') +
74
60
  '</body></html>'
75
61
  else
76
62
  raise 'Unexpected diff_format.'
77
63
  end
78
64
  end
65
+ # rubocop:enable Style/StringConcatenation
79
66
 
80
67
  def initialize(options)
81
68
  @options = options
82
69
  end
83
70
 
84
- def matching_resource_instance(klass)
85
- resource_instances.select { |resource_instance| resource_instance.instance_of?(klass) }.first
86
- end
87
-
88
- def resource_instances
89
- @resource_instances ||= resources.map do |resource|
90
- resource.new(@options)
91
- end
92
- end
93
-
94
71
  def restore
95
72
  futures = all_diff_futures
96
73
  watcher = ::DatadogBackup::ThreadPool.watcher
97
74
 
98
75
  futures.each do |future|
99
76
  id, diff = *future.value!
100
- next unless diff
77
+ next if diff.nil? || diff.empty?
101
78
 
102
79
  if @options[:force_restore]
103
80
  definitive_resource_instance(id).restore(id)
104
81
  else
105
- puts '--------------------------------------------------------------------------------'
106
- puts format_diff_output([id, diff])
107
- puts '(r)estore to Datadog, overwrite local changes and (d)ownload, (s)kip, or (q)uit?'
108
- response = $stdin.gets.chomp
109
- case response
110
- when 'q'
111
- exit
112
- when 'r'
113
- puts "Restoring #{id} to Datadog."
114
- definitive_resource_instance(id).restore(id)
115
- when 'd'
116
- puts "Downloading #{id} from Datadog."
117
- definitive_resource_instance(id).get_and_write_file(id)
118
- when 's'
119
- next
120
- else
121
- puts 'Invalid response, please try again.'
122
- response = $stdin.gets.chomp
123
- end
82
+ ask_to_restore(id, diff)
124
83
  end
125
84
  end
126
85
  watcher.join if watcher.status
@@ -131,5 +90,42 @@ module DatadogBackup
131
90
  rescue SystemExit, Interrupt
132
91
  ::DatadogBackup::ThreadPool.shutdown
133
92
  end
93
+
94
+ private
95
+
96
+ def ask_to_restore(id, diff)
97
+ puts '--------------------------------------------------------------------------------'
98
+ puts format_diff_output([id, diff])
99
+ puts '(r)estore to Datadog, overwrite local changes and (d)ownload, (s)kip, or (q)uit?'
100
+ loop do
101
+ response = $stdin.gets.chomp
102
+ case response
103
+ when 'q'
104
+ exit
105
+ when 'r'
106
+ puts "Restoring #{id} to Datadog."
107
+ definitive_resource_instance(id).restore(id)
108
+ break
109
+ when 'd'
110
+ puts "Downloading #{id} from Datadog."
111
+ definitive_resource_instance(id).get_and_write_file(id)
112
+ break
113
+ when 's'
114
+ break
115
+ else
116
+ puts 'Invalid response, please try again.'
117
+ end
118
+ end
119
+ end
120
+
121
+ def matching_resource_instance(klass)
122
+ resource_instances.select { |resource_instance| resource_instance.instance_of?(klass) }.first
123
+ end
124
+
125
+ def resource_instances
126
+ @resource_instances ||= resources.map do |resource|
127
+ resource.new(@options)
128
+ end
129
+ end
134
130
  end
135
131
  end
@@ -1,22 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DatadogBackup
4
- class Dashboards < Core
5
-
6
- def api_version
7
- 'v1'
8
- end
9
-
10
- def api_resource_name
11
- 'dashboard'
4
+ # Dashboards specific overrides for backup and restore.
5
+ class Dashboards < Resources
6
+ def all
7
+ get_all.fetch('dashboards')
12
8
  end
13
9
 
14
10
  def backup
15
11
  LOGGER.info("Starting diffs on #{::DatadogBackup::ThreadPool::TPOOL.max_length} threads")
16
-
17
- futures = all_dashboards.map do |board|
18
- Concurrent::Promises.future_on(::DatadogBackup::ThreadPool::TPOOL, board) do |board|
19
- id = board['id']
12
+ futures = all.map do |dashboard|
13
+ Concurrent::Promises.future_on(::DatadogBackup::ThreadPool::TPOOL, dashboard) do |board|
14
+ id = board[id_keyname]
20
15
  get_and_write_file(id)
21
16
  end
22
17
  end
@@ -27,13 +22,23 @@ module DatadogBackup
27
22
  Concurrent::Promises.zip(*futures).value!
28
23
  end
29
24
 
30
- def all_dashboards
31
- get_all.fetch('dashboards')
32
- end
33
-
34
25
  def initialize(options)
35
26
  super(options)
36
27
  @banlist = %w[modified_at url].freeze
37
28
  end
29
+
30
+ private
31
+
32
+ def api_version
33
+ 'v1'
34
+ end
35
+
36
+ def api_resource_name
37
+ 'dashboard'
38
+ end
39
+
40
+ def id_keyname
41
+ 'id'
42
+ end
38
43
  end
39
44
  end
@@ -1,11 +1,10 @@
1
-
1
+ # frozen_string_literal: true
2
2
 
3
3
  module DatadogBackup
4
+ # Notify the user if they are using deprecated features.
4
5
  module Deprecations
5
6
  def self.check
6
- if RUBY_VERSION < '2.7'
7
- LOGGER.warn "ruby-#{RUBY_VERSION} is deprecated. Ruby 2.7 or higher will be required to use this gem after datadog_backup@v3"
8
- end
7
+ LOGGER.warn "ruby-#{RUBY_VERSION} is deprecated. Ruby 2.7 or higher will be required to use this gem after datadog_backup@v3" if RUBY_VERSION < '2.7'
9
8
  end
10
9
  end
11
- end
10
+ end
@@ -6,11 +6,10 @@ require 'yaml'
6
6
  require 'deepsort'
7
7
 
8
8
  module DatadogBackup
9
+ ##
10
+ # Meant to be mixed into DatadogBackup::Resources
11
+ # Relies on @options[:backup_dir] and @options[:output_format]
9
12
  module LocalFilesystem
10
- ##
11
- # Meant to be mixed into DatadogBackup::Core
12
- # Relies on @options[:backup_dir] and @options[:output_format]
13
-
14
13
  def all_files
15
14
  ::Dir.glob(::File.join(backup_dir, '**', '*')).select { |f| ::File.file?(f) }
16
15
  end
@@ -46,7 +45,7 @@ module DatadogBackup
46
45
  end
47
46
 
48
47
  def file_type(filepath)
49
- ::File.extname(filepath).strip.downcase[1..-1].to_sym
48
+ ::File.extname(filepath).strip.downcase[1..].to_sym
50
49
  end
51
50
 
52
51
  def find_file_by_id(id)
@@ -1,28 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DatadogBackup
4
- class Monitors < Core
5
- def all_monitors
6
- @all_monitors ||= get_all
7
- end
8
-
9
- def api_version
10
- 'v1'
11
- end
12
-
13
- def api_resource_name
14
- 'monitor'
4
+ # Monitor specific overrides for backup and restore.
5
+ class Monitors < Resources
6
+ def all
7
+ get_all
15
8
  end
16
9
 
17
10
  def backup
18
- all_monitors.map do |monitor|
11
+ all.map do |monitor|
19
12
  id = monitor['id']
20
13
  write_file(dump(get_by_id(id)), filename(id))
21
14
  end
22
15
  end
23
16
 
24
17
  def get_by_id(id)
25
- monitor = all_monitors.select { |monitor| monitor['id'].to_s == id.to_s }.first
18
+ monitor = all.select { |m| m['id'].to_s == id.to_s }.first
26
19
  monitor.nil? ? {} : except(monitor)
27
20
  end
28
21
 
@@ -30,5 +23,15 @@ module DatadogBackup
30
23
  super(options)
31
24
  @banlist = %w[overall_state overall_state_modified matching_downtimes modified].freeze
32
25
  end
26
+
27
+ private
28
+
29
+ def api_version
30
+ 'v1'
31
+ end
32
+
33
+ def api_resource_name
34
+ 'monitor'
35
+ end
33
36
  end
34
37
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DatadogBackup
4
+ # Describes what the user wants to see done.
4
5
  module Options
5
6
  def action
6
7
  @options[:action]