kennel 1.58.4 → 1.59.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: bb7f29450cced9fd421dd64c7dacf109d3e3fe93245f19bfcec695b98491f559
4
- data.tar.gz: d1db2105b3f6566f74b71476e089d9691ad9f8f5b3ff08e27801668d172dd6ac
3
+ metadata.gz: c20add02263916021ed0498253e11e79193b5bf603651c28cbacbf614b02287c
4
+ data.tar.gz: ec8ff5e6fa15c10b2f3113feb7f3459f48b9520259952ab91786f56001192f53
5
5
  SHA512:
6
- metadata.gz: b147725c2c13a0ef72771380a9e55518983d2876b6d90a94af2917ca9fe59ef297123ed4ec8d52b2c9cf41f51536b4b3ce0541321e91d8f8649c140de7a031d5
7
- data.tar.gz: dbaaa1cd7d9d57cd1d78be0e50e21b27723da7b35f6993cfea5c61b882564abb44c1027461ea4fd7f4794ad3b72f11e068cdb0a50cd6904d01f9badcfa8e76af
6
+ metadata.gz: b69a0f24eeca1fb532c4b46f18f398e5df1630ae5f8da96b3ea7a263e68e3a211b31e4762f979ff022290ec5fc54a011ba3177a3ee9156ee4ee20541385b48e8
7
+ data.tar.gz: 30e5d810b9351afb83ec40f29c17d9828bd85d41ecea39c3e273011f3ed32ffa2c1729d495aeaad1668bb958e4b407f696916dd57eb3992da08588cf4bf8576e
@@ -29,6 +29,10 @@ require "kennel/models/project"
29
29
  require "kennel/models/team"
30
30
 
31
31
  module Kennel
32
+ MISSING_ID = 1
33
+ class ValidationError < RuntimeError
34
+ end
35
+
32
36
  @out = $stdout
33
37
  @err = $stderr
34
38
 
@@ -68,7 +72,7 @@ module Kennel
68
72
  Progress.progress "Generating" do
69
73
  load_all
70
74
  parts = Models::Project.recursive_subclasses.flat_map do |project_class|
71
- project_class.new.parts
75
+ project_class.new.validated_parts
72
76
  end
73
77
  parts.map(&:tracking_id).group_by { |id| id }.select do |id, same|
74
78
  raise "#{id} is defined #{same.size} times" if same.size != 1
@@ -101,16 +101,16 @@ module Kennel
101
101
  when "uptime"
102
102
  if ids = definition[:monitor_ids]
103
103
  definition[:monitor_ids] = ids.map do |id|
104
- tracking_id?(id) ? resolve_link(id, id_map, force: false) : id
104
+ tracking_id?(id) ? resolve_link(id, id_map) : id
105
105
  end
106
106
  end
107
107
  when "alert_graph"
108
108
  if (id = definition[:alert_id]) && tracking_id?(id)
109
- definition[:alert_id] = resolve_link(id, id_map, force: false).to_s
109
+ definition[:alert_id] = resolve_link(id, id_map).to_s
110
110
  end
111
111
  when "slo"
112
112
  if (id = definition[:slo_id]) && tracking_id?(id)
113
- definition[:slo_id] = resolve_link(id, id_map, force: false).to_s
113
+ definition[:slo_id] = resolve_link(id, id_map).to_s
114
114
  end
115
115
  end
116
116
  end
@@ -105,6 +105,7 @@ module Kennel
105
105
  def resolve_linked_tracking_ids(id_map)
106
106
  if as_json[:type] == "composite"
107
107
  as_json[:query] = as_json[:query].gsub(/%\{(.*?)\}/) do
108
+ # need force here since it validates the id exists
108
109
  resolve_link($1, id_map, force: true)
109
110
  end
110
111
  end
@@ -14,6 +14,18 @@ module Kennel
14
14
  instance_method(method_in_file).source_location.first.sub("#{Bundler.root}/", "")
15
15
  end
16
16
  end
17
+
18
+ def validated_parts
19
+ all = parts
20
+ validate_parts(all)
21
+ all
22
+ end
23
+
24
+ private
25
+
26
+ # hook for users to add custom validations via `prepend`
27
+ def validate_parts(parts)
28
+ end
17
29
  end
18
30
  end
19
31
  end
@@ -13,9 +13,6 @@ module Kennel
13
13
  }.freeze
14
14
  API_LIST_INCOMPLETE = false
15
15
 
16
- class ValidationError < RuntimeError
17
- end
18
-
19
16
  settings :id, :kennel_id
20
17
 
21
18
  class << self
@@ -81,10 +78,19 @@ module Kennel
81
78
 
82
79
  private
83
80
 
84
- def resolve_link(id, id_map, force:)
85
- id_map[id] || begin
86
- message = "Unable to find #{id} in existing monitors (they need to be created first to link them)"
87
- force ? invalid!(message) : Kennel.err.puts(message)
81
+ def resolve_link(id, id_map, force: false)
82
+ found = id_map[id]
83
+ return found if found && found != :new
84
+
85
+ if found == :new
86
+ if force
87
+ invalid! "Monitor #{id} will be created in the current run and can only be used after that"
88
+ else
89
+ Kennel.err.puts "Monitor #{id} will be created in the current run, the next run will link it properly"
90
+ Kennel::MISSING_ID
91
+ end
92
+ else
93
+ invalid! "Unable to find monitor #{id} (does not exist and is not being created by the current run)"
88
94
  end
89
95
  end
90
96
 
@@ -55,7 +55,7 @@ module Kennel
55
55
 
56
56
  def resolve_linked_tracking_ids(id_map)
57
57
  as_json[:monitor_ids] = as_json[:monitor_ids].map do |id|
58
- id.is_a?(String) ? resolve_link(id, id_map, force: false) || 1 : id
58
+ id.is_a?(String) ? resolve_link(id, id_map) : id
59
59
  end
60
60
  end
61
61
 
@@ -195,6 +195,7 @@ module Kennel
195
195
 
196
196
  def resolve_linked_tracking_ids(actual)
197
197
  map = actual.each_with_object({}) { |a, lookup| lookup[tracking_id(a)] = a.fetch(:id) }
198
+ @expected.each { |e| map[e.tracking_id] ||= :new }
198
199
  @expected.each { |e| e.resolve_linked_tracking_ids(map) }
199
200
  end
200
201
 
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.58.4"
3
+ VERSION = "1.59.0"
4
4
  end
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.58.4
4
+ version: 1.59.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: 2019-12-05 00:00:00.000000000 Z
11
+ date: 2019-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday