kennel 1.126.0 → 1.127.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 +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
|
|