kennel 1.64.0 → 1.66.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kennel/api.rb +3 -3
- data/lib/kennel/github_reporter.rb +5 -5
- data/lib/kennel/models/dashboard.rb +0 -8
- data/lib/kennel/models/monitor.rb +3 -2
- data/lib/kennel/models/record.rb +4 -1
- data/lib/kennel/settings_as_methods.rb +1 -2
- data/lib/kennel/syncer.rb +3 -0
- data/lib/kennel/tasks.rb +2 -2
- data/lib/kennel/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65bf9625be169156f491cb4e987dba3cd1ffa7c4ed4c9875e8a91c6e4ac87c7d
|
4
|
+
data.tar.gz: 3d95cd55b82d4b34c52239509ccd6c0ed57f0147d5494df60b3756df4ad07569
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c6b78a86ddbf6f9c4d320545f779566270e5f878081c77a5de842e0f10a9821fdf415b6b959c1bef849f27e7fe47901cecac096f972284357b3e5ae49d36b30
|
7
|
+
data.tar.gz: c79b6fbf9adda3958c9d5626e8c7073bcfb0e8b4c3f2d2a29c6931a4d21f205fd4a8609be9236afda97cfe9c5fa0fe4c22b82acbbbf35cf69a3fa294ada59662
|
data/lib/kennel/api.rb
CHANGED
@@ -43,12 +43,12 @@ module Kennel
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def delete(api_resource, id)
|
46
|
-
request :delete, "/api/v1/#{api_resource}/#{id}"
|
46
|
+
request :delete, "/api/v1/#{api_resource}/#{id}", ignore_404: true
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
50
50
|
|
51
|
-
def request(method, path, body: nil, params: {})
|
51
|
+
def request(method, path, body: nil, params: {}, ignore_404: false)
|
52
52
|
params = params.merge(application_key: @app_key, api_key: @api_key)
|
53
53
|
query = Faraday::FlatParamsEncoder.encode(params)
|
54
54
|
response = nil
|
@@ -66,7 +66,7 @@ module Kennel
|
|
66
66
|
Kennel.err.puts "Retrying on server error #{response.status} for #{path}"
|
67
67
|
end
|
68
68
|
|
69
|
-
|
69
|
+
if !response.success? && (response.status != 404 || !ignore_404)
|
70
70
|
message = +"Error #{response.status} during #{method.upcase} #{path}\n"
|
71
71
|
message << "request:\n#{JSON.pretty_generate(body)}\nresponse:\n" if body
|
72
72
|
message << response.body
|
@@ -7,13 +7,13 @@ module Kennel
|
|
7
7
|
class << self
|
8
8
|
def report(token, &block)
|
9
9
|
return yield unless token
|
10
|
-
new(token).report(&block)
|
10
|
+
new(token, Utils.capture_sh("git rev-parse HEAD").strip).report(&block)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(token)
|
14
|
+
def initialize(token, git_sha)
|
15
15
|
@token = token
|
16
|
-
@git_sha =
|
16
|
+
@git_sha = git_sha
|
17
17
|
origin = ENV["PROJECT_REPOSITORY"] || Utils.capture_sh("git remote -v").split("\n").first
|
18
18
|
@repo_part = origin[%r{github\.com[:/](.+?)(\.git|$)}, 1] || raise("no origin found")
|
19
19
|
end
|
@@ -27,8 +27,6 @@ module Kennel
|
|
27
27
|
comment "```\n#{output || "Error"}\n```"
|
28
28
|
end
|
29
29
|
|
30
|
-
private
|
31
|
-
|
32
30
|
# https://developer.github.com/v3/repos/comments/#create-a-commit-comment
|
33
31
|
def comment(body)
|
34
32
|
# truncate to maximum allowed comment size for github to avoid 422
|
@@ -39,6 +37,8 @@ module Kennel
|
|
39
37
|
post "commits/#{@git_sha}/comments", body: body
|
40
38
|
end
|
41
39
|
|
40
|
+
private
|
41
|
+
|
42
42
|
def post(path, data)
|
43
43
|
url = "https://api.github.com/repos/#{@repo_part}/#{path}"
|
44
44
|
response = Faraday.post(url, data.to_json, authorization: "token #{@token}")
|
@@ -34,14 +34,6 @@ module Kennel
|
|
34
34
|
super
|
35
35
|
|
36
36
|
widgets_pairs(expected, actual).each do |pair|
|
37
|
-
# datadog always adds 2 to slo widget height
|
38
|
-
# need to check fir layout since some monitors have height/width in their definition
|
39
|
-
pair[1].each do |widget|
|
40
|
-
if widget.dig(:definition, :type) == "slo" && widget.dig(:layout, :height)
|
41
|
-
widget[:layout][:height] -= 2
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
37
|
# conditional_formats ordering is randomly changed by datadog, compare a stable ordering
|
46
38
|
pair.each do |widgets|
|
47
39
|
widgets.each do |widget|
|
@@ -5,7 +5,8 @@ module Kennel
|
|
5
5
|
include OptionalValidations
|
6
6
|
|
7
7
|
RENOTIFY_INTERVALS = [0, 10, 20, 30, 40, 50, 60, 90, 120, 180, 240, 300, 360, 720, 1440].freeze # minutes
|
8
|
-
|
8
|
+
# 2d and 1w are valid timeframes for anomaly monitors
|
9
|
+
QUERY_INTERVALS = ["1m", "5m", "10m", "15m", "30m", "1h", "2h", "4h", "1d", "2d", "1w"].freeze
|
9
10
|
OPTIONAL_SERVICE_CHECK_THRESHOLDS = [:ok, :warning].freeze
|
10
11
|
READONLY_ATTRIBUTES = superclass::READONLY_ATTRIBUTES + [
|
11
12
|
:multi, :matching_downtimes, :overall_state_modified, :overall_state, :restricted_roles
|
@@ -132,7 +133,7 @@ module Kennel
|
|
132
133
|
|
133
134
|
case actual[:type]
|
134
135
|
when "event alert"
|
135
|
-
# setting
|
136
|
+
# setting nothing results in thresholds not getting returned from the api
|
136
137
|
options[:thresholds] ||= { critical: 0 }
|
137
138
|
|
138
139
|
when "service check"
|
data/lib/kennel/models/record.rb
CHANGED
@@ -42,7 +42,10 @@ module Kennel
|
|
42
42
|
|
43
43
|
self.class.send(:normalize, expected, actual)
|
44
44
|
|
45
|
-
|
45
|
+
# strict: ignore Integer vs Float
|
46
|
+
# similarity: show diff when not 100% similar
|
47
|
+
# use_lcs: saner output
|
48
|
+
Hashdiff.diff(actual, expected, use_lcs: false, strict: false, similarity: 1)
|
46
49
|
end
|
47
50
|
|
48
51
|
def tracking_id
|
@@ -25,8 +25,7 @@ module Kennel
|
|
25
25
|
names.each do |name|
|
26
26
|
next if method_defined?(name)
|
27
27
|
define_method name do
|
28
|
-
|
29
|
-
raise_with_location ArgumentError, message
|
28
|
+
raise_with_location ArgumentError, "'#{name}' on #{self.class} was not set or passed as option"
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
data/lib/kennel/syncer.rb
CHANGED
@@ -3,6 +3,7 @@ module Kennel
|
|
3
3
|
class Syncer
|
4
4
|
CACHE_FILE = "tmp/cache/details" # keep in sync with .travis.yml caching
|
5
5
|
TRACKING_FIELDS = [:message, :description].freeze
|
6
|
+
DELETE_ORDER = ["dashboard", "slo", "monitor"].freeze # dashboards references monitors + slos, slos reference monitors
|
6
7
|
|
7
8
|
def initialize(api, expected, project: nil)
|
8
9
|
@api = api
|
@@ -98,6 +99,8 @@ module Kennel
|
|
98
99
|
ensure_all_ids_found
|
99
100
|
@create = @expected.map { |e| [nil, e] }
|
100
101
|
end
|
102
|
+
|
103
|
+
@delete.sort_by! { |_, _, a| DELETE_ORDER.index a.fetch(:api_resource) }
|
101
104
|
end
|
102
105
|
|
103
106
|
# Make diff work even though we cannot mass-fetch definitions
|
data/lib/kennel/tasks.rb
CHANGED
@@ -111,9 +111,9 @@ namespace :kennel do
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
desc "Convert existing resources to copy-pastable definitions to import existing resources RESOURCE=
|
114
|
+
desc "Convert existing resources to copy-pastable definitions to import existing resources RESOURCE=[dashboard,monitor,slo] ID=1234"
|
115
115
|
task import: :environment do
|
116
|
-
resource = ENV["RESOURCE"] || Kennel::Tasks.abort("Call with RESOURCE=
|
116
|
+
resource = ENV["RESOURCE"] || Kennel::Tasks.abort("Call with RESOURCE=dashboard or monitor or slo")
|
117
117
|
id = ENV["ID"] || Kennel::Tasks.abort("Call with ID=1234")
|
118
118
|
id = Integer(id) if id =~ /^\d+$/ # dashboards can have alphanumeric ids
|
119
119
|
puts Kennel::Importer.new(Kennel.send(:api)).import(resource, id)
|
data/lib/kennel/version.rb
CHANGED
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.66.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0
|
33
|
+
version: '1.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0
|
40
|
+
version: '1.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: net-http-persistent-retry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|