flapjack 1.6.0 → 2.0.0b1

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 (301) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -6
  3. data/.gitmodules +1 -1
  4. data/.rspec +1 -1
  5. data/.ruby-version +1 -1
  6. data/.travis.yml +12 -13
  7. data/CHANGELOG.md +2 -9
  8. data/CONTRIBUTING.md +7 -2
  9. data/Gemfile +4 -13
  10. data/LICENCE +1 -0
  11. data/README.md +8 -2
  12. data/Rakefile +2 -2
  13. data/bin/flapjack +3 -12
  14. data/build.sh +4 -2
  15. data/etc/flapjack_config.toml.example +273 -0
  16. data/features/ack_after_sched_maint.feature +18 -21
  17. data/features/cli.feature +11 -71
  18. data/features/cli_flapjack-feed-events.feature +14 -15
  19. data/features/cli_flapjack-nagios-receiver.feature +12 -41
  20. data/features/cli_flapper.feature +12 -41
  21. data/features/cli_purge.feature +5 -6
  22. data/features/cli_receive-events.feature +6 -7
  23. data/features/cli_simulate-failed-check.feature +5 -6
  24. data/features/events.feature +206 -181
  25. data/features/events_check_names.feature +4 -7
  26. data/features/notification_rules.feature +144 -223
  27. data/features/notifications.feature +65 -57
  28. data/features/rollup.feature +45 -47
  29. data/features/steps/cli_steps.rb +4 -5
  30. data/features/steps/events_steps.rb +163 -373
  31. data/features/steps/notifications_steps.rb +408 -264
  32. data/features/steps/packaging-lintian_steps.rb +0 -4
  33. data/features/steps/time_travel_steps.rb +0 -26
  34. data/features/support/daemons.rb +6 -31
  35. data/features/support/env.rb +65 -74
  36. data/flapjack.gemspec +22 -24
  37. data/lib/flapjack.rb +14 -7
  38. data/lib/flapjack/cli/flapper.rb +74 -173
  39. data/lib/flapjack/cli/maintenance.rb +278 -109
  40. data/lib/flapjack/cli/migrate.rb +950 -0
  41. data/lib/flapjack/cli/purge.rb +19 -22
  42. data/lib/flapjack/cli/receiver.rb +150 -326
  43. data/lib/flapjack/cli/server.rb +8 -235
  44. data/lib/flapjack/cli/simulate.rb +42 -57
  45. data/lib/flapjack/configuration.rb +51 -37
  46. data/lib/flapjack/coordinator.rb +138 -129
  47. data/lib/flapjack/data/acknowledgement.rb +177 -0
  48. data/lib/flapjack/data/alert.rb +97 -158
  49. data/lib/flapjack/data/check.rb +611 -0
  50. data/lib/flapjack/data/condition.rb +70 -0
  51. data/lib/flapjack/data/contact.rb +226 -456
  52. data/lib/flapjack/data/event.rb +96 -184
  53. data/lib/flapjack/data/extensions/associations.rb +59 -0
  54. data/lib/flapjack/data/extensions/short_name.rb +25 -0
  55. data/lib/flapjack/data/medium.rb +428 -0
  56. data/lib/flapjack/data/metrics.rb +194 -0
  57. data/lib/flapjack/data/notification.rb +22 -281
  58. data/lib/flapjack/data/rule.rb +473 -0
  59. data/lib/flapjack/data/scheduled_maintenance.rb +244 -0
  60. data/lib/flapjack/data/state.rb +221 -0
  61. data/lib/flapjack/data/statistic.rb +112 -0
  62. data/lib/flapjack/data/tag.rb +277 -0
  63. data/lib/flapjack/data/test_notification.rb +182 -0
  64. data/lib/flapjack/data/unscheduled_maintenance.rb +159 -0
  65. data/lib/flapjack/data/validators/id_validator.rb +20 -0
  66. data/lib/flapjack/exceptions.rb +6 -0
  67. data/lib/flapjack/filters/acknowledgement.rb +23 -16
  68. data/lib/flapjack/filters/base.rb +0 -5
  69. data/lib/flapjack/filters/delays.rb +53 -43
  70. data/lib/flapjack/filters/ok.rb +23 -14
  71. data/lib/flapjack/filters/scheduled_maintenance.rb +3 -3
  72. data/lib/flapjack/filters/unscheduled_maintenance.rb +12 -3
  73. data/lib/flapjack/gateways/aws_sns.rb +65 -49
  74. data/lib/flapjack/gateways/aws_sns/alert.text.erb +2 -2
  75. data/lib/flapjack/gateways/aws_sns/alert_subject.text.erb +2 -2
  76. data/lib/flapjack/gateways/aws_sns/rollup_subject.text.erb +1 -1
  77. data/lib/flapjack/gateways/email.rb +107 -90
  78. data/lib/flapjack/gateways/email/alert.html.erb +19 -18
  79. data/lib/flapjack/gateways/email/alert.text.erb +20 -14
  80. data/lib/flapjack/gateways/email/alert_subject.text.erb +2 -1
  81. data/lib/flapjack/gateways/email/rollup.html.erb +14 -13
  82. data/lib/flapjack/gateways/email/rollup.text.erb +13 -10
  83. data/lib/flapjack/gateways/jabber.rb +679 -671
  84. data/lib/flapjack/gateways/jabber/alert.text.erb +9 -6
  85. data/lib/flapjack/gateways/jsonapi.rb +164 -350
  86. data/lib/flapjack/gateways/jsonapi/data/join_descriptor.rb +44 -0
  87. data/lib/flapjack/gateways/jsonapi/data/method_descriptor.rb +21 -0
  88. data/lib/flapjack/gateways/jsonapi/helpers/headers.rb +63 -0
  89. data/lib/flapjack/gateways/jsonapi/helpers/miscellaneous.rb +136 -0
  90. data/lib/flapjack/gateways/jsonapi/helpers/resources.rb +227 -0
  91. data/lib/flapjack/gateways/jsonapi/helpers/serialiser.rb +313 -0
  92. data/lib/flapjack/gateways/jsonapi/helpers/swagger_docs.rb +322 -0
  93. data/lib/flapjack/gateways/jsonapi/methods/association_delete.rb +115 -0
  94. data/lib/flapjack/gateways/jsonapi/methods/association_get.rb +288 -0
  95. data/lib/flapjack/gateways/jsonapi/methods/association_patch.rb +178 -0
  96. data/lib/flapjack/gateways/jsonapi/methods/association_post.rb +116 -0
  97. data/lib/flapjack/gateways/jsonapi/methods/metrics.rb +71 -0
  98. data/lib/flapjack/gateways/jsonapi/methods/resource_delete.rb +119 -0
  99. data/lib/flapjack/gateways/jsonapi/methods/resource_get.rb +186 -0
  100. data/lib/flapjack/gateways/jsonapi/methods/resource_patch.rb +239 -0
  101. data/lib/flapjack/gateways/jsonapi/methods/resource_post.rb +197 -0
  102. data/lib/flapjack/gateways/jsonapi/middleware/array_param_fixer.rb +27 -0
  103. data/lib/flapjack/gateways/jsonapi/{rack → middleware}/json_params_parser.rb +7 -6
  104. data/lib/flapjack/gateways/jsonapi/middleware/request_timestamp.rb +18 -0
  105. data/lib/flapjack/gateways/oobetet.rb +222 -170
  106. data/lib/flapjack/gateways/pager_duty.rb +388 -0
  107. data/lib/flapjack/gateways/pager_duty/alert.text.erb +13 -0
  108. data/lib/flapjack/gateways/slack.rb +56 -48
  109. data/lib/flapjack/gateways/slack/alert.text.erb +1 -1
  110. data/lib/flapjack/gateways/slack/rollup.text.erb +1 -1
  111. data/lib/flapjack/gateways/sms_aspsms.rb +155 -0
  112. data/lib/flapjack/gateways/sms_aspsms/alert.text.erb +7 -0
  113. data/lib/flapjack/gateways/sms_aspsms/rollup.text.erb +2 -0
  114. data/lib/flapjack/gateways/sms_messagenet.rb +77 -57
  115. data/lib/flapjack/gateways/sms_messagenet/alert.text.erb +3 -2
  116. data/lib/flapjack/gateways/sms_nexmo.rb +53 -51
  117. data/lib/flapjack/gateways/sms_nexmo/alert.text.erb +2 -2
  118. data/lib/flapjack/gateways/sms_nexmo/rollup.text.erb +1 -1
  119. data/lib/flapjack/gateways/sms_twilio.rb +79 -62
  120. data/lib/flapjack/gateways/sms_twilio/alert.text.erb +3 -2
  121. data/lib/flapjack/gateways/web.rb +437 -345
  122. data/lib/flapjack/gateways/web/middleware/request_timestamp.rb +18 -0
  123. data/lib/flapjack/gateways/web/public/css/bootstrap.css +3793 -4340
  124. data/lib/flapjack/gateways/web/public/css/bootstrap.css.map +1 -0
  125. data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.eot +0 -0
  126. data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.svg +273 -214
  127. data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  128. data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.woff +0 -0
  129. data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
  130. data/lib/flapjack/gateways/web/public/js/bootstrap.js +1637 -1607
  131. data/lib/flapjack/gateways/web/public/js/self_stats.js +1 -2
  132. data/lib/flapjack/gateways/web/views/_pagination.html.erb +19 -0
  133. data/lib/flapjack/gateways/web/views/check.html.erb +159 -121
  134. data/lib/flapjack/gateways/web/views/checks.html.erb +82 -41
  135. data/lib/flapjack/gateways/web/views/contact.html.erb +59 -71
  136. data/lib/flapjack/gateways/web/views/contacts.html.erb +32 -8
  137. data/lib/flapjack/gateways/web/views/index.html.erb +2 -2
  138. data/lib/flapjack/gateways/web/views/{layout.erb → layout.html.erb} +7 -23
  139. data/lib/flapjack/gateways/web/views/self_stats.html.erb +32 -33
  140. data/lib/flapjack/gateways/web/views/tag.html.erb +32 -0
  141. data/lib/flapjack/gateways/web/views/tags.html.erb +51 -0
  142. data/lib/flapjack/logger.rb +34 -3
  143. data/lib/flapjack/notifier.rb +180 -112
  144. data/lib/flapjack/patches.rb +8 -63
  145. data/lib/flapjack/pikelet.rb +185 -143
  146. data/lib/flapjack/processor.rb +323 -191
  147. data/lib/flapjack/record_queue.rb +33 -0
  148. data/lib/flapjack/redis_proxy.rb +66 -0
  149. data/lib/flapjack/utility.rb +21 -15
  150. data/lib/flapjack/version.rb +2 -1
  151. data/libexec/httpbroker.go +218 -14
  152. data/libexec/oneoff.go +13 -10
  153. data/spec/lib/flapjack/configuration_spec.rb +286 -0
  154. data/spec/lib/flapjack/coordinator_spec.rb +103 -157
  155. data/spec/lib/flapjack/data/check_spec.rb +175 -0
  156. data/spec/lib/flapjack/data/contact_spec.rb +26 -349
  157. data/spec/lib/flapjack/data/event_spec.rb +76 -291
  158. data/spec/lib/flapjack/data/medium_spec.rb +19 -0
  159. data/spec/lib/flapjack/data/rule_spec.rb +43 -0
  160. data/spec/lib/flapjack/data/scheduled_maintenance_spec.rb +976 -0
  161. data/spec/lib/flapjack/data/unscheduled_maintenance_spec.rb +34 -0
  162. data/spec/lib/flapjack/gateways/aws_sns_spec.rb +111 -60
  163. data/spec/lib/flapjack/gateways/email_spec.rb +194 -161
  164. data/spec/lib/flapjack/gateways/jabber_spec.rb +961 -162
  165. data/spec/lib/flapjack/gateways/jsonapi/methods/check_links_spec.rb +155 -0
  166. data/spec/lib/flapjack/gateways/jsonapi/methods/checks_spec.rb +426 -0
  167. data/spec/lib/flapjack/gateways/jsonapi/methods/contact_links_spec.rb +217 -0
  168. data/spec/lib/flapjack/gateways/jsonapi/methods/contacts_spec.rb +425 -0
  169. data/spec/lib/flapjack/gateways/jsonapi/methods/events_spec.rb +271 -0
  170. data/spec/lib/flapjack/gateways/jsonapi/methods/media_spec.rb +257 -0
  171. data/spec/lib/flapjack/gateways/jsonapi/methods/medium_links_spec.rb +163 -0
  172. data/spec/lib/flapjack/gateways/jsonapi/methods/metrics_spec.rb +8 -0
  173. data/spec/lib/flapjack/gateways/jsonapi/methods/rule_links_spec.rb +212 -0
  174. data/spec/lib/flapjack/gateways/jsonapi/methods/rules_spec.rb +289 -0
  175. data/spec/lib/flapjack/gateways/jsonapi/methods/scheduled_maintenance_links_spec.rb +49 -0
  176. data/spec/lib/flapjack/gateways/jsonapi/methods/scheduled_maintenances_spec.rb +242 -0
  177. data/spec/lib/flapjack/gateways/jsonapi/methods/tag_links_spec.rb +274 -0
  178. data/spec/lib/flapjack/gateways/jsonapi/methods/tags_spec.rb +302 -0
  179. data/spec/lib/flapjack/gateways/jsonapi/methods/unscheduled_maintenance_links_spec.rb +49 -0
  180. data/spec/lib/flapjack/gateways/jsonapi/methods/unscheduled_maintenances_spec.rb +339 -0
  181. data/spec/lib/flapjack/gateways/jsonapi_spec.rb +1 -1
  182. data/spec/lib/flapjack/gateways/oobetet_spec.rb +151 -79
  183. data/spec/lib/flapjack/gateways/pager_duty_spec.rb +353 -0
  184. data/spec/lib/flapjack/gateways/slack_spec.rb +53 -53
  185. data/spec/lib/flapjack/gateways/sms_aspsms_spec.rb +106 -0
  186. data/spec/lib/flapjack/gateways/sms_messagenet_spec.rb +111 -54
  187. data/spec/lib/flapjack/gateways/sms_nexmo_spec.rb +50 -51
  188. data/spec/lib/flapjack/gateways/sms_twilio_spec.rb +108 -48
  189. data/spec/lib/flapjack/gateways/web_spec.rb +144 -216
  190. data/spec/lib/flapjack/notifier_spec.rb +132 -1
  191. data/spec/lib/flapjack/pikelet_spec.rb +111 -50
  192. data/spec/lib/flapjack/processor_spec.rb +210 -40
  193. data/spec/lib/flapjack/redis_proxy_spec.rb +45 -0
  194. data/spec/lib/flapjack/utility_spec.rb +11 -15
  195. data/spec/service_consumers/fixture_data.rb +547 -0
  196. data/spec/service_consumers/pact_helper.rb +21 -32
  197. data/spec/service_consumers/pacts/flapjack-diner_v2.0.json +4652 -0
  198. data/spec/service_consumers/provider_states_for_flapjack-diner.rb +279 -322
  199. data/spec/service_consumers/provider_support.rb +8 -0
  200. data/spec/spec_helper.rb +34 -44
  201. data/spec/support/erb_view_helper.rb +1 -1
  202. data/spec/support/factories.rb +58 -0
  203. data/spec/support/jsonapi_helper.rb +15 -26
  204. data/spec/support/mock_logger.rb +43 -0
  205. data/spec/support/xmpp_comparable.rb +24 -0
  206. data/src/flapjack/transport_test.go +30 -1
  207. data/tasks/dump_keys.rake +82 -0
  208. data/tasks/events.rake +7 -7
  209. data/tasks/support/flapjack_config_benchmark.toml +28 -0
  210. data/tasks/support/flapjack_config_benchmark.yaml +0 -2
  211. metadata +175 -222
  212. data/Guardfile +0 -14
  213. data/etc/flapjack_config.yaml.example +0 -477
  214. data/features/cli_flapjack-populator.feature +0 -90
  215. data/features/support/silent_system.rb +0 -4
  216. data/lib/flapjack/cli/import.rb +0 -108
  217. data/lib/flapjack/data/entity.rb +0 -652
  218. data/lib/flapjack/data/entity_check.rb +0 -1044
  219. data/lib/flapjack/data/message.rb +0 -56
  220. data/lib/flapjack/data/migration.rb +0 -234
  221. data/lib/flapjack/data/notification_rule.rb +0 -425
  222. data/lib/flapjack/data/semaphore.rb +0 -44
  223. data/lib/flapjack/data/tagged.rb +0 -48
  224. data/lib/flapjack/gateways/jsonapi/check_methods.rb +0 -206
  225. data/lib/flapjack/gateways/jsonapi/check_presenter.rb +0 -221
  226. data/lib/flapjack/gateways/jsonapi/contact_methods.rb +0 -186
  227. data/lib/flapjack/gateways/jsonapi/entity_methods.rb +0 -223
  228. data/lib/flapjack/gateways/jsonapi/medium_methods.rb +0 -185
  229. data/lib/flapjack/gateways/jsonapi/metrics_methods.rb +0 -132
  230. data/lib/flapjack/gateways/jsonapi/notification_rule_methods.rb +0 -141
  231. data/lib/flapjack/gateways/jsonapi/pagerduty_credential_methods.rb +0 -139
  232. data/lib/flapjack/gateways/jsonapi/report_methods.rb +0 -146
  233. data/lib/flapjack/gateways/pagerduty.rb +0 -318
  234. data/lib/flapjack/gateways/pagerduty/alert.text.erb +0 -10
  235. data/lib/flapjack/gateways/web/public/css/select2-bootstrap.css +0 -87
  236. data/lib/flapjack/gateways/web/public/css/select2.css +0 -615
  237. data/lib/flapjack/gateways/web/public/css/tablesort.css +0 -67
  238. data/lib/flapjack/gateways/web/public/img/select2-spinner.gif +0 -0
  239. data/lib/flapjack/gateways/web/public/img/select2.png +0 -0
  240. data/lib/flapjack/gateways/web/public/img/select2x2.png +0 -0
  241. data/lib/flapjack/gateways/web/public/js/backbone.js +0 -1581
  242. data/lib/flapjack/gateways/web/public/js/backbone.jsonapi.js +0 -322
  243. data/lib/flapjack/gateways/web/public/js/flapjack.js +0 -82
  244. data/lib/flapjack/gateways/web/public/js/jquery.tablesorter.js +0 -1640
  245. data/lib/flapjack/gateways/web/public/js/jquery.tablesorter.widgets.js +0 -1390
  246. data/lib/flapjack/gateways/web/public/js/modules/contact.js +0 -520
  247. data/lib/flapjack/gateways/web/public/js/modules/entity.js +0 -28
  248. data/lib/flapjack/gateways/web/public/js/modules/medium.js +0 -40
  249. data/lib/flapjack/gateways/web/public/js/select2.js +0 -3397
  250. data/lib/flapjack/gateways/web/public/js/tablesort.js +0 -44
  251. data/lib/flapjack/gateways/web/public/js/underscore.js +0 -1276
  252. data/lib/flapjack/gateways/web/views/edit_contacts.html.erb +0 -173
  253. data/lib/flapjack/gateways/web/views/entities.html.erb +0 -30
  254. data/lib/flapjack/gateways/web/views/entity.html.erb +0 -51
  255. data/lib/flapjack/rack_logger.rb +0 -47
  256. data/lib/flapjack/redis_pool.rb +0 -42
  257. data/spec/lib/flapjack/data/entity_check_spec.rb +0 -1418
  258. data/spec/lib/flapjack/data/entity_spec.rb +0 -872
  259. data/spec/lib/flapjack/data/message_spec.rb +0 -30
  260. data/spec/lib/flapjack/data/migration_spec.rb +0 -104
  261. data/spec/lib/flapjack/data/notification_rule_spec.rb +0 -232
  262. data/spec/lib/flapjack/data/notification_spec.rb +0 -53
  263. data/spec/lib/flapjack/data/semaphore_spec.rb +0 -24
  264. data/spec/lib/flapjack/filters/acknowledgement_spec.rb +0 -6
  265. data/spec/lib/flapjack/filters/delays_spec.rb +0 -6
  266. data/spec/lib/flapjack/filters/ok_spec.rb +0 -6
  267. data/spec/lib/flapjack/filters/scheduled_maintenance_spec.rb +0 -6
  268. data/spec/lib/flapjack/filters/unscheduled_maintenance_spec.rb +0 -6
  269. data/spec/lib/flapjack/gateways/jsonapi/check_methods_spec.rb +0 -315
  270. data/spec/lib/flapjack/gateways/jsonapi/check_presenter_spec.rb +0 -223
  271. data/spec/lib/flapjack/gateways/jsonapi/contact_methods_spec.rb +0 -131
  272. data/spec/lib/flapjack/gateways/jsonapi/entity_methods_spec.rb +0 -389
  273. data/spec/lib/flapjack/gateways/jsonapi/medium_methods_spec.rb +0 -231
  274. data/spec/lib/flapjack/gateways/jsonapi/notification_rule_methods_spec.rb +0 -169
  275. data/spec/lib/flapjack/gateways/jsonapi/pagerduty_credential_methods_spec.rb +0 -114
  276. data/spec/lib/flapjack/gateways/jsonapi/report_methods_spec.rb +0 -590
  277. data/spec/lib/flapjack/gateways/pagerduty_spec.rb +0 -249
  278. data/spec/lib/flapjack/gateways/web/views/check.html.erb_spec.rb +0 -21
  279. data/spec/lib/flapjack/gateways/web/views/contact.html.erb_spec.rb +0 -24
  280. data/spec/lib/flapjack/gateways/web/views/index.html.erb_spec.rb +0 -16
  281. data/spec/lib/flapjack/redis_pool_spec.rb +0 -29
  282. data/spec/service_consumers/pacts/flapjack-diner_v1.0.json +0 -4702
  283. data/tasks/entities.rake +0 -151
  284. data/tasks/profile.rake +0 -282
  285. data/tmp/acknowledge.rb +0 -13
  286. data/tmp/create_config_yaml.rb +0 -16
  287. data/tmp/create_event_ok.rb +0 -30
  288. data/tmp/create_event_unknown.rb +0 -30
  289. data/tmp/create_events_failure.rb +0 -34
  290. data/tmp/create_events_ok.rb +0 -32
  291. data/tmp/create_events_ok_fail_ack_ok.rb +0 -53
  292. data/tmp/create_events_ok_failure.rb +0 -41
  293. data/tmp/create_events_ok_failure_ack.rb +0 -53
  294. data/tmp/dummy_contacts.json +0 -43
  295. data/tmp/dummy_entities.json +0 -37
  296. data/tmp/generate_nagios_test_hosts.rb +0 -16
  297. data/tmp/notification_rules.rb +0 -73
  298. data/tmp/parse_config_yaml.rb +0 -7
  299. data/tmp/redis_find_spurious_unknown_states.rb +0 -52
  300. data/tmp/test_json_post.rb +0 -19
  301. data/tmp/test_notification_rules_api.rb +0 -171
@@ -1,420 +1,377 @@
1
1
  Pact.provider_states_for "flapjack-diner" do
2
2
 
3
- provider_state "no contact exists" do
4
- tear_down do
5
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
6
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
7
- redis.flushdb
8
- end
3
+ provider_state "no data exists" do
4
+ set_up { default_tear_down }
5
+ tear_down { default_tear_down }
9
6
  end
10
7
 
11
- provider_state "no entity exists" do
12
- tear_down do
13
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
14
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
15
- redis.flushdb
8
+ provider_state "a check exists" do
9
+ set_up do
10
+ check = Flapjack::Data::Check.new(check_data)
11
+ check.save!
16
12
  end
13
+
14
+ tear_down { default_tear_down }
17
15
  end
18
16
 
19
- provider_state "no check exists" do
20
- tear_down do
21
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
22
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
23
- redis.flushdb
17
+ provider_state "two checks exist" do
18
+ set_up do
19
+ check = Flapjack::Data::Check.new(check_data)
20
+ check.save!
21
+
22
+ check_2 = Flapjack::Data::Check.new(check_2_data)
23
+ check_2.save!
24
24
  end
25
+
26
+ tear_down { default_tear_down }
25
27
  end
26
28
 
27
- provider_state "no notification rule exists" do
28
- tear_down do
29
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
30
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
31
- redis.flushdb
29
+ provider_state "a contact exists" do
30
+ set_up do
31
+ contact = Flapjack::Data::Contact.new(contact_data)
32
+ contact.save!
32
33
  end
34
+
35
+ tear_down { default_tear_down }
33
36
  end
34
37
 
35
- provider_state "an entity 'www.example.com' with id '1234' exists" do
38
+ provider_state "a contact with one medium exists" do
36
39
  set_up do
37
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
40
+ contact = Flapjack::Data::Contact.new(contact_data)
41
+ contact.save!
38
42
 
39
- entity_data = {'id' => '1234', 'name' => 'www.example.com'}
40
- Flapjack::Data::Entity.add(entity_data, :redis => redis)
41
- end
43
+ email = Flapjack::Data::Medium.new(email_data)
44
+ email.save!
42
45
 
43
- tear_down do
44
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
45
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
46
- redis.flushdb
46
+ contact.media << email
47
47
  end
48
+
49
+ tear_down { default_tear_down }
48
50
  end
49
51
 
50
- provider_state "entities 'www.example.com', id '1234' and 'www2.example.com', id '5678' exist" do
52
+ provider_state "a contact with one medium and one rule exists" do
51
53
  set_up do
52
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
54
+ contact = Flapjack::Data::Contact.new(contact_data)
55
+ contact.save!
53
56
 
54
- entity_data = {'id' => '1234', 'name' => 'www.example.com'}
55
- Flapjack::Data::Entity.add(entity_data, :redis => redis)
56
- entity_data_2 = {'id' => '5678', 'name' => 'www2.example.com'}
57
- Flapjack::Data::Entity.add(entity_data_2, :redis => redis)
58
- end
57
+ email = Flapjack::Data::Medium.new(email_data)
58
+ email.save!
59
59
 
60
- tear_down do
61
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
62
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
63
- redis.flushdb
60
+ contact.media << email
61
+
62
+ rule = Flapjack::Data::Rule.new(rule_data)
63
+ rule.save!
64
+
65
+ contact.rules << rule
64
66
  end
67
+
68
+ tear_down { default_tear_down }
65
69
  end
66
70
 
67
- provider_state "a check 'www.example.com:SSH' exists" do
71
+ provider_state "two contacts exist" do
68
72
  set_up do
69
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
73
+ contact = Flapjack::Data::Contact.new(contact_data)
74
+ contact.save!
70
75
 
71
- entity_data = {'id' => '1234', 'name' => 'www.example.com'}
72
- Flapjack::Data::Entity.add(entity_data, :redis => redis)
73
- check_data = {'entity_id' => '1234', 'name' => 'SSH'}
74
- Flapjack::Data::EntityCheck.add(check_data, :redis => redis)
76
+ contact_2 = Flapjack::Data::Contact.new(contact_2_data)
77
+ contact_2.save!
75
78
  end
76
79
 
77
- tear_down do
78
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
79
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
80
- redis.flushdb
81
- end
80
+ tear_down { default_tear_down }
82
81
  end
83
82
 
84
- provider_state "checks 'www.example.com:SSH' and 'www2.example.com:PING' exist" do
83
+ provider_state "a medium exists" do
85
84
  set_up do
86
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
85
+ sms = Flapjack::Data::Medium.new(sms_data)
86
+ sms.save!
87
+ end
87
88
 
88
- entity_data = {'id' => '1234', 'name' => 'www.example.com'}
89
- Flapjack::Data::Entity.add(entity_data, :redis => redis)
90
- entity_data_2 = {'id' => '5678', 'name' => 'www2.example.com'}
91
- Flapjack::Data::Entity.add(entity_data_2, :redis => redis)
89
+ tear_down { default_tear_down }
90
+ end
92
91
 
93
- check_data = {'entity_id' => '1234', 'name' => 'SSH'}
94
- Flapjack::Data::EntityCheck.add(check_data, :redis => redis)
95
- check_data_2 = {'entity_id' => '5678', 'name' => 'PING'}
96
- Flapjack::Data::EntityCheck.add(check_data_2, :redis => redis)
97
- end
92
+ provider_state "two media exist" do
93
+ set_up do
94
+ sms = Flapjack::Data::Medium.new(sms_data)
95
+ sms.save!
98
96
 
99
- tear_down do
100
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
101
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
102
- redis.flushdb
97
+ email = Flapjack::Data::Medium.new(email_data)
98
+ email.save!
103
99
  end
100
+
101
+ tear_down { default_tear_down }
104
102
  end
105
103
 
106
- provider_state "a contact with id 'abc' exists" do
104
+ provider_state "a rule exists" do
107
105
  set_up do
108
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
109
- contact_data = {'id' => 'abc',
110
- 'first_name' => 'Jim',
111
- 'last_name' => 'Smith',
112
- 'email' => 'jims@example.com',
113
- 'timezone' => 'UTC',
114
- 'tags' => ['admin', 'night_shift']}
115
- Flapjack::Data::Contact.add(contact_data, :redis => redis)
106
+ rule = Flapjack::Data::Rule.new(rule_data)
107
+ rule.save!
116
108
  end
117
109
 
118
- tear_down do
119
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
120
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
121
- redis.flushdb
110
+ tear_down { default_tear_down }
111
+ end
112
+
113
+ provider_state "a state exists" do
114
+ set_up do
115
+ sd = state_data.dup
116
+ [:created_at, :updated_at].each {|t| sd[t] = Time.parse(sd[t]) }
117
+
118
+ state = Flapjack::Data::State.new(sd)
119
+ state.save!
122
120
  end
121
+
122
+ tear_down { default_tear_down }
123
123
  end
124
124
 
125
- provider_state "a contact with id 'abc' has email and sms media" do
125
+ provider_state "two rules exist" do
126
126
  set_up do
127
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
128
- contact_data = {'id' => 'abc',
129
- 'first_name' => 'Jim',
130
- 'last_name' => 'Smith',
131
- 'email' => 'jims@example.com',
132
- 'timezone' => 'UTC',
133
- 'tags' => ['admin', 'night_shift']}
134
- contact = Flapjack::Data::Contact.add(contact_data, :redis => redis)
135
-
136
- email_data = {
137
- 'type' => 'email',
138
- 'address' => 'ablated@example.org',
139
- 'interval' => 180,
140
- 'rollup_threshold' => 3
141
- }
142
-
143
- sms_data = {
144
- 'type' => 'sms',
145
- 'address' => '0123456789',
146
- 'interval' => 300,
147
- 'rollup_threshold' => 5
148
- }
149
-
150
- [email_data, sms_data].each do |medium_data|
151
- type = medium_data['type']
152
- contact.set_address_for_media(type, medium_data['address'])
153
- contact.set_interval_for_media(type, medium_data['interval'])
154
- contact.set_rollup_threshold_for_media(type, medium_data['rollup_threshold'])
155
- end
127
+ rule = Flapjack::Data::Rule.new(rule_data)
128
+ rule.save!
129
+
130
+ rule_2 = Flapjack::Data::Rule.new(rule_2_data)
131
+ rule_2.save!
156
132
  end
157
133
 
158
- tear_down do
159
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
160
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
161
- redis.flushdb
134
+ tear_down { default_tear_down }
135
+ end
136
+
137
+ provider_state "a tag exists" do
138
+ set_up do
139
+ tag = Flapjack::Data::Tag.new(tag_data)
140
+ tag.save!
162
141
  end
142
+
143
+ tear_down { default_tear_down }
163
144
  end
164
145
 
165
- provider_state "a contact with id '872' exists" do
146
+ provider_state "two tags exist" do
166
147
  set_up do
167
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
168
- contact_data = {'id' => '872', 'first_name' => 'John',
169
- 'last_name' => 'Smith', 'email' => 'jsmith@example.com'}
170
- Flapjack::Data::Contact.add(contact_data, :redis => redis)
148
+ tag = Flapjack::Data::Tag.new(tag_data)
149
+ tag.save!
150
+
151
+ tag_2 = Flapjack::Data::Tag.new(tag_2_data)
152
+ tag_2.save!
171
153
  end
172
154
 
173
- tear_down do
174
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
175
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
176
- redis.flushdb
155
+ tear_down { default_tear_down }
156
+ end
157
+
158
+ provider_state "a scheduled maintenance period exists" do
159
+ set_up do
160
+ smd = scheduled_maintenance_data.dup
161
+ [:start_time, :end_time].each {|t| smd[t] = Time.parse(smd[t]) }
162
+ scheduled_maintenance = Flapjack::Data::ScheduledMaintenance.new(smd)
163
+ scheduled_maintenance.save!
177
164
  end
165
+
166
+ tear_down { default_tear_down }
178
167
  end
179
168
 
180
- provider_state "contacts with ids 'abc' and '872' exist" do
169
+ provider_state "two scheduled maintenance periods exist" do
181
170
  set_up do
182
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
183
- contact_data = {'id' => 'abc',
184
- 'first_name' => 'Jim',
185
- 'last_name' => 'Smith',
186
- 'email' => 'jims@example.com',
187
- 'timezone' => 'UTC',
188
- 'tags' => ['admin', 'night_shift']}
189
- Flapjack::Data::Contact.add(contact_data, :redis => redis)
190
- contact_data_2 = {'id' => '872',
191
- 'first_name' => 'John',
192
- 'last_name' => 'Smith',
193
- 'email' => 'jsmith@example.com'}
194
- Flapjack::Data::Contact.add(contact_data_2, :redis => redis)
171
+ smd = scheduled_maintenance_data.dup
172
+ [:start_time, :end_time].each {|t| smd[t] = Time.parse(smd[t]) }
173
+ scheduled_maintenance = Flapjack::Data::ScheduledMaintenance.new(smd)
174
+ scheduled_maintenance.save!
175
+
176
+ smd_2 = scheduled_maintenance_2_data.dup
177
+ [:start_time, :end_time].each {|t| smd_2[t] = Time.parse(smd_2[t]) }
178
+ scheduled_maintenance_2 = Flapjack::Data::ScheduledMaintenance.new(smd_2)
179
+ scheduled_maintenance_2.save!
195
180
  end
196
181
 
197
- tear_down do
198
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
199
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
200
- redis.flushdb
182
+ tear_down { default_tear_down }
183
+ end
184
+
185
+ provider_state "an unscheduled maintenance period exists" do
186
+ set_up do
187
+ usmd = unscheduled_maintenance_data.dup
188
+ [:start_time, :end_time].each {|t| usmd[t] = Time.parse(usmd[t]) }
189
+ unscheduled_maintenance = Flapjack::Data::UnscheduledMaintenance.new(usmd)
190
+ unscheduled_maintenance.save!
201
191
  end
192
+
193
+ tear_down { default_tear_down }
202
194
  end
203
195
 
204
- provider_state "a contact 'abc' with generic notification rule '05983623-fcef-42da-af44-ed6990b500fa' exists" do
196
+ provider_state "two unscheduled maintenance periods exist" do
205
197
  set_up do
206
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
207
-
208
- contact_data = {'id' => 'abc',
209
- 'first_name' => 'Jim',
210
- 'last_name' => 'Smith',
211
- 'email' => 'jims@example.com',
212
- 'timezone' => 'UTC',
213
- 'tags' => ['admin', 'night_shift']}
214
- contact = Flapjack::Data::Contact.add(contact_data, :redis => redis)
215
- existing_nr = contact.notification_rules.first
216
-
217
- nr_data = {
218
- :id => '05983623-fcef-42da-af44-ed6990b500fa',
219
- :tags => [],
220
- :regex_tags => [],
221
- :entities => [],
222
- :regex_entities => [],
223
- :time_restrictions => [],
224
- :warning_media => ["email"],
225
- :critical_media => ["sms", "email"],
226
- :warning_blackhole => false,
227
- :critical_blackhole => false
228
- }
229
- contact.add_notification_rule(nr_data)
230
- contact.delete_notification_rule(existing_nr)
198
+ usmd = unscheduled_maintenance_data.dup
199
+ [:start_time, :end_time].each {|t| usmd[t] = Time.parse(usmd[t]) }
200
+ unscheduled_maintenance = Flapjack::Data::UnscheduledMaintenance.new(usmd)
201
+ unscheduled_maintenance.save!
202
+
203
+ usmd_2 = unscheduled_maintenance_2_data.dup
204
+ [:start_time, :end_time].each {|t| usmd_2[t] = Time.parse(usmd_2[t]) }
205
+ unscheduled_maintenance_2 = Flapjack::Data::UnscheduledMaintenance.new(usmd_2)
206
+ unscheduled_maintenance_2.save!
231
207
  end
232
208
 
233
- tear_down do
234
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
235
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
236
- redis.flushdb
209
+ tear_down { default_tear_down }
210
+ end
211
+
212
+ provider_state "a global statistics object exists" do
213
+ set_up do
214
+ gsd = global_statistics_data.dup
215
+ gsd[:created_at] = Time.parse(gsd[:created_at])
216
+ global_stats = Flapjack::Data::Statistic.new(gsd)
217
+ global_stats.save!
237
218
  end
219
+
220
+ tear_down { default_tear_down }
238
221
  end
239
222
 
240
- provider_state "a contact 'abc' with generic notification rule '05983623-fcef-42da-af44-ed6990b500fa' and notification rule '20f182fc-6e32-4794-9007-97366d162c51' exists" do
223
+ provider_state "a check and a tag exist" do
241
224
  set_up do
242
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
243
-
244
- contact_data = {'id' => 'abc',
245
- 'first_name' => 'Jim',
246
- 'last_name' => 'Smith',
247
- 'email' => 'jims@example.com',
248
- 'timezone' => 'UTC',
249
- 'tags' => ['admin', 'night_shift']}
250
- contact = Flapjack::Data::Contact.add(contact_data, :redis => redis)
251
- existing_nr = contact.notification_rules.first
252
-
253
- nr_data = {
254
- :id => '05983623-fcef-42da-af44-ed6990b500fa',
255
- :tags => [],
256
- :regex_tags => [],
257
- :entities => [],
258
- :regex_entities => [],
259
- :time_restrictions => [],
260
- :warning_media => ["email"],
261
- :critical_media => ["sms", "email"],
262
- :warning_blackhole => false,
263
- :critical_blackhole => false
264
- }
265
- contact.add_notification_rule(nr_data)
266
-
267
- nr_data_2 = {
268
- :id => '20f182fc-6e32-4794-9007-97366d162c51',
269
- :tags => ['physical'],
270
- :regex_tags => [],
271
- :entities => ['example.com'],
272
- :regex_entities => [],
273
- :time_restrictions => [],
274
- :warning_media => ["email"],
275
- :critical_media => ["sms", "email"],
276
- :warning_blackhole => true,
277
- :critical_blackhole => true
278
- }
279
- contact.add_notification_rule(nr_data_2)
280
- contact.delete_notification_rule(existing_nr)
225
+ check = Flapjack::Data::Check.new(check_data)
226
+ check.save!
227
+
228
+ tag = Flapjack::Data::Tag.new(tag_data)
229
+ tag.save!
281
230
  end
282
231
 
283
- tear_down do
284
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
285
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
286
- redis.flushdb
232
+ tear_down { default_tear_down }
233
+ end
234
+
235
+ provider_state "a contact and a medium exist" do
236
+ set_up do
237
+ contact = Flapjack::Data::Contact.new(contact_data)
238
+ contact.save!
239
+
240
+ email = Flapjack::Data::Medium.new(email_data)
241
+ email.save!
287
242
  end
243
+
244
+ tear_down { default_tear_down }
288
245
  end
289
246
 
290
- provider_state "a contact with id 'abc' has pagerduty credentials" do
247
+ provider_state "a contact with a medium exists" do
291
248
  set_up do
292
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
293
- contact_data = {'id' => 'abc',
294
- 'first_name' => 'Jim',
295
- 'last_name' => 'Smith',
296
- 'email' => 'jims@example.com',
297
- 'timezone' => 'UTC',
298
- 'tags' => ['admin', 'night_shift']}
299
- contact = Flapjack::Data::Contact.add(contact_data, :redis => redis)
300
-
301
- pdc_data = {
302
- 'service_key' => 'abc',
303
- 'subdomain' => 'def',
304
- 'token' => 'ghi',
305
- }
306
- contact.set_pagerduty_credentials(pdc_data)
249
+ contact = Flapjack::Data::Contact.new(contact_data)
250
+ contact.save!
251
+
252
+ email = Flapjack::Data::Medium.new(email_data)
253
+ email.save!
254
+
255
+ contact.media << email
307
256
  end
308
257
 
309
- tear_down do
310
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
311
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
312
- redis.flushdb
258
+ tear_down { default_tear_down }
259
+ end
260
+
261
+ provider_state "a contact with a rule exists" do
262
+ set_up do
263
+ contact = Flapjack::Data::Contact.new(contact_data)
264
+ contact.save!
265
+
266
+ rule = Flapjack::Data::Rule.new(rule_data)
267
+ rule.save!
268
+
269
+ contact.rules << rule
313
270
  end
271
+
272
+ tear_down { default_tear_down }
314
273
  end
315
274
 
316
- provider_state "contacts with ids 'abc' and '872' have pagerduty credentials" do
275
+ provider_state "a check with a tag exists" do
317
276
  set_up do
318
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
319
- contact_data = {'id' => 'abc',
320
- 'first_name' => 'Jim',
321
- 'last_name' => 'Smith',
322
- 'email' => 'jims@example.com',
323
- 'timezone' => 'UTC',
324
- 'tags' => ['admin', 'night_shift']}
325
- contact = Flapjack::Data::Contact.add(contact_data, :redis => redis)
326
- contact_data_2 = {'id' => '872',
327
- 'first_name' => 'John',
328
- 'last_name' => 'Smith',
329
- 'email' => 'jsmith@example.com'}
330
- contact_2 = Flapjack::Data::Contact.add(contact_data_2, :redis => redis)
331
-
332
- pdc_data = {
333
- 'service_key' => 'abc',
334
- 'subdomain' => 'def',
335
- 'token' => 'ghi',
336
- }
337
- contact.set_pagerduty_credentials(pdc_data)
338
- pdc_data_2 = {
339
- 'service_key' => 'mno',
340
- 'subdomain' => 'pqr',
341
- 'token' => 'stu',
342
- }
343
- contact_2.set_pagerduty_credentials(pdc_data_2)
277
+ check = Flapjack::Data::Check.new(check_data)
278
+ check.save!
279
+
280
+ tag = Flapjack::Data::Tag.new(tag_data)
281
+ tag.save!
282
+
283
+ check.tags << tag
344
284
  end
345
285
 
346
- tear_down do
347
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
348
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
349
- redis.flushdb
286
+ tear_down { default_tear_down }
287
+ end
288
+
289
+ provider_state "a check and two tags exist" do
290
+ set_up do
291
+ check = Flapjack::Data::Check.new(check_data)
292
+ check.save!
293
+
294
+ tag = Flapjack::Data::Tag.new(tag_data)
295
+ tag.save!
296
+
297
+ tag_2 = Flapjack::Data::Tag.new(tag_2_data)
298
+ tag_2.save!
350
299
  end
300
+
301
+ tear_down { default_tear_down }
351
302
  end
352
303
 
353
- provider_state "flapjack has a simplistic check freshness distribution" do
304
+ provider_state "a check with two tags exists" do
354
305
  set_up do
355
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
356
- check_freshness_data = {
357
- :from_0_to_60 => 0,
358
- :from_60_to_300 => 1,
359
- :from_300_to_900 => 2,
360
- :from_900_to_3600 => 3,
361
- :from_3600_to_∞ => 4
362
- }
363
- entity = Flapjack::Data::Entity.find_by_name('sally', :create => true, :redis => redis)
364
-
365
- checks = {
366
- "check 1" => 61,
367
- "check 2" => 301,
368
- "check 3" => 301,
369
- "check 4" => 901,
370
- "check 5" => 901,
371
- "check 6" => 901,
372
- "check 7" => 3601,
373
- "check 8" => 3601,
374
- "check 9" => 3601,
375
- "check 10" => 3601,
376
- }
377
- checks.each_pair {|check_name, age|
378
- check = Flapjack::Data::EntityCheck.new(entity, check_name, :redis => redis)
379
- check.update_state(Flapjack::Data::EntityCheck::STATE_OK, :timestamp => Time.new.to_i - age)
380
- }
306
+ check = Flapjack::Data::Check.new(check_data)
307
+ check.save!
308
+
309
+ tag = Flapjack::Data::Tag.new(tag_data)
310
+ tag.save!
311
+
312
+ tag_2 = Flapjack::Data::Tag.new(tag_2_data)
313
+ tag_2.save!
314
+
315
+ check.tags.add(tag, tag_2)
381
316
  end
382
317
 
383
- tear_down do
384
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
385
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
386
- redis.flushdb
318
+ tear_down { default_tear_down }
319
+ end
320
+
321
+ provider_state "a tag with two checks exists" do
322
+ set_up do
323
+ tag = Flapjack::Data::Tag.new(tag_data)
324
+ tag.save!
325
+
326
+ check = Flapjack::Data::Check.new(check_data)
327
+ check.save!
328
+
329
+ check_2 = Flapjack::Data::Check.new(check_2_data)
330
+ check_2.save!
331
+
332
+ tag.checks.add(check, check_2)
387
333
  end
334
+
335
+ tear_down { default_tear_down }
388
336
  end
389
337
 
390
- provider_state "flapjack has processed 0 ok, 1 failure, 2 ack, and 3 invalid events with 4 on the queue" do
338
+ provider_state "a check with a tag and a rule exists" do
391
339
  set_up do
392
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
393
- failure_event = {
394
- 'type' => 'service',
395
- 'state' => 'critical',
396
- 'summary' => '50% packet loss',
397
- 'entity' => 'foo-app-01.example',
398
- 'check' => 'ping'
399
- }
400
-
401
- # fake out the metrics
402
- redis.hmset('event_counters',
403
- 'all' , 6,
404
- 'ok' , 0,
405
- 'failure' , 1,
406
- 'action' , 2,
407
- 'invalid' , 3
408
- )
409
-
410
- 4.times{ redis.lpush('events', Flapjack.dump_json(failure_event)) }
340
+ check = Flapjack::Data::Check.new(check_data)
341
+ check.save!
342
+
343
+ tag = Flapjack::Data::Tag.new(tag_data)
344
+ tag.save!
345
+
346
+ rule = Flapjack::Data::Rule.new(rule_data)
347
+ rule.save!
348
+
349
+ check.tags << tag
350
+ rule.tags << tag
411
351
  end
412
352
 
413
- tear_down do
414
- Flapjack::Gateways::JSONAPI.instance_variable_get('@logger').messages.clear
415
- redis = Flapjack::Gateways::JSONAPI.instance_variable_get('@redis')
416
- redis.flushdb
353
+ tear_down { default_tear_down }
354
+ end
355
+
356
+ provider_state "a check with a tag, current state and a latest notification exists" do
357
+ set_up do
358
+ check = Flapjack::Data::Check.new(check_data)
359
+ check.save!
360
+
361
+ tag = Flapjack::Data::Tag.new(tag_data)
362
+ tag.save!
363
+
364
+ sd = state_data.dup
365
+ [:created_at, :updated_at].each {|t| sd[t] = Time.parse(sd[t]) }
366
+ state = Flapjack::Data::State.new(sd)
367
+ state.save!
368
+
369
+ check.tags << tag
370
+ check.current_state = state
371
+ check.latest_notifications << state
417
372
  end
373
+
374
+ tear_down { default_tear_down }
418
375
  end
419
376
 
420
- end
377
+ end