kennel 1.95.0 → 1.97.1

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: 6570a5349f036d6146c90bad7b895dc4ac12d7bdbd7a246639fa73051a65748c
4
- data.tar.gz: b62a1cae5ab997244a56b552ccc4653d07dff907145a3ac88e6ca8b225f5e240
3
+ metadata.gz: e8d215839f60e7de711646bbe7fa33a6cb6e760abccf0b93eb1aa2bf4a7698d5
4
+ data.tar.gz: edee1d1856e9573bff15881653f3b6b1c0e28aeea923ce228a292a7d5e9bef77
5
5
  SHA512:
6
- metadata.gz: eac6064d94be025b7d6f66e3dc85d9237f1b80612b15b94c008645e6c57e427cb0907167bd2adec4124b45f94e36bdf76c3f7bbd02d4516e8006d4340b1fc9f3
7
- data.tar.gz: 2617d8b6ea3d0c6b1b42921adfc249dd90b2a150ee7f40abc11275c3e473f7e7c425fa8886d8d3995e06b5b84e7398a3daee02464c4cf3985eeb41809fafb1ff
6
+ metadata.gz: 488aaaff92f09f9176533e8103d86c4eda767cd0ec0d5f6b6982c14f5a0886e7f41ad1ddc9d4d8c2dd4b9906c5fbd90609071af89f4de8c800fa6b8687c171a1
7
+ data.tar.gz: 0011e0ba0634266a400f224e5855ffdff23142cc111af8acb4f808dfdda29ebf25a4718cf5b70e9222dc600cfdcbd5ae903ffc1d128d9ca2b1b5d475c8eff4c7
@@ -31,7 +31,7 @@ module Kennel
31
31
  settings(
32
32
  :query, :name, :message, :escalation_message, :critical, :type, :renotify_interval, :warning, :timeout_h, :evaluation_delay,
33
33
  :ok, :no_data_timeframe, :notify_no_data, :notify_audit, :tags, :critical_recovery, :warning_recovery, :require_full_window,
34
- :threshold_windows, :new_host_delay, :priority
34
+ :threshold_windows, :new_host_delay, :new_group_delay, :priority
35
35
  )
36
36
 
37
37
  defaults(
@@ -45,6 +45,7 @@ module Kennel
45
45
  no_data_timeframe: -> { 60 },
46
46
  notify_audit: -> { MONITOR_OPTION_DEFAULTS.fetch(:notify_audit) },
47
47
  new_host_delay: -> { MONITOR_OPTION_DEFAULTS.fetch(:new_host_delay) },
48
+ new_group_delay: -> { nil },
48
49
  tags: -> { @project.tags },
49
50
  timeout_h: -> { MONITOR_OPTION_DEFAULTS.fetch(:timeout_h) },
50
51
  evaluation_delay: -> { MONITOR_OPTION_DEFAULTS.fetch(:evaluation_delay) },
@@ -70,6 +71,7 @@ module Kennel
70
71
  notify_audit: notify_audit,
71
72
  require_full_window: require_full_window,
72
73
  new_host_delay: new_host_delay,
74
+ new_group_delay: new_group_delay,
73
75
  include_tags: true,
74
76
  escalation_message: Utils.presence(escalation_message.strip),
75
77
  evaluation_delay: evaluation_delay,
@@ -106,6 +108,9 @@ module Kennel
106
108
  options[:threshold_windows] = windows
107
109
  end
108
110
 
111
+ # Datadog requires only either new_group_delay or new_host_delay, never both
112
+ options.delete(options[:new_group_delay] ? :new_host_delay : :new_group_delay)
113
+
109
114
  validate_json(data) if validate
110
115
 
111
116
  @as_json = data
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.95.0"
3
+ VERSION = "1.97.1"
4
4
  end
data/lib/kennel.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "faraday"
3
3
  require "json"
4
+ require "zeitwerk"
4
5
  require "shellwords"
5
6
  require "English"
6
7
 
@@ -30,6 +31,10 @@ require "kennel/models/synthetic_test"
30
31
  require "kennel/models/project"
31
32
  require "kennel/models/team"
32
33
 
34
+ # need to define early since we autoload the teams/ folder into it
35
+ module Teams
36
+ end
37
+
33
38
  module Kennel
34
39
  class ValidationError < RuntimeError
35
40
  end
@@ -128,9 +133,34 @@ module Kennel
128
133
  end
129
134
 
130
135
  def load_all
131
- ["teams", "parts", "projects"].each do |folder|
136
+ loader = Zeitwerk::Loader.new
137
+ Dir.exist?("teams") && loader.push_dir("teams", namespace: Teams)
138
+ Dir.exist?("parts") && loader.push_dir("parts")
139
+ loader.setup
140
+
141
+ # TODO: also do projects and update expected path too
142
+ ["projects"].each do |folder|
132
143
  Dir["#{folder}/**/*.rb"].sort.each { |f| require "./#{f}" }
133
144
  end
145
+ rescue NameError => e
146
+ message = e.message
147
+ raise unless klass = message[/uninitialized constant (.*)/, 1]
148
+
149
+ # inverse of zeitwerk lib/zeitwerk/inflector.rb
150
+ path = klass.gsub("::", "/").gsub(/([a-z])([A-Z])/, "\\1_\\2").downcase + ".rb"
151
+ expected_path = (path.start_with?("teams/") ? path : "parts/#{path}")
152
+
153
+ # TODO: prefer to raise a new exception with the old backtrace attacked
154
+ e.define_singleton_method(:message) do
155
+ "\n" + <<~MSG.gsub(/^/, " ")
156
+ #{message}
157
+ Unable to load #{klass} from #{expected_path}
158
+ - Option 1: rename the constant or the file it lives in, to make them match
159
+ - Option 2: Use `require` or `require_relative` to load the constant
160
+ MSG
161
+ end
162
+
163
+ raise
134
164
  end
135
165
  end
136
166
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kennel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.95.0
4
+ version: 1.97.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: 2021-10-23 00:00:00.000000000 Z
11
+ date: 2021-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: hashdiff
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '4.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: zeitwerk
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.4'
55
69
  description:
56
70
  email: michael@grosser.it
57
71
  executables: []