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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8254e03670c1874a6f9b85da5fe453200cdcd9aabe2f82dafc424a6301d8416
4
- data.tar.gz: 2d1c0b444762941f79fcba893f5cddc9d0119138c5cf0fc04d6fc871f2caf7a8
3
+ metadata.gz: ec72f834db1c82d19ba21eabd482e5f46a540b0c9a3e0e51ecc20a80c192a6d7
4
+ data.tar.gz: c5b549fb934ce3e274d88149df509b4dcf16e1adc6be3271e94b3101dbee1ad7
5
5
  SHA512:
6
- metadata.gz: 32c9cbe7957e0f0652180d9b743e4498f3624231e96907f2aaafe5889b9d2f5cfcac98b21dce058c7e06cd6b719ae21b91d01b478eb21028a333b6e0383732a1
7
- data.tar.gz: '068566cb8e89e9c9d993ed451cd174a301ce3976c2240aa8c12c1ebf20b602b9cf245b0eb28267dc9263930ad4659163cb75fee67af1d9c1094a649129fb7e17'
6
+ metadata.gz: e0bff1a22428c19da30025f79e8e7904675ea27d79eb2cfdf1a6cf0638a33efbdee44c10f898480b9e7d91d73296368e3bab58ce495282beb43cb13c975c9153
7
+ data.tar.gz: 445cf62d6e525c42808a42ba80e941829cab5c679ef74f71590799ec46e93f3d41ff8162bed775342510c042249a2acfaf10dea06507a2b5f7a7b0c8a450fb3c
@@ -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, plain: false, &block)
8
- return progress_no_tty(name, &block) if plain || !Kennel.err.tty?
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, actual, kennel:, project_filter: nil, tracking_id_filter: nil)
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
- Utils.inline_resource_metadata reply, e.class
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, @actual
131
- filter_actual! @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 = @actual.map do |a|
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: :environment do
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
@@ -160,11 +160,6 @@ module Kennel
160
160
  end
161
161
  string
162
162
  end
163
-
164
- def inline_resource_metadata(resource, klass)
165
- resource[:klass] = klass
166
- resource[:tracking_id] = klass.parse_tracking_id(resource)
167
- end
168
163
  end
169
164
  end
170
165
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.126.0"
3
+ VERSION = "1.127.0"
4
4
  end
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(plain: false)
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 ||= begin
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(plain: true)
98
+ def generated
111
99
  @generated ||= begin
112
- parts = Progress.progress "Finding parts", plain: plain do
100
+ parts = Progress.progress "Finding parts" do
113
101
  projects = projects_provider.projects
114
102
  projects = filter.filter_projects projects
115
103
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kennel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.126.0
4
+ version: 1.127.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser