kennel 1.126.0 → 1.127.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 +20 -6
- data/lib/kennel/tasks.rb +1 -2
- data/lib/kennel/utils.rb +0 -5
- data/lib/kennel/version.rb +1 -1
- data/lib/kennel.rb +4 -16
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec72f834db1c82d19ba21eabd482e5f46a540b0c9a3e0e51ecc20a80c192a6d7
|
4
|
+
data.tar.gz: c5b549fb934ce3e274d88149df509b4dcf16e1adc6be3271e94b3101dbee1ad7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0bff1a22428c19da30025f79e8e7904675ea27d79eb2cfdf1a6cf0638a33efbdee44c10f898480b9e7d91d73296368e3bab58ce495282beb43cb13c975c9153
|
7
|
+
data.tar.gz: 445cf62d6e525c42808a42ba80e941829cab5c679ef74f71590799ec46e93f3d41ff8162bed775342510c042249a2acfaf10dea06507a2b5f7a7b0c8a450fb3c
|
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,
|
8
|
-
return progress_no_tty(name, &block)
|
7
|
+
def self.progress(name, interval: 0.2, &block)
|
8
|
+
return progress_no_tty(name, &block) unless Kennel.err.tty?
|
9
9
|
|
10
10
|
Kennel.err.print "#{name} ... "
|
11
11
|
|
data/lib/kennel/syncer.rb
CHANGED
@@ -10,13 +10,12 @@ 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,
|
13
|
+
def initialize(api, expected, 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
|
20
19
|
calculate_diff
|
21
20
|
validate_plan
|
22
21
|
prevent_irreversible_partial_updates
|
@@ -54,7 +53,7 @@ module Kennel
|
|
54
53
|
message = "#{e.class.api_resource} #{e.tracking_id}"
|
55
54
|
Kennel.out.puts "Creating #{message}"
|
56
55
|
reply = @api.create e.class.api_resource, e.as_json
|
57
|
-
|
56
|
+
cache_metadata reply, e.class
|
58
57
|
id = reply.fetch(:id)
|
59
58
|
changes << Change.new(:create, e.class.api_resource, e.tracking_id, id)
|
60
59
|
populate_id_map [], [reply] # allow resolving ids we could previously no resolve
|
@@ -126,15 +125,17 @@ module Kennel
|
|
126
125
|
@delete = []
|
127
126
|
@id_map = IdMap.new
|
128
127
|
|
128
|
+
actual = Progress.progress("Downloading definitions") { download_definitions }
|
129
|
+
|
129
130
|
Progress.progress "Diffing" do
|
130
|
-
populate_id_map @expected,
|
131
|
-
filter_actual!
|
131
|
+
populate_id_map @expected, actual
|
132
|
+
filter_actual! actual
|
132
133
|
resolve_linked_tracking_ids! @expected # resolve dependencies to avoid diff
|
133
134
|
|
134
135
|
@expected.each(&:add_tracking_id) # avoid diff with actual
|
135
136
|
|
136
137
|
lookup_map = matching_expected_lookup_map
|
137
|
-
items =
|
138
|
+
items = actual.map do |a|
|
138
139
|
e = matching_expected(a, lookup_map)
|
139
140
|
if e && @expected.delete?(e)
|
140
141
|
[e, a]
|
@@ -167,6 +168,19 @@ module Kennel
|
|
167
168
|
end
|
168
169
|
end
|
169
170
|
|
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
|
+
|
170
184
|
def ensure_all_ids_found
|
171
185
|
@expected.each do |e|
|
172
186
|
next unless id = e.id
|
data/lib/kennel/tasks.rb
CHANGED
@@ -102,9 +102,8 @@ namespace :kennel do
|
|
102
102
|
|
103
103
|
# also generate parts so users see and commit updated generated automatically
|
104
104
|
desc "show planned datadog changes (scope with PROJECT=name)"
|
105
|
-
task plan: :
|
105
|
+
task plan: :generate do
|
106
106
|
Kennel::Tasks.kennel.plan
|
107
|
-
Kennel::Tasks.kennel.generate
|
108
107
|
end
|
109
108
|
|
110
109
|
desc "update datadog (scope with PROJECT=name)"
|
data/lib/kennel/utils.rb
CHANGED
data/lib/kennel/version.rb
CHANGED
data/lib/kennel.rb
CHANGED
@@ -59,7 +59,7 @@ module Kennel
|
|
59
59
|
attr_accessor :strict_imports
|
60
60
|
|
61
61
|
def generate
|
62
|
-
parts = generated
|
62
|
+
parts = generated
|
63
63
|
parts_serializer.write(parts) if ENV["STORE"] != "false" # quicker when debugging
|
64
64
|
parts
|
65
65
|
end
|
@@ -75,24 +75,12 @@ module Kennel
|
|
75
75
|
|
76
76
|
private
|
77
77
|
|
78
|
-
def download_definitions
|
79
|
-
Progress.progress("Downloading definitions", plain: true) do
|
80
|
-
Utils.parallel(Models::Record.subclasses) do |klass|
|
81
|
-
results = api.list(klass.api_resource, with_downtimes: false) # lookup monitors without adding unnecessary downtime information
|
82
|
-
results.each { |a| Utils.inline_resource_metadata(a, klass) }
|
83
|
-
end.flatten(1)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
78
|
def filter
|
88
79
|
@filter ||= Filter.new
|
89
80
|
end
|
90
81
|
|
91
82
|
def syncer
|
92
|
-
@syncer ||=
|
93
|
-
expected, actual = Utils.parallel([:generated, :download_definitions]) { |m| send m }
|
94
|
-
Syncer.new(api, expected, actual, kennel: self, project_filter: filter.project_filter, tracking_id_filter: filter.tracking_id_filter)
|
95
|
-
end
|
83
|
+
@syncer ||= Syncer.new(api, generated, kennel: self, project_filter: filter.project_filter, tracking_id_filter: filter.tracking_id_filter)
|
96
84
|
end
|
97
85
|
|
98
86
|
def api
|
@@ -107,9 +95,9 @@ module Kennel
|
|
107
95
|
@parts_serializer ||= PartsSerializer.new(filter: filter)
|
108
96
|
end
|
109
97
|
|
110
|
-
def generated
|
98
|
+
def generated
|
111
99
|
@generated ||= begin
|
112
|
-
parts = Progress.progress "Finding parts"
|
100
|
+
parts = Progress.progress "Finding parts" do
|
113
101
|
projects = projects_provider.projects
|
114
102
|
projects = filter.filter_projects projects
|
115
103
|
|