kennel 1.94.2 → 1.97.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: a084e0be7ff70945f9cdc705440e520d8613627d237633e4d49c83cb51222229
4
- data.tar.gz: a4d1ab3746d71351a9606f3084d24fd7eff4781df659f28263ac5803744ec1dc
3
+ metadata.gz: 709d0b2dfc1941a144a4ea5a8089bc82778ac271c7586c0606aa01ac182656cd
4
+ data.tar.gz: b93a0e78bf9fc66dbb2f9b4de43fb540d39392bcc6fc5b147a7535242391c6f9
5
5
  SHA512:
6
- metadata.gz: d69aad6485a1243c18880a4d257d4edf45c2c9f2cbd1c8c3935528a10e546db7f8d1922e8adef660ab79360b84c5a63891495fd487f3f889c091b5c1cffacb62
7
- data.tar.gz: 94f9c351163a3e4efd6cb3a04a5c2068aa7810481203f4f8b937b6fd5e76615a96249cc99d0328c89bf3d6e247a62488bd2562801112fb6b58432ba6d2213617
6
+ metadata.gz: 3862967bda2b37171a989e261d793d0ea47cb324c7088ecc2f682d8ca5a043c6586220b6cfe561e3c10b5dae97852492907eef84cc77f275d628748e2bcc153c
7
+ data.tar.gz: c27ded1f767246a190ca5b0431b8ed03d1a94045fb57c2ce0be297d3c4aa1606246a4ef3cdcb1ff97ca6f0e4d89f8938064b1b8784ad8c6d78c63228d5f9684a
@@ -69,7 +69,10 @@ module Kennel
69
69
  template_variable_presets: nil
70
70
  }.freeze
71
71
 
72
- settings :title, :description, :definitions, :widgets, :layout_type, :template_variable_presets, :reflow_type
72
+ settings(
73
+ :title, :description, :definitions, :widgets, :layout_type, :template_variable_presets, :reflow_type,
74
+ :tags
75
+ )
73
76
 
74
77
  defaults(
75
78
  description: -> { "" },
@@ -77,6 +80,10 @@ module Kennel
77
80
  widgets: -> { [] },
78
81
  template_variable_presets: -> { DEFAULTS.fetch(:template_variable_presets) },
79
82
  reflow_type: -> { layout_type == "ordered" ? "auto" : nil },
83
+ tags: -> do # not inherited by default to make onboarding to using dashboard tags simple
84
+ team = project.team
85
+ team.tag_dashboards ? team.tags : []
86
+ end,
80
87
  id: -> { nil }
81
88
  )
82
89
 
@@ -145,10 +152,12 @@ module Kennel
145
152
  return @json if @json
146
153
  all_widgets = render_definitions(definitions) + widgets
147
154
  expand_q all_widgets
155
+ tags = tags()
156
+ tags_as_string = (tags.empty? ? "" : " (#{tags.join(" ")})")
148
157
 
149
158
  @json = {
150
159
  layout_type: layout_type,
151
- title: "#{title}#{LOCK}",
160
+ title: "#{title}#{tags_as_string}#{LOCK}",
152
161
  description: description,
153
162
  template_variables: render_template_variables,
154
163
  template_variable_presets: template_variable_presets,
@@ -19,6 +19,7 @@ module Kennel
19
19
  MONITOR_OPTION_DEFAULTS = {
20
20
  evaluation_delay: nil,
21
21
  new_host_delay: 300,
22
+ new_group_delay: 60,
22
23
  timeout_h: 0,
23
24
  renotify_interval: 0,
24
25
  notify_audit: false,
@@ -31,7 +32,7 @@ module Kennel
31
32
  settings(
32
33
  :query, :name, :message, :escalation_message, :critical, :type, :renotify_interval, :warning, :timeout_h, :evaluation_delay,
33
34
  :ok, :no_data_timeframe, :notify_no_data, :notify_audit, :tags, :critical_recovery, :warning_recovery, :require_full_window,
34
- :threshold_windows, :new_host_delay, :priority
35
+ :threshold_windows, :new_host_delay, :new_group_delay, :priority
35
36
  )
36
37
 
37
38
  defaults(
@@ -45,6 +46,7 @@ module Kennel
45
46
  no_data_timeframe: -> { 60 },
46
47
  notify_audit: -> { MONITOR_OPTION_DEFAULTS.fetch(:notify_audit) },
47
48
  new_host_delay: -> { MONITOR_OPTION_DEFAULTS.fetch(:new_host_delay) },
49
+ new_group_delay: -> { MONITOR_OPTION_DEFAULTS.fetch(:new_group_delay) },
48
50
  tags: -> { @project.tags },
49
51
  timeout_h: -> { MONITOR_OPTION_DEFAULTS.fetch(:timeout_h) },
50
52
  evaluation_delay: -> { MONITOR_OPTION_DEFAULTS.fetch(:evaluation_delay) },
@@ -70,6 +72,7 @@ module Kennel
70
72
  notify_audit: notify_audit,
71
73
  require_full_window: require_full_window,
72
74
  new_host_delay: new_host_delay,
75
+ new_group_delay: new_group_delay,
73
76
  include_tags: true,
74
77
  escalation_message: Utils.presence(escalation_message.strip),
75
78
  evaluation_delay: evaluation_delay,
@@ -2,10 +2,11 @@
2
2
  module Kennel
3
3
  module Models
4
4
  class Team < Base
5
- settings :mention, :tags, :renotify_interval, :kennel_id
5
+ settings :mention, :tags, :renotify_interval, :kennel_id, :tag_dashboards
6
6
  defaults(
7
7
  tags: -> { ["team:#{kennel_id.sub(/^teams_/, "")}"] },
8
- renotify_interval: -> { 0 }
8
+ renotify_interval: -> { 0 },
9
+ tag_dashboards: -> { false }
9
10
  )
10
11
  end
11
12
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.94.2"
3
+ VERSION = "1.97.0"
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.94.2
4
+ version: 1.97.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: 2021-10-16 00:00:00.000000000 Z
11
+ date: 2021-10-26 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: []