kennel 1.61.2 → 1.62.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +3 -4
- data/lib/kennel/models/dashboard.rb +6 -5
- data/lib/kennel/models/monitor.rb +4 -4
- data/lib/kennel/models/record.rb +5 -4
- data/lib/kennel/models/slo.rb +1 -1
- data/lib/kennel/syncer.rb +2 -1
- data/lib/kennel/version.rb +1 -1
- data/template/Readme.md +2 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5ad82b24cba6eef0e7733dac0b4c0f51e54fb728338112c8505ddf84284df23
|
4
|
+
data.tar.gz: c6bf110be71f0296d352797ed7f8ac364dfa18e580a632ef1ad21e427da65111
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85b2929f6e429c64be88d96dbbfb76f057fa56d1dea6eb81668e728b214ff4cd91a6345899199f95034c75414444519d6d7f585174687866f99c20481e547172
|
7
|
+
data.tar.gz: 55412cc487dffdf9de2e4f715fb3773690591753793fe2ea799677f853b3c42348e1fbc6ed13a8e7adc3d45d0fd3ac9141a825ef10d4a2066cdb58350e3632ff
|
data/Readme.md
CHANGED
@@ -6,8 +6,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
6
6
|
|
7
7
|
- Documented, reusable, automated, and searchable configuration
|
8
8
|
- Changes are PR reviewed and auditable
|
9
|
-
-
|
10
|
-
- Reliable cleanup with automated deletion
|
9
|
+
- Automated deletion when removed from code
|
11
10
|
|
12
11
|
![](template/github/screen.png?raw=true)
|
13
12
|
<!-- NOT IN template/Readme.md -->
|
@@ -18,7 +17,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
18
17
|
```Bash
|
19
18
|
git clone git@github.com:your-org/kennel.git
|
20
19
|
git clone git@github.com:grosser/kennel.git seed
|
21
|
-
mv seed/
|
20
|
+
mv seed/template/* kennel/
|
22
21
|
cd kennel && git add . && git commit -m 'initial'
|
23
22
|
```
|
24
23
|
- add a basic projects and teams so others can copy-paste to get started
|
@@ -31,7 +30,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
31
30
|
|
32
31
|
- `projects/` monitors/dashboards/etc scoped by project
|
33
32
|
- `teams/` team definitions
|
34
|
-
- `parts/` monitors/
|
33
|
+
- `parts/` monitors/dashboards/etc that are used by multiple projects
|
35
34
|
- `generated/` projects as json, to show current state and proposed changes in PRs
|
36
35
|
|
37
36
|
## Workflows
|
@@ -125,22 +125,23 @@ module Kennel
|
|
125
125
|
end
|
126
126
|
|
127
127
|
def resolve_linked_tracking_ids(id_map)
|
128
|
-
as_json[:widgets].
|
128
|
+
widgets = as_json[:widgets].flat_map { |w| [w, *w.dig(:definition, :widgets) || []] }
|
129
|
+
widgets.each do |widget|
|
129
130
|
next unless definition = widget[:definition]
|
130
131
|
case definition[:type]
|
131
132
|
when "uptime"
|
132
133
|
if ids = definition[:monitor_ids]
|
133
134
|
definition[:monitor_ids] = ids.map do |id|
|
134
|
-
tracking_id?(id) ? resolve_link(id, id_map) : id
|
135
|
+
tracking_id?(id) ? resolve_link(id, :monitor, id_map) : id
|
135
136
|
end
|
136
137
|
end
|
137
138
|
when "alert_graph"
|
138
139
|
if (id = definition[:alert_id]) && tracking_id?(id)
|
139
|
-
definition[:alert_id] = resolve_link(id, id_map).to_s
|
140
|
+
definition[:alert_id] = resolve_link(id, :monitor, id_map).to_s
|
140
141
|
end
|
141
142
|
when "slo"
|
142
143
|
if (id = definition[:slo_id]) && tracking_id?(id)
|
143
|
-
definition[:slo_id] = resolve_link(id, id_map).to_s
|
144
|
+
definition[:slo_id] = resolve_link(id, :slo, id_map).to_s
|
144
145
|
end
|
145
146
|
end
|
146
147
|
end
|
@@ -149,7 +150,7 @@ module Kennel
|
|
149
150
|
private
|
150
151
|
|
151
152
|
def tracking_id?(id)
|
152
|
-
id.is_a?(String) &&
|
153
|
+
id.is_a?(String) && id.include?(":")
|
153
154
|
end
|
154
155
|
|
155
156
|
# creates queries from metadata to avoid having to keep q and expression in sync
|
@@ -8,7 +8,7 @@ module Kennel
|
|
8
8
|
QUERY_INTERVALS = ["1m", "5m", "10m", "15m", "30m", "1h", "2h", "4h", "1d"].freeze
|
9
9
|
OPTIONAL_SERVICE_CHECK_THRESHOLDS = [:ok, :warning].freeze
|
10
10
|
READONLY_ATTRIBUTES = superclass::READONLY_ATTRIBUTES + [
|
11
|
-
:multi, :matching_downtimes, :overall_state_modified, :overall_state
|
11
|
+
:multi, :matching_downtimes, :overall_state_modified, :overall_state, :restricted_roles
|
12
12
|
]
|
13
13
|
|
14
14
|
# defaults that datadog uses when options are not sent, so safe to leave out if our values match their defaults
|
@@ -35,7 +35,7 @@ module Kennel
|
|
35
35
|
ok: -> { nil },
|
36
36
|
id: -> { nil },
|
37
37
|
notify_no_data: -> { true },
|
38
|
-
no_data_timeframe: -> {
|
38
|
+
no_data_timeframe: -> { 60 },
|
39
39
|
notify_audit: -> { true },
|
40
40
|
new_host_delay: -> { MONITOR_OPTION_DEFAULTS.fetch(:new_host_delay) },
|
41
41
|
tags: -> { @project.tags },
|
@@ -57,7 +57,7 @@ module Kennel
|
|
57
57
|
options: {
|
58
58
|
timeout_h: timeout_h,
|
59
59
|
notify_no_data: notify_no_data,
|
60
|
-
no_data_timeframe: no_data_timeframe,
|
60
|
+
no_data_timeframe: notify_no_data ? no_data_timeframe : nil,
|
61
61
|
notify_audit: notify_audit,
|
62
62
|
require_full_window: require_full_window,
|
63
63
|
new_host_delay: new_host_delay,
|
@@ -106,7 +106,7 @@ module Kennel
|
|
106
106
|
if as_json[:type] == "composite"
|
107
107
|
as_json[:query] = as_json[:query].gsub(/%\{(.*?)\}/) do
|
108
108
|
# need force here since it validates the id exists
|
109
|
-
resolve_link($1, id_map, force: true)
|
109
|
+
resolve_link($1, :monitor, id_map, force: true)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
data/lib/kennel/models/record.rb
CHANGED
@@ -54,19 +54,20 @@ module Kennel
|
|
54
54
|
|
55
55
|
private
|
56
56
|
|
57
|
-
def resolve_link(id, id_map, force: false)
|
57
|
+
def resolve_link(id, type, id_map, force: false)
|
58
58
|
found = id_map[id]
|
59
59
|
return found if found && found != :new
|
60
|
+
api_resource = self.class.api_resource
|
60
61
|
|
61
62
|
if found == :new
|
62
63
|
if force
|
63
|
-
invalid! "
|
64
|
+
invalid! "#{api_resource.capitalize} #{id} will be created in the current run and can only be used after that"
|
64
65
|
else
|
65
|
-
Kennel.err.puts "
|
66
|
+
Kennel.err.puts "#{api_resource.capitalize} #{id} will be created in the current run, the next run will link it properly"
|
66
67
|
Kennel::MISSING_ID
|
67
68
|
end
|
68
69
|
else
|
69
|
-
invalid! "Unable to find
|
70
|
+
invalid! "Unable to find #{type} #{id} (does not exist and is not being created by the current run)"
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
data/lib/kennel/models/slo.rb
CHANGED
data/lib/kennel/syncer.rb
CHANGED
@@ -147,7 +147,8 @@ module Kennel
|
|
147
147
|
def print_plan(step, list, color)
|
148
148
|
return if list.empty?
|
149
149
|
list.each do |_, e, a, diff|
|
150
|
-
|
150
|
+
api_resource = (e ? e.class.api_resource : a.fetch(:api_resource))
|
151
|
+
Kennel.out.puts Utils.color(color, "#{step} #{api_resource} #{tracking_id(e&.as_json || a)}")
|
151
152
|
print_diff(diff) if diff # only for update
|
152
153
|
end
|
153
154
|
end
|
data/lib/kennel/version.rb
CHANGED
data/template/Readme.md
CHANGED
@@ -6,8 +6,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
6
6
|
|
7
7
|
- Documented, reusable, automated, and searchable configuration
|
8
8
|
- Changes are PR reviewed and auditable
|
9
|
-
-
|
10
|
-
- Reliable cleanup with automated deletion
|
9
|
+
- Automated deletion when removed from code
|
11
10
|
|
12
11
|
![](github/screen.png?raw=true)
|
13
12
|
|
@@ -15,7 +14,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
15
14
|
|
16
15
|
- `projects/` monitors/dashboards/etc scoped by project
|
17
16
|
- `teams/` team definitions
|
18
|
-
- `parts/` monitors/
|
17
|
+
- `parts/` monitors/dashboards/etc that are used by multiple projects
|
19
18
|
- `generated/` projects as json, to show current state and proposed changes in PRs
|
20
19
|
|
21
20
|
## Workflows
|
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.
|
4
|
+
version: 1.62.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:
|
11
|
+
date: 2020-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
104
|
rubyforge_project:
|
105
|
-
rubygems_version: 2.7.6
|
105
|
+
rubygems_version: 2.7.6.2
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: Keep datadog monitors/dashboards/etc in version control, avoid chaotic management
|