datadog_backup 3.1.1 → 3.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 332899376b51dd8ad98dda7a3528b7a7c80ca8cbbd2c4bbe9c2cb9976a1c7024
4
- data.tar.gz: 68b89a77b5148006b16388c7a93241ca50fcecb6bc4edc09ab36cf34a80d92e8
3
+ metadata.gz: 2e3e8528c064d05b09bd31080a7bcab7c77fcca8dde46949cf8c62a7702f2af1
4
+ data.tar.gz: 24c57007224fcf546b5a886e4b9f2a78f76b2a63fd2c64067ae2454192919848
5
5
  SHA512:
6
- metadata.gz: ab35b9e6a6152cc22ff3de7714ed60f2bca54c056a510d5726e5d33921a0f54d088195bfd7b992494545ccdfa8350e99e097c19155cfde4f7396049aeaad9650
7
- data.tar.gz: 4f2f791146658c9a9e4185ef3bda43180a5ef46938dd6b2754aa493bcac9949f19a53f70b972a125ae51ad7b71f6f8c309767d83654e40a4d7d5f4be70e6c39c
6
+ metadata.gz: d5180a6ba1f92f5db842e88d337878eacd0bafe114fbbb8752153b85f7c47f682be3bdd529b694294cc5523fe4c94274a7ee78d15fc4798b327598fb7710303b
7
+ data.tar.gz: f4ccccd735136f06f92cc71f1df0176e5fa626fd36f5e60f4bc88ef93f9fcf31f8d840c523e1e70f08195faf8d32e8522fea3665e9b6f1efe280cf8b214331a9
@@ -10,7 +10,7 @@ jobs:
10
10
  runs-on: ubuntu-20.04
11
11
  steps:
12
12
  - name: Validate PR Title
13
- uses: amannn/action-semantic-pull-request@v4
13
+ uses: amannn/action-semantic-pull-request@v5.0.2
14
14
  env:
15
15
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
16
16
  with:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [3.2.1](https://github.com/scribd/datadog_backup/compare/v3.2.0...v3.2.1) (2023-02-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * update error handling for restore ([233b1b2](https://github.com/scribd/datadog_backup/commit/233b1b27d485e7502dd47ca01670cea0576e920d))
7
+
8
+ # [3.2.0](https://github.com/scribd/datadog_backup/compare/v3.1.1...v3.2.0) (2023-02-10)
9
+
10
+
11
+ ### Features
12
+
13
+ * Deepsort skip sorting arrays ([d9cba97](https://github.com/scribd/datadog_backup/commit/d9cba97015d1af636ca9c03605ef14fa8dcb6d21))
14
+
1
15
  ## [3.1.1](https://github.com/scribd/datadog_backup/compare/v3.1.0...v3.1.1) (2022-09-01)
2
16
 
3
17
 
data/README.md CHANGED
@@ -71,6 +71,7 @@ parameter | description
71
71
  --no-color | removes colored output from diff format
72
72
  --diff-format FORMAT | one of `color`, `html_simple`, `html` | `color`
73
73
  --force-restore | Force restore to Datadog. Do not ask to validate. Non-interactive.
74
+ --disable-array-sort | Do not sort array elements, to preserver order of dashboard widgets.
74
75
  --h, --help | help
75
76
 
76
77
  ## Environment variables
data/bin/datadog_backup CHANGED
@@ -66,6 +66,9 @@ def prereqs(defaults) # rubocop:disable Metrics/AbcSize
66
66
  opts.on('--force-restore', 'Force restore to Datadog. Do not ask to validate. Non-interactive.') do
67
67
  result[:force_restore] = true
68
68
  end
69
+ opts.on('--disable-array-sort', 'Do not sort array elements, to preserver order of dashboard widgets.') do
70
+ result[:disable_array_sort] = true
71
+ end
69
72
  end
70
73
  options.parse!
71
74
 
@@ -82,7 +85,8 @@ defaults = {
82
85
  diff_format: :color,
83
86
  resources: [DatadogBackup::Dashboards, DatadogBackup::Monitors, DatadogBackup::Synthetics],
84
87
  output_format: :yaml,
85
- force_restore: false
88
+ force_restore: false,
89
+ disable_array_sort: false
86
90
  }
87
91
 
88
92
  DatadogBackup::Cli.new(prereqs(defaults)).run!
@@ -22,6 +22,15 @@ module DatadogBackup
22
22
  Concurrent::Promises.zip(*futures).value!
23
23
  end
24
24
 
25
+ def get_by_id(id)
26
+ begin
27
+ dashboard = except(get(id))
28
+ rescue Faraday::ResourceNotFound => e
29
+ dashboard = {}
30
+ end
31
+ except(dashboard)
32
+ end
33
+
25
34
  def initialize(options)
26
35
  super(options)
27
36
  @banlist = %w[modified_at url].freeze
@@ -32,9 +32,9 @@ module DatadogBackup
32
32
  def dump(object)
33
33
  case output_format
34
34
  when :json
35
- JSON.pretty_generate(object.deep_sort)
35
+ JSON.pretty_generate(object.deep_sort(array: disable_array_sort ? false : true))
36
36
  when :yaml
37
- YAML.dump(object.deep_sort)
37
+ YAML.dump(object.deep_sort(array: disable_array_sort ? false : true))
38
38
  else
39
39
  raise 'invalid output_format specified or not specified'
40
40
  end
@@ -31,5 +31,9 @@ module DatadogBackup
31
31
  def force_restore
32
32
  @options[:force_restore]
33
33
  end
34
+
35
+ def disable_array_sort
36
+ @options[:disable_array_sort]
37
+ end
34
38
  end
35
39
  end
@@ -26,8 +26,8 @@ module DatadogBackup
26
26
  # Returns the diffy diff.
27
27
  # Optionally, supply an array of keys to remove from comparison
28
28
  def diff(id)
29
- current = except(get_by_id(id)).deep_sort.to_yaml
30
- filesystem = except(load_from_file_by_id(id)).deep_sort.to_yaml
29
+ current = except(get_by_id(id)).deep_sort(array: disable_array_sort ? false : true).to_yaml
30
+ filesystem = except(load_from_file_by_id(id)).deep_sort(array: disable_array_sort ? false : true).to_yaml
31
31
  result = ::Diffy::Diff.new(current, filesystem, include_plus_and_minus_in_html: true).to_s(diff_format)
32
32
  LOGGER.debug("Compared ID #{id} and found filesystem: #{filesystem} <=> current: #{current} == result: #{result}")
33
33
  result.chomp
@@ -110,9 +110,7 @@ module DatadogBackup
110
110
  body = load_from_file_by_id(id)
111
111
  begin
112
112
  update(id, body)
113
- rescue RuntimeError => e
114
- raise e.message unless e.message.include?('update failed with error 404')
115
-
113
+ rescue Faraday::ResourceNotFound => e
116
114
  create_newly(id, body)
117
115
  end
118
116
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DatadogBackup
4
- VERSION = '3.1.1'
4
+ VERSION = '3.2.1'
5
5
  end
@@ -103,7 +103,7 @@ describe DatadogBackup::Resources do
103
103
  allow(resources).to receive(:api_resource_name).and_return('api-resource-name-string')
104
104
  stubs.get('/api/api-version-string/api-resource-name-string/abc-123-def') { respond_with200({ 'test' => 'ok' }) }
105
105
  stubs.get('/api/api-version-string/api-resource-name-string/bad-123-id') do
106
- [404, {}, { 'error' => 'blahblah_not_found' }]
106
+ raise Faraday::ResourceNotFound
107
107
  end
108
108
  allow(resources).to receive(:load_from_file_by_id).and_return({ 'load' => 'ok' })
109
109
  end
@@ -126,7 +126,7 @@ describe DatadogBackup::Resources do
126
126
  before do
127
127
  allow(resources).to receive(:load_from_file_by_id).and_return({ 'load' => 'ok' })
128
128
  stubs.put('/api/api-version-string/api-resource-name-string/bad-123-id') do
129
- [404, {}, { 'error' => 'id not found' }]
129
+ raise Faraday::ResourceNotFound
130
130
  end
131
131
  stubs.post('/api/api-version-string/api-resource-name-string', { 'load' => 'ok' }) do
132
132
  respond_with200({ 'id' => 'my-new-id' })
@@ -20,6 +20,15 @@ describe DatadogBackup::LocalFilesystem do
20
20
  output_format: :yaml
21
21
  )
22
22
  end
23
+ let(:resources_disable_array_sort) do
24
+ DatadogBackup::Resources.new(
25
+ action: 'backup',
26
+ backup_dir: tempdir,
27
+ resources: [DatadogBackup::Dashboards],
28
+ output_format: :json,
29
+ disable_array_sort: true
30
+ )
31
+ end
23
32
 
24
33
  describe '#all_files' do
25
34
  subject { resources.all_files }
@@ -79,6 +88,18 @@ describe DatadogBackup::LocalFilesystem do
79
88
 
80
89
  it { is_expected.to eq(%(---\na: b\n)) }
81
90
  end
91
+
92
+ context 'when array sorting is enabled' do
93
+ subject { resources.dump({ a: [ :c, :b ] }) }
94
+
95
+ it { is_expected.to eq(%({\n \"a\": [\n \"b\",\n \"c\"\n ]\n})) }
96
+ end
97
+
98
+ context 'when array sorting is disabled' do
99
+ subject { resources_disable_array_sort.dump({ a: [ :c, :b ] }) }
100
+
101
+ it { is_expected.to eq(%({\n \"a\": [\n \"c\",\n \"b\"\n ]\n})) }
102
+ end
82
103
  end
83
104
 
84
105
  describe '#filename' do
@@ -231,7 +231,7 @@ describe DatadogBackup::Synthetics do
231
231
 
232
232
  before do
233
233
  synthetics.write_file(synthetics.dump({ 'name' => 'restore-invalid-id', 'type' => 'api' }), synthetics.filename('restore-invalid-id'))
234
- stubs.put('/api/v1/synthetics/tests/api/restore-invalid-id') { [404, {}, ''] }
234
+ stubs.put('/api/v1/synthetics/tests/api/restore-invalid-id') { raise Faraday::ResourceNotFound }
235
235
  stubs.post('/api/v1/synthetics/tests/api') { respond_with200({ 'public_id' => 'restore-valid-id' }) }
236
236
  allow(synthetics).to receive(:create).and_call_original
237
237
  allow(synthetics).to receive(:all).and_return([api_test, browser_test, { 'public_id' => 'restore-valid-id', 'type' => 'api' }])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog_backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kamran Farhadi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-09-01 00:00:00.000000000 Z
12
+ date: 2023-02-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: amazing_print