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 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