kennel 1.127.0 → 1.128.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/lib/kennel/progress.rb +2 -2
- data/lib/kennel/syncer.rb +6 -20
- data/lib/kennel/tasks.rb +4 -1
- data/lib/kennel/utils.rb +5 -0
- data/lib/kennel/version.rb +1 -1
- data/lib/kennel.rb +20 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d27f0b47987630640f1d58181bc98360714dc4b39827ea7282d1445496e3d315
|
4
|
+
data.tar.gz: a2dbe1c762943b8859134772f39e3f0af0f4e7e2c5c1a60c2de980574de84714
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c16b16c0914e6c436424c431eec9b5b0ff5dcb92195096973e1807c75375e34f16094c4935c28de6a0797ebb8d5cc5a8e86a9c38f4a778df65598ede58ad348
|
7
|
+
data.tar.gz: d885678eb185f3fa404d8c42c64f3c7f22250da1537ecec556d5f9728fe9a6aa7d7fb889f9c8d637c4f29787864f05ec5a51c5abb90023fde1c71a0110a24dd5
|
data/lib/kennel/progress.rb
CHANGED
@@ -4,8 +4,8 @@ require "benchmark"
|
|
4
4
|
module Kennel
|
5
5
|
class Progress
|
6
6
|
# print what we are doing and a spinner until it is done ... then show how long it took
|
7
|
-
def self.progress(name, interval: 0.2, &block)
|
8
|
-
return progress_no_tty(name, &block)
|
7
|
+
def self.progress(name, interval: 0.2, plain: false, &block)
|
8
|
+
return progress_no_tty(name, &block) if plain || !Kennel.err.tty?
|
9
9
|
|
10
10
|
Kennel.err.print "#{name} ... "
|
11
11
|
|
data/lib/kennel/syncer.rb
CHANGED
@@ -10,12 +10,13 @@ module Kennel
|
|
10
10
|
Plan = Struct.new(:changes, keyword_init: true)
|
11
11
|
Change = Struct.new(:type, :api_resource, :tracking_id, :id)
|
12
12
|
|
13
|
-
def initialize(api, expected, kennel:, project_filter: nil, tracking_id_filter: nil)
|
13
|
+
def initialize(api, expected, actual, kennel:, project_filter: nil, tracking_id_filter: nil)
|
14
14
|
@api = api
|
15
15
|
@kennel = kennel
|
16
16
|
@project_filter = project_filter
|
17
17
|
@tracking_id_filter = tracking_id_filter
|
18
18
|
@expected = Set.new expected # need set to speed up deletion
|
19
|
+
@actual = actual
|
19
20
|
calculate_diff
|
20
21
|
validate_plan
|
21
22
|
prevent_irreversible_partial_updates
|
@@ -53,7 +54,7 @@ module Kennel
|
|
53
54
|
message = "#{e.class.api_resource} #{e.tracking_id}"
|
54
55
|
Kennel.out.puts "Creating #{message}"
|
55
56
|
reply = @api.create e.class.api_resource, e.as_json
|
56
|
-
|
57
|
+
Utils.inline_resource_metadata reply, e.class
|
57
58
|
id = reply.fetch(:id)
|
58
59
|
changes << Change.new(:create, e.class.api_resource, e.tracking_id, id)
|
59
60
|
populate_id_map [], [reply] # allow resolving ids we could previously no resolve
|
@@ -125,17 +126,15 @@ module Kennel
|
|
125
126
|
@delete = []
|
126
127
|
@id_map = IdMap.new
|
127
128
|
|
128
|
-
actual = Progress.progress("Downloading definitions") { download_definitions }
|
129
|
-
|
130
129
|
Progress.progress "Diffing" do
|
131
|
-
populate_id_map @expected, actual
|
132
|
-
filter_actual! actual
|
130
|
+
populate_id_map @expected, @actual
|
131
|
+
filter_actual! @actual
|
133
132
|
resolve_linked_tracking_ids! @expected # resolve dependencies to avoid diff
|
134
133
|
|
135
134
|
@expected.each(&:add_tracking_id) # avoid diff with actual
|
136
135
|
|
137
136
|
lookup_map = matching_expected_lookup_map
|
138
|
-
items = actual.map do |a|
|
137
|
+
items = @actual.map do |a|
|
139
138
|
e = matching_expected(a, lookup_map)
|
140
139
|
if e && @expected.delete?(e)
|
141
140
|
[e, a]
|
@@ -168,19 +167,6 @@ module Kennel
|
|
168
167
|
end
|
169
168
|
end
|
170
169
|
|
171
|
-
def download_definitions
|
172
|
-
Utils.parallel(Models::Record.subclasses) do |klass|
|
173
|
-
results = @api.list(klass.api_resource, with_downtimes: false) # lookup monitors without adding unnecessary downtime information
|
174
|
-
results = results[results.keys.first] if results.is_a?(Hash) # dashboards are nested in {dashboards: []}
|
175
|
-
results.each { |a| cache_metadata(a, klass) }
|
176
|
-
end.flatten(1)
|
177
|
-
end
|
178
|
-
|
179
|
-
def cache_metadata(a, klass)
|
180
|
-
a[:klass] = klass
|
181
|
-
a[:tracking_id] = a.fetch(:klass).parse_tracking_id(a)
|
182
|
-
end
|
183
|
-
|
184
170
|
def ensure_all_ids_found
|
185
171
|
@expected.each do |e|
|
186
172
|
next unless id = e.id
|
data/lib/kennel/tasks.rb
CHANGED
@@ -101,8 +101,11 @@ namespace :kennel do
|
|
101
101
|
end
|
102
102
|
|
103
103
|
# also generate parts so users see and commit updated generated automatically
|
104
|
+
# (generate must run after plan to enable parallel .download+.generate inside of .plan)
|
104
105
|
desc "show planned datadog changes (scope with PROJECT=name)"
|
105
|
-
task plan: :
|
106
|
+
task plan: :environment do
|
107
|
+
Kennel::Tasks.kennel.preload
|
108
|
+
Kennel::Tasks.kennel.generate
|
106
109
|
Kennel::Tasks.kennel.plan
|
107
110
|
end
|
108
111
|
|
data/lib/kennel/utils.rb
CHANGED
data/lib/kennel/version.rb
CHANGED
data/lib/kennel.rb
CHANGED
@@ -58,6 +58,11 @@ module Kennel
|
|
58
58
|
|
59
59
|
attr_accessor :strict_imports
|
60
60
|
|
61
|
+
# start generation and download in parallel to make planning faster
|
62
|
+
def preload
|
63
|
+
Utils.parallel([:generated, :definitions]) { |m| send m, plain: true }
|
64
|
+
end
|
65
|
+
|
61
66
|
def generate
|
62
67
|
parts = generated
|
63
68
|
parts_serializer.write(parts) if ENV["STORE"] != "false" # quicker when debugging
|
@@ -80,7 +85,10 @@ module Kennel
|
|
80
85
|
end
|
81
86
|
|
82
87
|
def syncer
|
83
|
-
@syncer ||=
|
88
|
+
@syncer ||= begin
|
89
|
+
preload
|
90
|
+
Syncer.new(api, generated, definitions, kennel: self, project_filter: filter.project_filter, tracking_id_filter: filter.tracking_id_filter)
|
91
|
+
end
|
84
92
|
end
|
85
93
|
|
86
94
|
def api
|
@@ -95,9 +103,9 @@ module Kennel
|
|
95
103
|
@parts_serializer ||= PartsSerializer.new(filter: filter)
|
96
104
|
end
|
97
105
|
|
98
|
-
def generated
|
106
|
+
def generated(**kwargs)
|
99
107
|
@generated ||= begin
|
100
|
-
parts = Progress.progress "Finding parts" do
|
108
|
+
parts = Progress.progress "Finding parts", **kwargs do
|
101
109
|
projects = projects_provider.projects
|
102
110
|
projects = filter.filter_projects projects
|
103
111
|
|
@@ -123,5 +131,14 @@ module Kennel
|
|
123
131
|
parts
|
124
132
|
end
|
125
133
|
end
|
134
|
+
|
135
|
+
def definitions(**kwargs)
|
136
|
+
@definitions ||= Progress.progress("Downloading definitions", **kwargs) do
|
137
|
+
Utils.parallel(Models::Record.subclasses) do |klass|
|
138
|
+
results = api.list(klass.api_resource, with_downtimes: false) # lookup monitors without adding unnecessary downtime information
|
139
|
+
results.each { |a| Utils.inline_resource_metadata(a, klass) }
|
140
|
+
end.flatten(1)
|
141
|
+
end
|
142
|
+
end
|
126
143
|
end
|
127
144
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kennel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.128.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-12-
|
11
|
+
date: 2022-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diff-lcs
|