kennel 2.3.0 → 2.5.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: 9a72c925b5388b403514bc0be5c998595428bb41cdf41f97f91571a374716e14
4
- data.tar.gz: 6bcd5f992433b13f088c633e1cd3468c1966cada8df12a689a07343a17e23d2c
3
+ metadata.gz: ca7ba16c7952c8b56ba72203c27828ed64cf0b5e927673b7de2e3b132536d318
4
+ data.tar.gz: 77b70544f3be1cda6a21dd24ce5b80eaa9c3f6588d566f46d7c1b43e87bf93e0
5
5
  SHA512:
6
- metadata.gz: 713d35626d870aeaaa1148a73b56b73b25e515dfa2523a97e2e423f5f63dc84461b4bcadbe0fc928698717f2928e99fca47ccb9c7a755057635b4b3b51025acc
7
- data.tar.gz: 1d65adb907acd6c31f60c53be6dabf9d3849793f684d2d142403f7fa4b71439ec4544e72b325eb7d4181a50e81542b7704c1144ff2e7e79bb7d90716a9b0ce2e
6
+ metadata.gz: c773b16cd6f66d0941073c6146578b5e5b011aff2aa83e90dffea2f069912a3afdb14dabc553fb10436089947f056a9aa13797e9ae54ed3e668e2da6c7b1c40c
7
+ data.tar.gz: 8c61dac6e484e8ebba99d7abe758f45e81c56536e6d9c686c57e7dcb6a373c9ff1f2afa7feee583d31722c2969234057aa6e23e52a2685d9e73dade48ae37fc2
@@ -21,6 +21,12 @@ module Kennel
21
21
  data = @api.show(model.api_resource, id)
22
22
 
23
23
  id = data.fetch(:id) # keep native value
24
+ if resource == "slo"
25
+ # only set primary if needed to reduce clutter
26
+ if data[:thresholds] && data[:thresholds].min_by { |t| t[:timeframe].to_i }[:timeframe] != data[:timeframe]
27
+ data[:primary] = data[:timeframe]
28
+ end
29
+ end
24
30
  model.normalize({}, data) # removes id
25
31
  data[:id] = id
26
32
 
@@ -6,7 +6,7 @@ module Kennel
6
6
 
7
7
  READONLY_ATTRIBUTES = [
8
8
  *superclass::READONLY_ATTRIBUTES,
9
- :type_id, :monitor_tags, :target_threshold, :timeframe, :warning_threshold
9
+ :type_id, :monitor_tags
10
10
  ].freeze
11
11
  TRACKING_FIELD = :description
12
12
  DEFAULTS = {
@@ -40,20 +40,13 @@ module Kennel
40
40
  type: type
41
41
  )
42
42
 
43
- # Add timeframe and thresholds based on primary setting
44
- if primary
45
- data[:timeframe] = primary
46
-
43
+ # add top level timeframe and threshold settings based on `primary`
44
+ if (p = primary)
45
+ data[:timeframe] = p
47
46
  threshold =
48
- thresholds.detect { |t| t[:timeframe] == primary } ||
49
- raise("unable to find threshold with timeframe #{primary}")
50
-
51
- # Only add warning_threshold if it exists
52
- if threshold[:warning]
53
- data[:warning_threshold] = threshold[:warning]
54
- end
55
-
56
- # target is required
47
+ thresholds.detect { |t| t[:timeframe] == p } ||
48
+ raise(ArgumentError, "#{tracking_id} unable to find threshold with timeframe #{p}")
49
+ data[:warning_threshold] = threshold[:warning]
57
50
  data[:target_threshold] = threshold[:target]
58
51
  end
59
52
 
@@ -102,6 +95,12 @@ module Kennel
102
95
  expected[:tags]&.sort!
103
96
  actual[:tags].sort!
104
97
 
98
+ # do not show these in the diff if we automatically pick the primary timeframe,
99
+ # or we will have a permanent `something -> nil` diff
100
+ unless expected[:timeframe]
101
+ [:timeframe, :warning_threshold, :target_threshold].each { |k| actual.delete k }
102
+ end
103
+
105
104
  ignore_default(expected, actual, DEFAULTS)
106
105
  end
107
106
 
data/lib/kennel/tasks.rb CHANGED
@@ -66,18 +66,26 @@ namespace :kennel do
66
66
  Kennel::Tasks.abort "Error during diffing" unless $CHILD_STATUS.success?
67
67
  end
68
68
 
69
- # ideally do this on every run, but it's slow (~1.5s) and brittle (might not find all + might find false-positives)
69
+ # ideally do this on every run, but it's slow (~1.5s) and brittle
70
+ # (might not find all via the matcher + might find false-positives because random emails can also be sent to)
70
71
  # https://help.datadoghq.com/hc/en-us/requests/254114 for automatic validation
72
+ # /monitor/notifications has users+slack+sns so there is lots of overlap and we don't really need sns
73
+ # got a support ticket open to get sns into api/v2 too
71
74
  desc "Verify that all used monitor mentions are valid"
72
75
  task validate_mentions: :environment do
73
- known = Kennel::Api.new
74
- .send(:request, :get, "/monitor/notifications")
75
- .fetch(:handles)
76
- .values
77
- .flatten(1)
76
+ known = []
77
+
78
+ # @slack- @team- @webhook- user-emails
79
+ known += Kennel::Api.new.send(:request, :get, "/api/v2/notifications/handles?group_limit=99999")
80
+ .fetch(:data)
81
+ .flat_map { |d| d.dig(:attributes, :handles) }
78
82
  .map { |v| v.fetch(:value) }
79
83
 
80
- known += ENV["KNOWN"].to_s.split(",")
84
+ # group emails or other 1-off things to ignore
85
+ manual = ENV["KNOWN"].to_s.split(",")
86
+ dupes = (manual & known)
87
+ Kennel::Tasks.abort "KNOWN=#{dupes.join(",")} values are already known and should be removed" if dupes.any?
88
+ known += manual
81
89
 
82
90
  bad = []
83
91
  Dir["generated/**/*.json"].each do |f|
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "2.3.0"
3
+ VERSION = "2.5.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: 2.3.0
4
+ version: 2.5.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: 2025-10-10 00:00:00.000000000 Z
11
+ date: 2025-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs