kennel 1.116.1 → 1.117.1

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: 49677de3c690744756d70810dbe71c49cb0313014c5c325af21aa161463738bc
4
- data.tar.gz: c52c465238c8043ba7a735712dcaf73edd589875b680b7f45f235477c696cff2
3
+ metadata.gz: 0cb7a96d8fed145f6db8ab76ee7cac6287f24af57ee8bc785707830548e07a76
4
+ data.tar.gz: '076522890c0d40993b8f6a676e106da15b145df4e3361e851f7bc70d38ed096c'
5
5
  SHA512:
6
- metadata.gz: 50968ff4039145263ea380d790ebd8d757afb96bd2966a8b7dddf5a58373dbf3fd2e13f0576ad44bf42ceecd7086095865d4edc7c85bc5df1b1f9cc7b9757638
7
- data.tar.gz: 7facba1805b0d2690b4081e18d46d314161544326a8e2e772bd17284c9065d7a8d50431690ca7562425510b9a12db70726453e3a4296aac6cbfd00d3e6954172
6
+ metadata.gz: 18c8879eaa8aff627087b164156127ac6358060985e1adb79d1a8fe9994b23647d17fe629bdd99fb8c2410f8685c17500e4a890611dd5d028f43185caef1e0e8
7
+ data.tar.gz: 1ab7202e9152b7e71aee2d40b42b3fdf91ea2c2af5290152f147254895e79c83b40da015efef7e5b8855b72fe49cde96c0c4e127ba80108a388966ccae4dbe39
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "tempfile"
4
+
3
5
  # cache that reads everything from a single file
4
6
  # - avoids doing multiple disk reads while iterating all definitions
5
7
  # - has a global expiry to not keep deleted resources forever
@@ -44,7 +46,11 @@ module Kennel
44
46
  def persist
45
47
  dir = File.dirname(@file)
46
48
  FileUtils.mkdir_p(dir) unless File.directory?(dir)
47
- File.write(@file, Marshal.dump(@data))
49
+
50
+ Tempfile.create "kennel-file-cache", dir do |tmp|
51
+ Marshal.dump @data, tmp
52
+ File.rename tmp.path, @file
53
+ end
48
54
  end
49
55
 
50
56
  # keep the cache small to make loading it fast (5MB ~= 100ms)
data/lib/kennel/syncer.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require "diff/lcs"
4
+
2
5
  module Kennel
3
6
  class Syncer
4
7
  DELETE_ORDER = ["dashboard", "slo", "monitor", "synthetics/tests"].freeze # dashboards references monitors + slos, slos reference monitors
@@ -196,16 +199,22 @@ module Kennel
196
199
 
197
200
  def print_diff(diff)
198
201
  diff.each do |type, field, old, new|
202
+ use_diff = false
199
203
  if type == "+"
200
204
  temp = Utils.pretty_inspect(new)
201
205
  new = Utils.pretty_inspect(old)
202
206
  old = temp
207
+ elsif old.is_a?(String) && new.is_a?(String) && (old.include?("\n") || new.include?("\n"))
208
+ use_diff = true
203
209
  else # ~ and -
204
210
  old = Utils.pretty_inspect(old)
205
211
  new = Utils.pretty_inspect(new)
206
212
  end
207
213
 
208
- if (old + new).size > 100
214
+ if use_diff
215
+ Kennel.out.puts " #{type}#{field}"
216
+ Kennel.out.puts(diff(old, new).map { |l| " #{l}" })
217
+ elsif (old + new).size > 100
209
218
  Kennel.out.puts " #{type}#{field}"
210
219
  Kennel.out.puts " #{old} ->"
211
220
  Kennel.out.puts " #{new}"
@@ -215,6 +224,26 @@ module Kennel
215
224
  end
216
225
  end
217
226
 
227
+ # display diff for multi-line strings
228
+ # must stay readable when color is off too
229
+ def diff(old, new)
230
+ Diff::LCS.sdiff(old.split("\n", -1), new.split("\n", -1)).flat_map do |diff|
231
+ case diff.action
232
+ when "-"
233
+ Utils.color(:red, "- #{diff.old_element}")
234
+ when "+"
235
+ Utils.color(:green, "+ #{diff.new_element}")
236
+ when "!"
237
+ [
238
+ Utils.color(:red, "- #{diff.old_element}"),
239
+ Utils.color(:green, "+ #{diff.new_element}")
240
+ ]
241
+ else
242
+ " #{diff.old_element}"
243
+ end
244
+ end
245
+ end
246
+
218
247
  # We've already validated the desired objects ('generated') in isolation.
219
248
  # Now that we have made the plan, we can perform some more validation.
220
249
  def validate_plan
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.116.1"
3
+ VERSION = "1.117.1"
4
4
  end
data/lib/kennel.rb CHANGED
@@ -138,8 +138,12 @@ module Kennel
138
138
  end
139
139
 
140
140
  def project_filter
141
- raise "either use PROJECT= or TRACKING_ID=" if ENV["PROJECT"] && ENV["TRACKING_ID"]
142
- ENV["PROJECT"]&.split(",") || tracking_id_filter&.map { |id| id.split(":", 2).first }
141
+ projects = ENV["PROJECT"]&.split(",")
142
+ tracking_projects = tracking_id_filter&.map { |id| id.split(":", 2).first }
143
+ if projects && tracking_projects && projects != tracking_projects
144
+ raise "do not set PROJECT= when using TRACKING_ID="
145
+ end
146
+ projects || tracking_projects
143
147
  end
144
148
 
145
149
  def tracking_id_filter
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kennel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.116.1
4
+ version: 1.117.1
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-08-30 00:00:00.000000000 Z
11
+ date: 2022-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: diff-lcs
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: faraday
15
29
  requirement: !ruby/object:Gem::Requirement