kennel 1.16.2 → 1.17.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 +4 -4
- data/Readme.md +12 -4
- data/lib/kennel/importer.rb +48 -0
- data/lib/kennel/models/dash.rb +2 -1
- data/lib/kennel/tasks.rb +8 -0
- data/lib/kennel/version.rb +1 -1
- data/template/Readme.md +10 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d354b23d7d94b5204db458729029fea0b9d2cce10689059b7818cfb42da4101b
|
4
|
+
data.tar.gz: 0c364c6db65fdf0d1fe462bc91930b6fbfeafc05f7ab152fe3d4584796fd1d57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21149b9899661a927d688f5db2b71702cecf6ced3998b40d7ed03917487bcaa63c11fe581004959840c319f3b5fc228a7b8ae59f3639bdb67ee77b1d14ff5f12
|
7
|
+
data.tar.gz: 9e7e174417f5a884acf06f45a03dee86fc23fe95d41cd2df993ca1e4e20fa7e72eaffc754becc0f4452ea2d3a75037dd9d43eb11ea722ed7788d62a06d17a1c3
|
data/Readme.md
CHANGED
@@ -15,7 +15,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
15
15
|
|
16
16
|
- create a new private `kennel` repo for your organization (do not fork this repo)
|
17
17
|
- use the template folder as starting point:
|
18
|
-
```
|
18
|
+
```Bash
|
19
19
|
git clone git@github.com:your-org/kennel.git
|
20
20
|
git clone git@github.com:grosser/kennel.git seed
|
21
21
|
mv seed/teamplate/* kennel/
|
@@ -47,7 +47,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
47
47
|
|
48
48
|
### Adding a team
|
49
49
|
|
50
|
-
```
|
50
|
+
```Ruby
|
51
51
|
# teams/my_team.rb
|
52
52
|
module Teams
|
53
53
|
class MyTeam < Kennel::Models::Team
|
@@ -145,6 +145,14 @@ end
|
|
145
145
|
end
|
146
146
|
```
|
147
147
|
|
148
|
+
### Importing an existing resources
|
149
|
+
|
150
|
+
```Bash
|
151
|
+
RESOURCE=dash ID=12345 rake kennel:import
|
152
|
+
```
|
153
|
+
|
154
|
+
Put returned definition into a project of your choice.
|
155
|
+
|
148
156
|
### Adding a new screenboard
|
149
157
|
- similar to `dash.rb`
|
150
158
|
- add to `parts:` list
|
@@ -164,7 +172,7 @@ end
|
|
164
172
|
|
165
173
|
### Skipping validations
|
166
174
|
|
167
|
-
Some validations might be too strict for your usecase or just wrong, please open an issue and
|
175
|
+
Some validations might be too strict for your usecase or just wrong, please [open an issue](https://github.com/grosser/kennel/issues) and
|
168
176
|
to unblock use the `validate: -> { false }` option.
|
169
177
|
|
170
178
|
### Debugging locally
|
@@ -208,7 +216,7 @@ end
|
|
208
216
|
|
209
217
|
### Integration testing
|
210
218
|
|
211
|
-
```
|
219
|
+
```Bash
|
212
220
|
rake play
|
213
221
|
cd template
|
214
222
|
rake kennel:plan
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kennel
|
4
|
+
class Importer
|
5
|
+
SORT_ORDER = [:title, :id, :description, :template_variables].freeze
|
6
|
+
|
7
|
+
# TODO: make model diff normalization reusable
|
8
|
+
IGNORED = Models::Base::READONLY_ATTRIBUTES - [:id] + [:created_by, :read_only]
|
9
|
+
|
10
|
+
def initialize(api)
|
11
|
+
@api = api
|
12
|
+
end
|
13
|
+
|
14
|
+
def import(resource, id)
|
15
|
+
data = @api.show(resource, id)
|
16
|
+
case resource
|
17
|
+
when "dash"
|
18
|
+
data = data[:dash]
|
19
|
+
IGNORED.each { |k| data.delete(k) }
|
20
|
+
<<~RUBY
|
21
|
+
Kennel::Models::Dash.new(
|
22
|
+
self,
|
23
|
+
#{pretty_print(data).lstrip}
|
24
|
+
)
|
25
|
+
RUBY
|
26
|
+
else
|
27
|
+
raise ArgumentError, "#{resource} is not supported"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def pretty_print(hash)
|
34
|
+
list = hash.sort_by { |k, _| SORT_ORDER.index(k) || 999 }
|
35
|
+
list.map do |k, v|
|
36
|
+
case v
|
37
|
+
when Hash, Array
|
38
|
+
pretty = JSON.pretty_generate(v)
|
39
|
+
.gsub(/(^\s*)"(.*?)":/, "\\1\\2:") # "foo": 1 -> foo: 1
|
40
|
+
.gsub(/^/, " ") # indent
|
41
|
+
" #{k}: -> {\n#{pretty}\n }"
|
42
|
+
else
|
43
|
+
" #{k}: -> { #{v.inspect} }"
|
44
|
+
end
|
45
|
+
end.join(",\n")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/kennel/models/dash.rb
CHANGED
@@ -34,7 +34,7 @@ module Kennel
|
|
34
34
|
id: id,
|
35
35
|
title: "#{title}#{LOCK}",
|
36
36
|
description: description,
|
37
|
-
read_only: false,
|
37
|
+
read_only: false, # TODO: delete it instead
|
38
38
|
template_variables: render_template_variables,
|
39
39
|
graphs: render_graphs
|
40
40
|
}
|
@@ -102,6 +102,7 @@ module Kennel
|
|
102
102
|
graph
|
103
103
|
end + graphs
|
104
104
|
|
105
|
+
# TODO: solve this via ignore-defaults
|
105
106
|
all.each do |g|
|
106
107
|
g[:definition][:autoscale] = true unless g[:definition].key?(:autoscale)
|
107
108
|
end
|
data/lib/kennel/tasks.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require "English"
|
3
3
|
require "kennel"
|
4
4
|
require "kennel/unmuted_alerts"
|
5
|
+
require "kennel/importer"
|
5
6
|
|
6
7
|
namespace :kennel do
|
7
8
|
desc "Ensure there are no uncommited changes that would be hidden from PR reviewers"
|
@@ -49,6 +50,13 @@ namespace :kennel do
|
|
49
50
|
Kennel::UnmutedAlerts.print(Kennel.send(:api), tag)
|
50
51
|
end
|
51
52
|
|
53
|
+
desc "Covert existing resources to copy-pastable definitions to import existing resources RESOURCE=dash ID=1234"
|
54
|
+
task import: :environment do
|
55
|
+
resource = ENV["RESOURCE"] || abort("Call with RESOURCE=dash") # TODO: add others
|
56
|
+
id = Integer(ENV["ID"] || abort("Call with ID=1234"))
|
57
|
+
puts Kennel::Importer.new(Kennel.send(:api)).import(resource, id)
|
58
|
+
end
|
59
|
+
|
52
60
|
task :environment do
|
53
61
|
require "kennel"
|
54
62
|
gem "dotenv"
|
data/lib/kennel/version.rb
CHANGED
data/template/Readme.md
CHANGED
@@ -29,7 +29,7 @@ Keep datadog monitors/dashboards/etc in version control, avoid chaotic managemen
|
|
29
29
|
|
30
30
|
### Adding a team
|
31
31
|
|
32
|
-
```
|
32
|
+
```Ruby
|
33
33
|
# teams/my_team.rb
|
34
34
|
module Teams
|
35
35
|
class MyTeam < Kennel::Models::Team
|
@@ -127,6 +127,14 @@ end
|
|
127
127
|
end
|
128
128
|
```
|
129
129
|
|
130
|
+
### Importing an existing resources
|
131
|
+
|
132
|
+
```Bash
|
133
|
+
RESOURCE=dash ID=12345 rake kennel:import
|
134
|
+
```
|
135
|
+
|
136
|
+
Put returned definition into a project of your choice.
|
137
|
+
|
130
138
|
### Adding a new screenboard
|
131
139
|
- similar to `dash.rb`
|
132
140
|
- add to `parts:` list
|
@@ -146,7 +154,7 @@ end
|
|
146
154
|
|
147
155
|
### Skipping validations
|
148
156
|
|
149
|
-
Some validations might be too strict for your usecase or just wrong, please open an issue and
|
157
|
+
Some validations might be too strict for your usecase or just wrong, please [open an issue](https://github.com/grosser/kennel/issues) and
|
150
158
|
to unblock use the `validate: -> { false }` option.
|
151
159
|
|
152
160
|
### Debugging locally
|
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.17.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: 2018-10-
|
11
|
+
date: 2018-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/kennel/api.rb
|
50
50
|
- lib/kennel/file_cache.rb
|
51
51
|
- lib/kennel/github_reporter.rb
|
52
|
+
- lib/kennel/importer.rb
|
52
53
|
- lib/kennel/models/base.rb
|
53
54
|
- lib/kennel/models/dash.rb
|
54
55
|
- lib/kennel/models/monitor.rb
|