kennel 1.99.0 → 1.100.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/id_map.rb +26 -0
- data/lib/kennel/models/dashboard.rb +6 -9
- data/lib/kennel/models/monitor.rb +1 -1
- data/lib/kennel/models/record.rb +14 -3
- data/lib/kennel/models/slo.rb +1 -1
- data/lib/kennel/syncer.rb +9 -3
- data/lib/kennel/version.rb +1 -1
- data/lib/kennel.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97207492f3f5afd31ab4d3b16db46f8b70a772c101c57bc26c7d135c9ece6a75
|
4
|
+
data.tar.gz: 6a2c515b9116f1da7764a0a509886fee28ec36241e982b425843f6bc64c02067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4304111e6d35d92ed2b1adbba277a39eb67e7b2e697a5b2cbd031731a1aa968477249f13a18377f7ea4af49bfafd8742060a3ab6c7b7161bb78fd9b63889972
|
7
|
+
data.tar.gz: 8a5588b35ef64e8a91354a5554866f5a59ca354d850ecd96c7d2d164cf79ffe8f6b8cf79ff0c3bc5d4108cba4a600211492ccd0c7033725dc3e2c0a4197e55ef
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Kennel
|
3
|
+
class IdMap
|
4
|
+
NEW = :new # will be created during this run
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@map = Hash.new { |h, k| h[k] = {} }
|
8
|
+
end
|
9
|
+
|
10
|
+
def get(type, tracking_id)
|
11
|
+
@map[type][tracking_id]
|
12
|
+
end
|
13
|
+
|
14
|
+
def set(type, tracking_id, id)
|
15
|
+
@map[type][tracking_id] = id
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_new(type, tracking_id)
|
19
|
+
@map[type][tracking_id] = NEW
|
20
|
+
end
|
21
|
+
|
22
|
+
def new?(type, tracking_id)
|
23
|
+
@map[type][tracking_id] == NEW
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -189,16 +189,17 @@ module Kennel
|
|
189
189
|
when "uptime"
|
190
190
|
if ids = definition[:monitor_ids]
|
191
191
|
definition[:monitor_ids] = ids.map do |id|
|
192
|
-
|
192
|
+
resolve(id, :monitor, id_map, **args) || id
|
193
193
|
end
|
194
194
|
end
|
195
195
|
when "alert_graph"
|
196
|
-
if
|
197
|
-
|
196
|
+
if id = definition[:alert_id]
|
197
|
+
resolved = resolve(id, :monitor, id_map, **args) || id
|
198
|
+
definition[:alert_id] = resolved.to_s # even though it's a monitor id
|
198
199
|
end
|
199
200
|
when "slo"
|
200
|
-
if
|
201
|
-
definition[:slo_id] = (
|
201
|
+
if id = definition[:slo_id]
|
202
|
+
definition[:slo_id] = resolve(id, :slo, id_map, **args) || id
|
202
203
|
end
|
203
204
|
end
|
204
205
|
end
|
@@ -206,10 +207,6 @@ module Kennel
|
|
206
207
|
|
207
208
|
private
|
208
209
|
|
209
|
-
def tracking_id?(id)
|
210
|
-
id.is_a?(String) && id.include?(":")
|
211
|
-
end
|
212
|
-
|
213
210
|
# creates queries from metadata to avoid having to keep q and expression in sync
|
214
211
|
#
|
215
212
|
# {q: :metadata, metadata: [{expression: "sum:bar", alias_name: "foo"}, ...], }
|
@@ -121,7 +121,7 @@ module Kennel
|
|
121
121
|
when "composite", "slo alert"
|
122
122
|
type = (as_json[:type] == "composite" ? :monitor : :slo)
|
123
123
|
as_json[:query] = as_json[:query].gsub(/%{(.*?)}/) do
|
124
|
-
|
124
|
+
resolve($1, type, id_map, **args) || $&
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
data/lib/kennel/models/record.rb
CHANGED
@@ -100,9 +100,20 @@ module Kennel
|
|
100
100
|
|
101
101
|
private
|
102
102
|
|
103
|
+
def resolve(value, type, id_map, force:)
|
104
|
+
if tracking_id?(value)
|
105
|
+
return resolve_link(value, type, id_map, force: force)
|
106
|
+
end
|
107
|
+
|
108
|
+
value
|
109
|
+
end
|
110
|
+
|
111
|
+
def tracking_id?(id)
|
112
|
+
id.is_a?(String) && id.include?(":")
|
113
|
+
end
|
114
|
+
|
103
115
|
def resolve_link(tracking_id, type, id_map, force:)
|
104
|
-
|
105
|
-
if id == :new
|
116
|
+
if id_map.new?(type.to_s, tracking_id)
|
106
117
|
if force
|
107
118
|
invalid!(
|
108
119
|
"#{type} #{tracking_id} was referenced but is also created by the current run.\n" \
|
@@ -111,7 +122,7 @@ module Kennel
|
|
111
122
|
else
|
112
123
|
nil # will be re-resolved after the linked object was created
|
113
124
|
end
|
114
|
-
elsif id
|
125
|
+
elsif id = id_map.get(type.to_s, tracking_id)
|
115
126
|
id
|
116
127
|
else
|
117
128
|
invalid! "Unable to find #{type} #{tracking_id} (does not exist and is not being created by the current run)"
|
data/lib/kennel/models/slo.rb
CHANGED
@@ -70,7 +70,7 @@ module Kennel
|
|
70
70
|
def resolve_linked_tracking_ids!(id_map, **args)
|
71
71
|
return unless as_json[:monitor_ids] # ignore_default can remove it
|
72
72
|
as_json[:monitor_ids] = as_json[:monitor_ids].map do |id|
|
73
|
-
|
73
|
+
resolve(id, :monitor, id_map, **args) || id
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
data/lib/kennel/syncer.rb
CHANGED
@@ -122,7 +122,7 @@ module Kennel
|
|
122
122
|
def calculate_diff
|
123
123
|
@update = []
|
124
124
|
@delete = []
|
125
|
-
@id_map =
|
125
|
+
@id_map = IdMap.new
|
126
126
|
|
127
127
|
actual = Progress.progress("Downloading definitions") { download_definitions }
|
128
128
|
|
@@ -254,11 +254,17 @@ module Kennel
|
|
254
254
|
end
|
255
255
|
|
256
256
|
def populate_id_map(expected, actual)
|
257
|
+
expected.each do |e|
|
258
|
+
@id_map.set_new(e.class.api_resource, e.tracking_id)
|
259
|
+
end
|
260
|
+
|
257
261
|
actual.each do |a|
|
258
262
|
next unless tracking_id = a.fetch(:tracking_id)
|
259
|
-
@id_map
|
263
|
+
@id_map.set(a.fetch(:klass).api_resource, tracking_id, a.fetch(:id))
|
264
|
+
if a[:klass].api_resource == "synthetics/tests"
|
265
|
+
@id_map.set(Kennel::Models::Monitor.api_resource, tracking_id, a.fetch(:monitor_id))
|
266
|
+
end
|
260
267
|
end
|
261
|
-
expected.each { |e| @id_map[e.tracking_id] ||= :new }
|
262
268
|
end
|
263
269
|
|
264
270
|
def resolve_linked_tracking_ids!(list, force: false)
|
data/lib/kennel/version.rb
CHANGED
data/lib/kennel.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kennel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.100.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-11-
|
11
|
+
date: 2021-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- lib/kennel/api.rb
|
78
78
|
- lib/kennel/file_cache.rb
|
79
79
|
- lib/kennel/github_reporter.rb
|
80
|
+
- lib/kennel/id_map.rb
|
80
81
|
- lib/kennel/importer.rb
|
81
82
|
- lib/kennel/models/base.rb
|
82
83
|
- lib/kennel/models/dashboard.rb
|