kennel 1.127.0 → 1.128.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|