kennel 1.60.1 → 1.61.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d555de2128376fcfe551b2e7d95dfb724c819adc9f5b401ec155ba2d278607cb
4
- data.tar.gz: bfa004cefabf58c7328118878e0cc1ffc10253098a6176b53ce3ae295adc41c6
3
+ metadata.gz: b27c8e5ce2f9b7ec5b649d582ff591bd05b2c874fdbf21207db795d3cc5b6c26
4
+ data.tar.gz: a1385e625b05f60d80d9cb5b6ca89a97cd9099187bb24896fee4e1bdcdcf51b3
5
5
  SHA512:
6
- metadata.gz: c02a3b3308a8149e8efb2f014156017dc8e1cf8a5ad06507939f69f807c463f295554cddf48affd07706d0699e5df1a965fb44db2a8cb3459dd97401f511d70d
7
- data.tar.gz: 06e3f9c53a1f2d9b7646a0ebc556eb6970957ff700ddcd448869844e46e0fa4564ae91bbc6ab57f5dd7eb713bce351171fbd038399d24de80a177dc7d8e5dee8
6
+ metadata.gz: 32273b702f893078015f99518c2798b3aa30dbd81abc68802ff35765ee489a2a16d0ad5f270c2d824c3d54fd44d4fba48d554486c19683a113f3a9e87f6ce1cd
7
+ data.tar.gz: 0f3c9290832283f5d1ae08865b926e84c7ba34fa8c79ebb01ddad91dad16eb592e54b9e246e432a00d7c2334908180b31cb2d343ce719a75c39b9cb4cf691ce2
@@ -13,6 +13,7 @@ module Kennel
13
13
  REQUEST_DEFAULTS = {
14
14
  style: { line_width: "normal", palette: "dog_classic", line_type: "solid" }
15
15
  }.freeze
16
+ TIMESERIES_DEFAULTS = { show_legend: false, legend_size: "0" }.freeze
16
17
  SUPPORTED_DEFINITION_OPTIONS = [:events, :markers, :precision].freeze
17
18
 
18
19
  settings :title, :description, :definitions, :widgets, :layout_type
@@ -32,39 +33,68 @@ module Kennel
32
33
  def normalize(expected, actual)
33
34
  super
34
35
 
35
- base_pairs(expected, actual).each do |pair|
36
+ widgets_pairs(expected, actual).each do |pair|
36
37
  # datadog always adds 2 to slo widget height
37
38
  # need to check fir layout since some monitors have height/width in their definition
38
- pair.dig(1, :widgets)&.each do |widget|
39
+ pair[1].each do |widget|
39
40
  if widget.dig(:definition, :type) == "slo" && widget.dig(:layout, :height)
40
41
  widget[:layout][:height] -= 2
41
42
  end
42
43
  end
43
44
 
44
45
  # conditional_formats ordering is randomly changed by datadog, compare a stable ordering
45
- pair.each do |b|
46
- b[:widgets]&.each do |w|
47
- if formats = w.dig(:definition, :conditional_formats)
48
- w[:definition][:conditional_formats] = formats.sort_by(&:hash)
46
+ pair.each do |widgets|
47
+ widgets.each do |widget|
48
+ if formats = widget.dig(:definition, :conditional_formats)
49
+ widget[:definition][:conditional_formats] = formats.sort_by(&:hash)
49
50
  end
50
51
  end
51
52
  end
52
53
 
53
- ignore_request_defaults(*pair, :widgets, :definition)
54
- pair.each { |dash| dash[:widgets]&.each { |w| w.delete(:id) } }
54
+ ignore_definition_defaults_for_type pair, "timeseries", TIMESERIES_DEFAULTS
55
+
56
+ ignore_request_defaults(*pair)
57
+
58
+ # ids are kinda random so we always discard them
59
+ pair.each { |widgets| widgets.each { |w| w.delete(:id) } }
55
60
  end
56
61
  end
57
62
 
58
63
  private
59
64
 
65
+ def ignore_definition_defaults_for_type(pair, type, defaults)
66
+ pair.map(&:size).max.times do |i|
67
+ if pair.all? { |w| w.dig(i, :definition, :type) == type }
68
+ ignore_defaults(pair[0], pair[1], defaults, nesting: :definition)
69
+ end
70
+ end
71
+ end
72
+
73
+ # discard styles/conditional_formats/aggregator if nothing would change when we applied (both are default or nil)
74
+ def ignore_request_defaults(expected, actual)
75
+ [expected.size, actual.size].max.times do |i|
76
+ a_r = actual.dig(i, :definition, :requests) || []
77
+ e_r = expected.dig(i, :definition, :requests) || []
78
+ ignore_defaults e_r, a_r, REQUEST_DEFAULTS
79
+ end
80
+ end
81
+
82
+ def ignore_defaults(expected, actual, defaults, nesting: nil)
83
+ [expected.size, actual.size].max.times do |i|
84
+ e = expected.dig(i, *nesting) || {}
85
+ a = actual.dig(i, *nesting) || {}
86
+ ignore_default(e, a, defaults)
87
+ end
88
+ end
89
+
60
90
  # expand nested widgets into expected/actual pairs for default resolution
61
- # [a, e] -> [[a, e], [aw1, ew1], ...]
62
- def base_pairs(*pair)
63
- result = [pair]
64
- slots = pair.map { |d| d[:widgets]&.size }.compact.max.to_i
91
+ # [a, e] -> [[a-w, e-w], [a-w1-w1, e-w1-w1], ...]
92
+ def widgets_pairs(*pair)
93
+ result = [pair.map { |d| d[:widgets] || [] }]
94
+ slots = result.compact.map(&:size).max.to_i
65
95
  slots.times do |i|
66
- nested = pair.map { |d| d.dig(:widgets, i, :definition) || {} }
67
- result << nested if nested.any? { |d| d.key?(:widgets) }
96
+ nested = pair.map { |d| d.dig(:widgets, i, :definition, :widgets) || [] }
97
+ result << nested if nested.any?(&:any?)
68
98
  end
69
99
  result
70
100
  end
@@ -6,11 +6,6 @@ module Kennel
6
6
  READONLY_ATTRIBUTES = [
7
7
  :deleted, :id, :created, :created_at, :creator, :org_id, :modified, :modified_at, :api_resource
8
8
  ].freeze
9
- REQUEST_DEFAULTS = {
10
- style: { width: "normal", palette: "dog_classic", type: "solid" },
11
- conditional_formats: [],
12
- aggregator: "avg"
13
- }.freeze
14
9
  API_LIST_INCOMPLETE = false
15
10
 
16
11
  settings :id, :kennel_id
@@ -22,25 +17,6 @@ module Kennel
22
17
  self::READONLY_ATTRIBUTES.each { |k| actual.delete k }
23
18
  end
24
19
 
25
- # discard styles/conditional_formats/aggregator if nothing would change when we applied (both are default or nil)
26
- def ignore_request_defaults(expected, actual, level1, level2)
27
- actual = actual[level1] || {}
28
- expected = expected[level1] || {}
29
- [expected.size.to_i, actual.size.to_i].max.times do |i|
30
- a_r = actual.dig(i, level2, :requests) || []
31
- e_r = expected.dig(i, level2, :requests) || []
32
- ignore_defaults e_r, a_r, self::REQUEST_DEFAULTS
33
- end
34
- end
35
-
36
- def ignore_defaults(expected, actual, defaults)
37
- [expected&.size.to_i, actual&.size.to_i].max.times do |i|
38
- e = expected[i] || {}
39
- a = actual[i] || {}
40
- ignore_default(e, a, defaults)
41
- end
42
- end
43
-
44
20
  def ignore_default(expected, actual, defaults)
45
21
  definitions = [actual, expected]
46
22
  defaults.each do |key, default|
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.60.1"
3
+ VERSION = "1.61.0"
4
4
  end
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.60.1
4
+ version: 1.61.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: 2019-12-18 00:00:00.000000000 Z
11
+ date: 2019-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday