kennel 1.95.0 → 1.97.1

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: 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: []