kennel 1.140.0 → 1.141.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: e8a15178bd108647314171a012bafa0c977f998a8488418c0d323de095e0a1b3
4
- data.tar.gz: 1673aec908b72090afa31e0b3dd8a923dbf505c01ab2f5dfd6211846edab4f7d
3
+ metadata.gz: e82dacccbb0c14e8b8bedd9545b782b7405ca057a02724e89aa03f0a624fa3e4
4
+ data.tar.gz: f70302b436c823c6cbcb765edbd56da1103b83fadf398c2c904372a8f73b36a7
5
5
  SHA512:
6
- metadata.gz: 0343af2d0a40081a7fd8ffe5bb9932344f75ef91f1b688f4b6e4eb72a0bd5f59c9b67cf72f498bb008f76aae7f6df645b0bcd8258b5c1c892cb8cd3ef21cc468
7
- data.tar.gz: 3a1f1df7f6195ec235713dc173e8c869013654355432159e1bd1e59dd29ea3d849407ee9cf43f31453411a54224ae1ea8b80bc1e01e209176d0cfe28f8fc2bc3
6
+ metadata.gz: c34733bc887129a6bda1ebc96898ca46cec0346bb008af8020d4159d23db515de54d8db8813749ba7883c0417b0cecb243a530789a4a99d6aa146679996007aa
7
+ data.tar.gz: a7821e5e67899aa71a068bfabbd895f7c69a369a187b7245510fc969a69d4354bad352cfb953f64293140c6282fa21d38f0e8695ab60d9186a19b30faeddd019
@@ -30,12 +30,11 @@ module Kennel
30
30
  }.freeze
31
31
  DEFAULT_ESCALATION_MESSAGE = ["", nil].freeze
32
32
  ALLOWED_PRIORITY_CLASSES = [NilClass, Integer].freeze
33
- ALLOWED_UNLINKED = [] # rubocop:disable Style/MutableConstant placeholder for custom overrides
34
33
 
35
34
  settings(
36
35
  :query, :name, :message, :escalation_message, :critical, :type, :renotify_interval, :warning, :timeout_h, :evaluation_delay,
37
36
  :ok, :no_data_timeframe, :notify_no_data, :notify_audit, :tags, :critical_recovery, :warning_recovery, :require_full_window,
38
- :threshold_windows, :scheduling_options, :new_host_delay, :new_group_delay, :priority, :validate_using_links, :variables, :on_missing_data,
37
+ :threshold_windows, :scheduling_options, :new_host_delay, :new_group_delay, :priority, :variables, :on_missing_data,
39
38
  :notification_preset_name
40
39
  )
41
40
 
@@ -265,6 +264,7 @@ module Kennel
265
264
  end
266
265
 
267
266
  validate_using_links(data)
267
+ validate_thresholds(data)
268
268
 
269
269
  if type == "service check" && !data[:query].to_s.include?(".by(")
270
270
  invalid! :query_must_include_by, "query must include a .by() at least .by(\"*\")"
@@ -320,16 +320,45 @@ module Kennel
320
320
  case data[:type]
321
321
  when "composite" # TODO: add slo to mirror resolve_linked_tracking_ids! logic
322
322
  ids = data[:query].tr("-", "_").scan(/\b\d+\b/)
323
- ids.reject! { |id| ALLOWED_UNLINKED.include?([tracking_id, id]) }
324
323
  if ids.any?
325
324
  invalid! :links_must_be_via_tracking_id, <<~MSG.rstrip
326
- Used #{ids} in the query, but should only use links in the form of %{<project id>:<monitor id>}
327
- If that is not possible, add `validate_using_links: ->(*){} # linked monitors are not in kennel
325
+ Use kennel ids in the query for linking monitors instead of #{ids}, for example `%{#{project.kennel_id}:<monitor id>}`
326
+ If the target monitors are not managed via kennel, add `ignored_errors: [:links_must_be_via_tracking_id] # linked monitors are not in kennel`
327
+ MSG
328
+ end
329
+ when "slo alert"
330
+ if (id = data[:query][/error_budget\("([a-f\d]+)"\)/, 1])
331
+ invalid! :links_must_be_via_tracking_id, <<~MSG
332
+ Use kennel ids in the query for linking alerts to slos instead of "#{id}", for example `error_budget("%{#{project.kennel_id}:slo_id_goes_here}")
333
+ If the target slo is not managed by kennel, then add `ignored_errors: [:links_must_be_via_tracking_id] # linked slo is not in kennel`
328
334
  MSG
329
335
  end
330
336
  else # do nothing
331
337
  end
332
338
  end
339
+
340
+ # Prevent "Warning threshold (50.0) must be less than the alert threshold (20.0) with > comparison."
341
+ def validate_thresholds(data)
342
+ return unless (warning = data.dig(:options, :thresholds, :warning))
343
+ critical = data.dig(:options, :thresholds, :critical)
344
+
345
+ case data[:query]
346
+ when /<=?\s*\S+\s*$/
347
+ if warning <= critical
348
+ invalid!(
349
+ :alert_less_than_warning,
350
+ "Warning threshold (#{warning}) must be greater than the alert threshold (#{critical}) with < comparison"
351
+ )
352
+ end
353
+ when />=?\s*\S+\s*$/
354
+ if warning >= critical
355
+ invalid!(
356
+ :alert_less_than_warning,
357
+ "Warning threshold (#{warning}) must be less than the alert threshold (#{critical}) with > comparison"
358
+ )
359
+ end
360
+ end
361
+ end
333
362
  end
334
363
  end
335
364
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.140.0"
3
+ VERSION = "1.141.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.140.0
4
+ version: 1.141.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: 2023-05-30 00:00:00.000000000 Z
11
+ date: 2023-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs