flapjack-diner 2.0.0.pre.alpha.3 → 2.0.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -10
  3. data/README.md +165 -272
  4. data/flapjack-diner.gemspec +1 -1
  5. data/lib/flapjack-diner.rb +54 -25
  6. data/lib/flapjack-diner/argument_validator.rb +0 -17
  7. data/lib/flapjack-diner/configuration.rb +417 -0
  8. data/lib/flapjack-diner/log_formatter.rb +22 -0
  9. data/lib/flapjack-diner/query.rb +114 -0
  10. data/lib/flapjack-diner/relationships.rb +180 -0
  11. data/lib/flapjack-diner/request.rb +280 -0
  12. data/lib/flapjack-diner/resources.rb +64 -0
  13. data/lib/flapjack-diner/response.rb +91 -0
  14. data/lib/flapjack-diner/tools.rb +46 -456
  15. data/lib/flapjack-diner/utility.rb +16 -0
  16. data/lib/flapjack-diner/version.rb +1 -1
  17. data/spec/flapjack-diner_spec.rb +9 -18
  18. data/spec/{resources/relationships_spec.rb → relationships_spec.rb} +75 -29
  19. data/spec/resources/checks_spec.rb +7 -7
  20. data/spec/resources/contacts_spec.rb +21 -19
  21. data/spec/resources/events_spec.rb +13 -13
  22. data/spec/resources/maintenance_periods_spec.rb +3 -3
  23. data/spec/resources/media_spec.rb +3 -3
  24. data/spec/resources/metrics_spec.rb +1 -1
  25. data/spec/resources/rules_spec.rb +278 -0
  26. data/spec/resources/states_spec.rb +1 -1
  27. data/spec/resources/statistics_spec.rb +1 -1
  28. data/spec/resources/tags_spec.rb +75 -19
  29. data/spec/support/fixture_data.rb +57 -98
  30. metadata +21 -29
  31. data/.rubocop.yml +0 -21
  32. data/.rubocop_todo.yml +0 -135
  33. data/lib/flapjack-diner/resources/acceptors.rb +0 -77
  34. data/lib/flapjack-diner/resources/checks.rb +0 -52
  35. data/lib/flapjack-diner/resources/contacts.rb +0 -54
  36. data/lib/flapjack-diner/resources/events.rb +0 -54
  37. data/lib/flapjack-diner/resources/maintenance_periods.rb +0 -76
  38. data/lib/flapjack-diner/resources/media.rb +0 -75
  39. data/lib/flapjack-diner/resources/metrics.rb +0 -23
  40. data/lib/flapjack-diner/resources/rejectors.rb +0 -77
  41. data/lib/flapjack-diner/resources/relationships.rb +0 -314
  42. data/lib/flapjack-diner/resources/states.rb +0 -24
  43. data/lib/flapjack-diner/resources/statistics.rb +0 -24
  44. data/lib/flapjack-diner/resources/tags.rb +0 -47
  45. data/spec/resources/acceptors_spec.rb +0 -278
  46. data/spec/resources/rejectors_spec.rb +0 -278
@@ -1,75 +0,0 @@
1
- require 'httparty'
2
- require 'json'
3
- require 'uri'
4
-
5
- require 'flapjack-diner/version'
6
- require 'flapjack-diner/argument_validator'
7
-
8
- module Flapjack
9
- module Diner
10
- module Resources
11
- module Media
12
- def create_media(*args)
13
- data = unwrap_data(*args)
14
- validate_params(data) do
15
- validate :query => :id, :as => :uuid
16
- validate :query => :transport, :as => [:non_empty_string, :required]
17
- validate :query => [:address, :pagerduty_subdomain,
18
- :pagerduty_token], :as => :non_empty_string
19
- validate :query => [:interval, :rollup_threshold,
20
- :pagerduty_ack_duration], :as => :positive_integer
21
- validate :query => :contact, :as => [:singular_link_uuid, :required]
22
- validate :query => [:acceptors, :rejectors], :as => :multiple_link_uuid
23
- end
24
- perform_post(:media, "/media", data)
25
- end
26
-
27
- def media(*args)
28
- ids, data = unwrap_uuids(*args), unwrap_data(*args)
29
- validate_params(data) do
30
- validate :query => [:fields, :sort, :include], :as => :string_or_array_of_strings
31
- validate :query => :filter, :as => :hash
32
- validate :query => [:page, :per_page], :as => :positive_integer
33
- end
34
- perform_get('/media', ids, data)
35
- end
36
-
37
- def update_media(*args)
38
- data = unwrap_data(*args)
39
- validate_params(data) do
40
- validate :query => :id, :as => [:uuid, :required]
41
- validate :query => [:address, :pagerduty_subdomain,
42
- :pagerduty_token], :as => :non_empty_string
43
- validate :query => [:interval, :rollup_threshold,
44
- :pagerduty_ack_duration], :as => :positive_integer
45
- validate :query => [:acceptors, :rejectors], :as => :multiple_link_uuid
46
- end
47
- perform_patch(:media, "/media", data)
48
- end
49
-
50
- def delete_media(*ids)
51
- raise "'delete_media' requires at least one medium id " \
52
- 'parameter' if ids.nil? || ids.empty?
53
- perform_delete(:media, '/media', *ids)
54
- end
55
-
56
- private
57
-
58
- def _media_validate_association(data)
59
- case data
60
- when Array
61
- data.each do |d|
62
- unless d.has_key?(:contact)
63
- raise ArgumentError.new("Contact association must be provided for all media")
64
- end
65
- end
66
- when Hash
67
- unless data.has_key?(:contact)
68
- raise ArgumentError.new("Contact association must be provided for medium")
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end
@@ -1,23 +0,0 @@
1
- require 'httparty'
2
- require 'json'
3
- require 'uri'
4
-
5
- require 'flapjack-diner/version'
6
- require 'flapjack-diner/argument_validator'
7
-
8
- module Flapjack
9
- module Diner
10
- module Resources
11
- module Metrics
12
- # singular resource, no id
13
- def metrics(*args)
14
- data = unwrap_data(*args)
15
- validate_params(data) do
16
- validate :query => :fields, :as => :string_or_array_of_strings
17
- end
18
- perform_get('/metrics', [], data)
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,77 +0,0 @@
1
- require 'httparty'
2
- require 'json'
3
- require 'uri'
4
-
5
- require 'flapjack-diner/version'
6
- require 'flapjack-diner/argument_validator'
7
-
8
- module Flapjack
9
- module Diner
10
- module Resources
11
- module Rejectors
12
-
13
- def create_rejectors(*args)
14
- data = unwrap_data(*args)
15
- validate_params(data) do
16
- validate :query => :id, :as => :uuid
17
- validate :query => :name, :as => :string
18
- validate :query => :all, :as => :boolean
19
- validate :query => :conditions_list, :as => :string
20
- # TODO proper validation of time_restrictions field
21
- validate :query => :contact, :as => [:singular_link_uuid, :required]
22
- validate :query => :media, :as => :multiple_link_uuid
23
- validate :query => :tags, :as => :multiple_link
24
- end
25
- _rejectors_validate_association(data)
26
- perform_post(:rejectors, '/rejectors', data)
27
- end
28
-
29
- def rejectors(*args)
30
- ids, data = unwrap_uuids(*args), unwrap_data(*args)
31
- validate_params(data) do
32
- validate :query => [:fields, :sort, :include], :as => :string_or_array_of_strings
33
- validate :query => :filter, :as => :hash
34
- validate :query => [:page, :per_page], :as => :positive_integer
35
- end
36
- perform_get('/rejectors', ids, data)
37
- end
38
-
39
- def update_rejectors(*args)
40
- data = unwrap_data(*args)
41
- validate_params(data) do
42
- validate :query => :id, :as => [:uuid, :required]
43
- validate :query => :name, :as => :string
44
- validate :query => :all, :as => :boolean
45
- validate :query => :conditions_list, :as => :string
46
- # TODO proper validation of time_restrictions field
47
- validate :query => :media, :as => :multiple_link_uuid
48
- validate :query => :tags, :as => :multiple_link
49
- end
50
- perform_patch(:rejectors, "/rejectors", data)
51
- end
52
-
53
- def delete_rejectors(*ids)
54
- raise "'delete_rejectors' requires at least one rejector id parameter" if ids.nil? || ids.empty?
55
- perform_delete(:rejectors, '/rejectors', *ids)
56
- end
57
-
58
- private
59
-
60
- def _rejectors_validate_association(data)
61
- case data
62
- when Array
63
- data.each do |d|
64
- unless d.has_key?(:contact)
65
- raise ArgumentError.new("Contact association must be provided for all rejectors")
66
- end
67
- end
68
- when Hash
69
- unless data.has_key?(:contact)
70
- raise ArgumentError.new("Contact association must be provided for rejector")
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
77
- end
@@ -1,314 +0,0 @@
1
- require 'httparty'
2
- require 'json'
3
- require 'uri'
4
-
5
- require 'flapjack-diner/version'
6
- require 'flapjack-diner/argument_validator'
7
-
8
- module Flapjack
9
- module Diner
10
- module Resources
11
- module Relationships
12
-
13
- TYPES = {
14
- :acceptors => 'acceptor',
15
- :acknowledgements => 'acknowledgement',
16
- :checks => 'check',
17
- :contacts => 'contact',
18
- :media => 'medium',
19
- :rejectors => 'rejector',
20
- :scheduled_maintenances => 'scheduled_maintenance',
21
- :states => 'state',
22
- :tags => 'tag',
23
- :test_notifications => 'test_notification',
24
- :unscheduled_maintenances => 'unscheduled_maintenance'
25
- }
26
-
27
- # FIXME include option for tools.rb/GET should check these config settings for includable
28
-
29
- # extracted from flapjack data models' "jsonapi_associations" class method
30
- ASSOCIATIONS = {
31
- :acceptors => {
32
- :contact => {
33
- :post => true, :get => true,
34
- :number => :singular, :link => true, :includable => true
35
- },
36
- :media => {
37
- :post => true, :get => true, :patch => true, :delete => true,
38
- :number => :multiple, :link => true, :includable => true
39
- },
40
- :tags => {
41
- :post => true, :get => true, :patch => true, :delete => true,
42
- :number => :multiple, :link => true, :includable => true
43
- }
44
- },
45
- :acknowledgements => {
46
- :check => {
47
- :post => true,
48
- :number => :singular, :link => false, :includable => false
49
- },
50
- :tag => {
51
- :post => true,
52
- :number => :singular, :link => false, :includable => false
53
- }
54
- },
55
- :checks => {
56
- :alerting_media => {
57
- :get => true,
58
- :number => :multiple, :link => true, :includable => true
59
- },
60
- :contacts => {
61
- :get => true,
62
- :number => :multiple, :link => true, :includable => true
63
- },
64
- :current_scheduled_maintenances => {
65
- :get => true,
66
- :number => :multiple, :link => true, :includable => true
67
- },
68
- :current_state => {
69
- :get => true,
70
- :number => :singular, :link => true, :includable => true
71
- },
72
- :current_unscheduled_maintenance => {
73
- :get => true,
74
- :number => :singular, :link => true, :includable => true
75
- },
76
- :latest_notifications => {
77
- :get => true,
78
- :number => :multiple, :link => true, :includable => true
79
- },
80
- :scheduled_maintenances => {
81
- :get => true,
82
- :number => :multiple, :link => true, :includable => false
83
- },
84
- :states => {
85
- :get => true,
86
- :number => :multiple, :link => true, :includable => false
87
- },
88
- :tags => {
89
- :post => true, :get => true, :patch => true, :delete => true,
90
- :number => :multiple, :link => true, :includable => true
91
- },
92
- :unscheduled_maintenances => {
93
- :get => true,
94
- :number => :multiple, :link => true, :includable => false
95
- }
96
- },
97
- :contacts => {
98
- :acceptors => {
99
- :get => true,
100
- :number => :multiple, :link => true, :includable => true
101
- },
102
- :checks => {
103
- :get => true,
104
- :number => :multiple, :link => true, :includable => true
105
- },
106
- :media => {
107
- :get => true,
108
- :number => :multiple, :link => true, :includable => true
109
- },
110
- :rejectors => {
111
- :get => :true,
112
- :number => :multiple, :link => true, :includable => true
113
- }
114
- },
115
- :media => {
116
- :acceptors => {
117
- :post => true, :get => true, :patch => true, :delete => true,
118
- :number => :multiple, :link => true, :includable => true
119
- },
120
- :alerting_checks => {
121
- :get => true,
122
- :number => :multiple, :link => true, :includable => true
123
- },
124
- :contact => {
125
- :post => true, :get => true,
126
- :number => :singular, :link => true, :includable => true
127
- },
128
- :rejectors => {
129
- :post => true, :get => true, :patch => true, :delete => true,
130
- :number => :multiple, :link => true, :includable => true
131
- }
132
- },
133
- :rejectors => {
134
- :contact => {
135
- :post => true, :get => true,
136
- :number => :singular, :link => true, :includable => true
137
- },
138
- :media => {
139
- :post => true, :get => true, :patch => true, :delete => true,
140
- :number => :multiple, :link => true, :includable => true
141
- },
142
- :tags => {
143
- :post => true, :get => true, :patch => true, :delete => true,
144
- :number => :multiple, :link => true, :includable => true
145
- }
146
- },
147
- :scheduled_maintenances => {
148
- :check => {
149
- :post => true, :get => true,
150
- :number => :singular, :link => true, :includable => true
151
- },
152
- :tag => {
153
- :post => true,
154
- :number => :singular, :link => false, :includable => false
155
- }
156
- },
157
- :states => {
158
- :check => {
159
- :get => true,
160
- :number => :singular, :link => true, :includable => true
161
- }
162
- },
163
- :tags => {
164
- :acceptors => {
165
- :post => true, :get => true, :patch => true, :delete => true,
166
- :number => :multiple, :link => true, :includable => true
167
- },
168
- :checks => {
169
- :post => true, :get => true, :patch => true, :delete => true,
170
- :number => :multiple, :link => true, :includable => true
171
- },
172
- :rejectors => {
173
- :post => true, :get => true, :patch => true, :delete => true,
174
- :number => :multiple, :link => true, :includable => true
175
- },
176
- :scheduled_maintenances => {
177
- :get => true,
178
- :number => :multiple, :link => true, :includable => false
179
- },
180
- :states => {
181
- :get => true,
182
- :number => :multiple, :link => true, :includable => false
183
- },
184
- :unscheduled_maintenances => {
185
- :get => true,
186
- :number => :multiple, :link => true, :includable => false
187
- }
188
- },
189
- :test_notifications => {
190
- :check => {
191
- :post => true,
192
- :number => :singular, :link => false, :includable => false
193
- },
194
- :tag => {
195
- :post => true,
196
- :number => :singular, :link => false, :includable => false
197
- }
198
- },
199
- :unscheduled_maintenances => {
200
- :check => {
201
- :get => true,
202
- :number => :singular, :link => false, :includable => true
203
- }
204
- }
205
- }
206
-
207
- ASSOCIATIONS.each_pair do |resource, mappings|
208
- res = TYPES[resource]
209
- resource_id_validator = :tags.eql?(resource) ? :string : :uuid
210
-
211
- # NB: no remaining non-GET singular link methods, so these are commented out for now
212
-
213
- # mappings.select {|n, a| a[:post] && a[:link] && :singular.eql?(a[:number]) }.each do |linked, assoc|
214
-
215
- # linked_id_validator = :tag.eql?(linked) ? :singular_link : :singular_link_uuid
216
-
217
- # define_method("create_#{res}_link_#{linked}") do |resource_id, linked_id|
218
- # validate_params(:resource_id => resource_id, :linked_id => linked_id) do
219
- # validate :query => :resource_id, :as => resource_id_validator
220
- # validate :query => :linked_id, :as => linked_id_validator
221
- # end
222
- # perform_post_links(linked,
223
- # "/#{resource}/#{resource_id}/relationships/#{linked}", linked_id)
224
- # end
225
- # end
226
-
227
- mappings.select {|n, a| a[:post] && a[:link] && :multiple.eql?(a[:number]) }.each do |linked, assoc|
228
- type = TYPES[linked] || linked
229
- linked_ids_validator = :tags.eql?(linked) ? :multiple_link : :multiple_link_uuid
230
-
231
- define_method("create_#{res}_link_#{linked}") do |resource_id, *linked_ids|
232
- validate_params(:resource_id => resource_id, :linked_ids => linked_ids) do
233
- validate :query => :resource_id, :as => resource_id_validator
234
- validate :query => :linked_ids, :as => linked_ids_validator
235
- end
236
- perform_post_links(type,
237
- "/#{resource}/#{resource_id}/relationships/#{linked}", *linked_ids)
238
- end
239
- end
240
-
241
- mappings.select {|n, a| a[:get] && a[:link] }.each do |linked, assoc|
242
- define_method("#{res}_link_#{linked}") do |resource_id, opts = {}|
243
- validate_params(:resource_id => resource_id) do
244
- validate :query => :resource_id, :as => resource_id_validator
245
- end
246
- validate_params(opts) do
247
- validate :query => [:fields, :sort, :include], :as => :string_or_array_of_strings
248
- validate :query => :filter, :as => :hash
249
- validate :query => [:page, :per_page], :as => :positive_integer
250
- end
251
- perform_get("/#{resource}/#{resource_id}/#{linked}", [], opts, {:assoc => linked})
252
- end
253
- end
254
-
255
- # mappings.select {|n, a| a[:patch] && a[:link] && :singular.eql?(a[:number]) }.each do |linked, assoc|
256
- # linked_id_validator = :tag.eql?(linked) ? :singular_link : :singular_link_uuid
257
-
258
- # define_method("update_#{res}_link_#{linked}") do |resource_id, linked_id|
259
- # validate_params(:resource_id => resource_id, :linked_id => linked_id) do
260
- # validate :query => :resource_id, :as => resource_id_validator
261
- # validate :query => :linked_id, :as => linked_id_validator
262
- # end
263
- # perform_patch_links(linked,
264
- # "/#{resource}/#{resource_id}/relationships/#{linked}", true, linked_id)
265
- # end
266
- # end
267
-
268
- mappings.select {|n, a| a[:patch] && a[:link] && :multiple.eql?(a[:number]) }.each do |linked, assoc|
269
- type = TYPES[linked] || linked
270
- linked_ids_validator = :tags.eql?(linked) ? :multiple_link : :multiple_link_uuid
271
-
272
- define_method("update_#{res}_link_#{linked}") do |resource_id, *linked_ids|
273
- validate_params(:resource_id => resource_id, :linked_ids => linked_ids) do
274
- validate :query => :resource_id, :as => resource_id_validator
275
- validate :query => :linked_id, :as => linked_ids_validator
276
- end
277
- perform_patch_links(type,
278
- "/#{resource}/#{resource_id}/relationships/#{linked}", false, *linked_ids)
279
- end
280
- end
281
-
282
- # mappings.select {|n, a| a[:delete] && a[:link] && :singular.eql?(a[:number]) }.each do |linked, assoc|
283
- # linked_id_validator = :tag.eql?(linked) ? :singular_link : :singular_link_uuid
284
-
285
- # define_method("delete_#{res}_link_#{linked}") do |resource_id, linked_id|
286
- # validate_params(:resource_id => resource_id, :linked_id => linked_id) do
287
- # validate :query => :resource_id, :as => resource_id_validator
288
- # validate :query => :linked_id, :as => linked_id_validator
289
- # end
290
- # perform_delete_links(linked,
291
- # "/#{resource}/#{resource_id}/relationships/#{linked}", linked_id)
292
- # end
293
- # end
294
-
295
- mappings.select {|n, a| a[:delete] && a[:link] && :multiple.eql?(a[:number]) }.each do |linked, assoc|
296
- type = TYPES[linked] || linked
297
- linked_ids_validator = :tags.eql?(linked) ? :string_or_array_of_strings : :uuid_or_array_of_uuids
298
-
299
- define_method("delete_#{res}_link_#{linked}") do |resource_id, *linked_ids|
300
- validate_params(:resource_id => resource_id, :linked_ids => linked_ids) do
301
- validate :query => :resource_id, :as => resource_id_validator
302
- validate :query => :linked_ids, :as => linked_ids_validator
303
- end
304
- perform_delete_links(type,
305
- "/#{resource}/#{resource_id}/relationships/#{linked}", *linked_ids)
306
- end
307
- end
308
- end
309
-
310
- end
311
-
312
- end
313
- end
314
- end