kennel 0.1.1 → 0.2.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
  SHA1:
3
- metadata.gz: 7a46c529568d7f43abd6c28850b16c3381312d24
4
- data.tar.gz: 456543b1003278e2fffb86d06c8e6c6d8f5b8022
3
+ metadata.gz: c70c6bd2ed964a4e6abd06968705de5897bdcff5
4
+ data.tar.gz: a8a3823e0c36250246a806a26579b0e1e1f1417f
5
5
  SHA512:
6
- metadata.gz: ad3248c48a078469a0b750f90cd4d6ab04de6f63d6c70061fe4232c40682d958b6a1b7099e0494d3b6dd6b5a96eb3180d65104fa113887cc8f5b649d38424184
7
- data.tar.gz: d1909afe6d889fed5ba51f77e888cc36346ca29febd31ed301e4f904e07f970e09748046da7a55b19bbbfd9b310c0742e4df8068b49d627d418a162c408ae069
6
+ metadata.gz: c736eb69dec71e163a8f0e7a9bc532a93f8600984d3c56ca20c0b58e81e1d9363ff26fb4276a802d2cbec49a0d7d1ed46da17c72c4a7e53f27599235626dc148
7
+ data.tar.gz: 4f6566b111f19f0de2244a28ff319fd438dc436e1fba4a532dffba2e6c559c00dee6c06f3235d979c9d332d02a32b9bf7794340512195c993bd4e8f2effd1d1d
@@ -10,10 +10,16 @@ require "kennel/api"
10
10
  require "kennel/github_reporter"
11
11
  require "kennel/subclass_tracking"
12
12
  require "kennel/file_cache"
13
+ require "kennel/template_variables"
13
14
 
14
15
  require "kennel/models/base"
16
+
17
+ # parts
15
18
  require "kennel/models/monitor"
16
19
  require "kennel/models/dash"
20
+ require "kennel/models/screen"
21
+
22
+ # settings
17
23
  require "kennel/models/project"
18
24
  require "kennel/models/team"
19
25
 
@@ -2,7 +2,10 @@
2
2
  module Kennel
3
3
  module Models
4
4
  class Dash < Base
5
- settings :id, :title, :description, :graphs, :kennel_id, :graphs, :definitions, :template_variables
5
+ include TemplateVariables
6
+
7
+ API_LIST_INCOMPLETE = true
8
+ settings :id, :title, :description, :graphs, :kennel_id, :graphs, :definitions
6
9
 
7
10
  defaults(
8
11
  id: -> { nil },
@@ -2,6 +2,7 @@
2
2
  module Kennel
3
3
  module Models
4
4
  class Monitor < Base
5
+ API_LIST_INCOMPLETE = false
5
6
  RENOTIFY_INTERVALS = [0, 10, 20, 30, 40, 50, 60, 90, 120, 180, 240, 300, 360, 720, 1440].freeze # minutes
6
7
  QUERY_INTERVALS = ["1m", "5m", "10m", "15m", "30m", "1h", "2h", "4h", "24h"].freeze
7
8
  METRIC_TYPES = ["query alert", "metric alert"].freeze
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+ module Kennel
3
+ module Models
4
+ class Screen < Base
5
+ include TemplateVariables
6
+
7
+ API_LIST_INCOMPLETE = true
8
+
9
+ settings :id, :board_title, :description, :widgets, :kennel_id
10
+
11
+ defaults(
12
+ description: -> { "" },
13
+ widgets: -> { [] },
14
+ id: -> { nil }
15
+ )
16
+
17
+ attr_reader :project
18
+
19
+ def initialize(project, *args)
20
+ @project = project
21
+ super(*args)
22
+ end
23
+
24
+ def self.api_resource
25
+ "screen"
26
+ end
27
+
28
+ def as_json
29
+ return @json if @json
30
+ @json = {
31
+ id: id,
32
+ board_title: "#{board_title}#{LOCK}",
33
+ description: description,
34
+ widgets: render_widgets,
35
+ template_variables: render_template_variables
36
+ }
37
+ @json
38
+ end
39
+
40
+ def diff(actual)
41
+ actual.delete(:disableCog)
42
+ actual.delete(:disableEditing)
43
+ actual.delete(:isIntegration)
44
+ actual.delete(:isShared)
45
+ actual.delete(:original_title)
46
+ actual.delete(:read_only)
47
+ actual.delete(:resource)
48
+ actual.delete(:title)
49
+ actual.delete(:title_edited)
50
+ actual.delete(:created_by)
51
+ actual.delete(:board_bgtype)
52
+ actual.delete(:height)
53
+ actual.delete(:width)
54
+ actual[:template_variables] ||= []
55
+ actual[:widgets].each { |w| w.delete :board_id }
56
+ super
57
+ end
58
+
59
+ def url(id)
60
+ Utils.path_to_url "/screen/#{id}"
61
+ end
62
+
63
+ private
64
+
65
+ def render_widgets
66
+ widgets.map do |widget|
67
+ widget = widget_defaults(widget[:type]).merge(widget)
68
+ if tile = widget[:tile_def]
69
+ tile[:requests].each { |r| r[:conditional_formats] ||= [] }
70
+ tile[:autoscale] = true unless widget[:tile_def].key?(:autoscale)
71
+ end
72
+ widget
73
+ end
74
+ end
75
+
76
+ def widget_defaults(type)
77
+ basics = {
78
+ title_size: 16,
79
+ title_align: "left",
80
+ height: 20,
81
+ width: 30
82
+ }
83
+
84
+ custom =
85
+ case type
86
+ when "free_text"
87
+ {
88
+ font_size: "auto",
89
+ text_align: "left",
90
+ title_text: "",
91
+ title: true,
92
+ color: "#4d4d4d"
93
+ }
94
+ when "timeseries"
95
+ {
96
+ title: true,
97
+ legend: false,
98
+ legend_size: "0",
99
+ timeframe: "1h"
100
+ }
101
+ else
102
+ {}
103
+ end
104
+
105
+ basics.merge(custom)
106
+ end
107
+ end
108
+ end
109
+ end
@@ -62,7 +62,7 @@ module Kennel
62
62
  id = a.fetch(:id)
63
63
 
64
64
  if e = delete_matching_expected(a)
65
- fill_details(a, cache) if a[:api_resource] == "dash"
65
+ fill_details(a, cache) if e.class::API_LIST_INCOMPLETE
66
66
  if diff = e.diff(a)
67
67
  @update << [id, e, a, diff]
68
68
  end
@@ -81,7 +81,8 @@ module Kennel
81
81
  def fill_details(a, cache)
82
82
  args = [a.fetch(:api_resource), a.fetch(:id)]
83
83
  full = cache.fetch(args, a.fetch(:modified)) do
84
- @api.show(*args).fetch(a.fetch(:api_resource).to_sym)
84
+ result = @api.show(*args)
85
+ result[a.fetch(:api_resource).to_sym] || result # dashes are nested, others are not
85
86
  end
86
87
  a.merge!(full)
87
88
  end
@@ -98,15 +99,15 @@ module Kennel
98
99
  m.api_resource
99
100
  end
100
101
 
101
- api_resources.compact.uniq.flat_map do |api_resource|
102
+ Utils.parallel(api_resources.compact.uniq) do |api_resource|
102
103
  # lookup monitors without adding unnecessary downtime information
103
104
  results = @api.list(api_resource, with_downtimes: false)
104
- if results.is_a?(Hash) # dashes
105
- results = results.fetch("#{api_resource}es".to_sym) # dash reply is returned under dashes
105
+ if results.is_a?(Hash)
106
+ results = results[results.keys.first]
106
107
  results.each { |r| r[:id] = Integer(r.fetch(:id)) }
107
108
  end
108
109
  results.each { |c| c[:api_resource] = api_resource }
109
- end
110
+ end.flatten(1)
110
111
  end
111
112
 
112
113
  def ensure_all_ids_found
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  namespace :kennel do
2
3
  desc "Ensure there are no uncommited changes that would be hidden from PR reviewers"
3
4
  task no_diff: :generate do
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module Kennel
3
+ module TemplateVariables
4
+ def self.included(base)
5
+ base.settings :template_variables
6
+ base.defaults(template_variables: -> { [] })
7
+ end
8
+
9
+ private
10
+
11
+ def render_template_variables
12
+ template_variables.map do |v|
13
+ v.is_a?(String) ? { default: "*", prefix: v, name: v } : v
14
+ end
15
+ end
16
+ end
17
+ end
@@ -53,6 +53,18 @@ module Kennel
53
53
  path
54
54
  end
55
55
  end
56
+
57
+ def parallel(items)
58
+ items.map do |item|
59
+ Thread.new do
60
+ begin
61
+ yield item
62
+ rescue StandardError => e
63
+ e
64
+ end
65
+ end
66
+ end.map(&:value).each { |i| raise i if i.is_a?(StandardError) }
67
+ end
56
68
  end
57
69
  end
58
70
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.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: 0.1.1
4
+ version: 0.2.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: 2017-12-09 00:00:00.000000000 Z
11
+ date: 2017-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -52,11 +52,13 @@ files:
52
52
  - lib/kennel/models/dash.rb
53
53
  - lib/kennel/models/monitor.rb
54
54
  - lib/kennel/models/project.rb
55
+ - lib/kennel/models/screen.rb
55
56
  - lib/kennel/models/team.rb
56
57
  - lib/kennel/progress.rb
57
58
  - lib/kennel/subclass_tracking.rb
58
59
  - lib/kennel/syncer.rb
59
60
  - lib/kennel/tasks.rb
61
+ - lib/kennel/template_variables.rb
60
62
  - lib/kennel/utils.rb
61
63
  - lib/kennel/version.rb
62
64
  homepage: https://github.com/grosser/kennel