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
@@ -4,23 +4,22 @@ Feature: events
4
4
  flapjack-executive must process events correctly
5
5
 
6
6
  Background:
7
- Given an entity 'foo-app-01.example.com' exists
8
- And the check is check 'HTTP Port 80' on entity 'foo-app-01.example.com'
7
+ Given the check is check 'HTTP Port 80' on entity 'foo-app-01.example.com'
9
8
 
10
9
  Scenario: Check ok to ok
11
10
  Given the check is in an ok state
12
11
  When an ok event is received
13
- Then a notification should not be generated
12
+ Then no notifications should have been generated
14
13
 
15
14
  Scenario: Check ok to warning
16
15
  Given the check is in an ok state
17
16
  When a warning event is received
18
- Then a notification should not be generated
17
+ Then no notifications should have been generated
19
18
 
20
19
  Scenario: Check ok to critical
21
20
  Given the check is in an ok state
22
21
  When a critical event is received
23
- Then a notification should not be generated
22
+ Then no notifications should have been generated
24
23
 
25
24
  @time
26
25
  Scenario: Check critical to critical after 10 seconds
@@ -28,7 +27,15 @@ Feature: events
28
27
  When a critical event is received
29
28
  And 10 seconds passes
30
29
  And a critical event is received
31
- Then a notification should not be generated
30
+ Then no notifications should have been generated
31
+
32
+ @time
33
+ Scenario: Check critical to critical after 10 seconds, with an initial delay of 5 seconds
34
+ Given the check is in an ok state
35
+ When a critical event with an initial failure delay of 5 seconds is received
36
+ And 10 seconds passes
37
+ And a critical event with an initial failure delay of 5 seconds is received
38
+ Then 1 notification should have been generated
32
39
 
33
40
  @time
34
41
  Scenario: Check ok to warning for 1 minute
@@ -36,7 +43,7 @@ Feature: events
36
43
  When a warning event is received
37
44
  And 1 minute passes
38
45
  And a warning event is received
39
- Then a notification should be generated
46
+ Then 1 notification should have been generated
40
47
 
41
48
  @time
42
49
  Scenario: Check ok to critical for 1 minute
@@ -44,20 +51,29 @@ Feature: events
44
51
  When a critical event is received
45
52
  And 1 minute passes
46
53
  And a critical event is received
47
- Then a notification should be generated
54
+ Then 1 notification should have been generated
48
55
 
49
56
  @time
50
- Scenario: Check ok to warning, 1 min, then critical
57
+ Scenario: Check ok to critical for 1 minute, with an initial delay of 2 minutes
58
+ And the check is in an ok state
59
+ When a critical event with an initial failure delay of 120 seconds is received
60
+ And 1 minute passes
61
+ And a critical event with an initial failure delay of 120 seconds is received
62
+ Then no notifications should have been generated
63
+
64
+ @time
65
+ Scenario: Check ok to warning, 45 seconds, then critical
51
66
  Given the check is in an ok state
52
67
  When a warning event is received
53
68
  And 1 minute passes
54
69
  And a warning event is received
55
- Then a notification should be generated
70
+ Then 1 notification should have been generated
71
+ And 45 seconds passes
56
72
  When a critical event is received
57
- Then a notification should not be generated
73
+ Then 1 notification should have been generated
58
74
  When 1 minute passes
59
75
  And a critical event is received
60
- Then a notification should be generated
76
+ Then 2 notifications should have been generated
61
77
 
62
78
  @time
63
79
  Scenario: Check critical and alerted to critical for 40 seconds
@@ -65,10 +81,21 @@ Feature: events
65
81
  When a critical event is received
66
82
  And 1 minute passes
67
83
  And a critical event is received
68
- Then a notification should be generated
84
+ Then 1 notification should have been generated
69
85
  When 40 seconds passes
70
86
  And a critical event is received
71
- Then a notification should not be generated
87
+ Then 1 notification should have been generated
88
+
89
+ @time
90
+ Scenario: Check critical and alerted to critical for 40 seconds, with a repeat delay of 20 seconds
91
+ Given the check is in an ok state
92
+ When a critical event with a repeat failure delay of 20 seconds is received
93
+ And 1 minute passes
94
+ And a critical event with a repeat failure delay of 20 seconds is received
95
+ Then 1 notification should have been generated
96
+ When 40 seconds passes
97
+ And a critical event with a repeat failure delay of 20 seconds is received
98
+ Then 2 notifications should have been generated
72
99
 
73
100
  @time
74
101
  Scenario: Check critical and alerted to critical for 6 minutes
@@ -76,10 +103,21 @@ Feature: events
76
103
  When a critical event is received
77
104
  And 1 minute passes
78
105
  And a critical event is received
79
- Then a notification should be generated
106
+ Then 1 notification should have been generated
80
107
  When 6 minutes passes
81
108
  And a critical event is received
82
- Then a notification should be generated
109
+ Then 2 notifications should have been generated
110
+
111
+ @time
112
+ Scenario: Check critical and alerted to critical for 6 minutes, with a repeat delay of 10 minutes
113
+ Given the check is in an ok state
114
+ When a critical event with a repeat failure delay of 600 seconds is received
115
+ And 1 minute passes
116
+ And a critical event with a repeat failure delay of 600 seconds is received
117
+ Then 1 notification should have been generated
118
+ When 6 minutes passes
119
+ And a critical event with a repeat failure delay of 600 seconds is received
120
+ Then 1 notification should have been generated
83
121
 
84
122
  @time
85
123
  Scenario: Check ok to critical for 1 minute when in scheduled maintenance
@@ -88,7 +126,7 @@ Feature: events
88
126
  When a critical event is received
89
127
  And 1 minute passes
90
128
  And a critical event is received
91
- Then a notification should not be generated
129
+ Then no notifications should have been generated
92
130
 
93
131
  @time
94
132
  Scenario: Alert when coming out of scheduled maintenance
@@ -97,13 +135,13 @@ Feature: events
97
135
  When a critical event is received
98
136
  And 1 minute passes
99
137
  And a critical event is received
100
- Then a notification should not be generated
138
+ Then no notifications should have been generated
101
139
  And 2 hours passes
102
140
  And a critical event is received
103
- Then a notification should not be generated
141
+ Then no notifications should have been generated
104
142
  When 1 hours passes
105
143
  And a critical event is received
106
- Then a notification should be generated
144
+ Then 1 notification should have been generated
107
145
 
108
146
  @time
109
147
  Scenario: Check ok to critical for 1 minute when in unscheduled maintenance
@@ -112,7 +150,7 @@ Feature: events
112
150
  When a critical event is received
113
151
  And 1 minute passes
114
152
  And a critical event is received
115
- Then a notification should not be generated
153
+ Then no notifications should have been generated
116
154
 
117
155
  @time
118
156
  Scenario: Check ok to critical for 1 minute, acknowledged, and critical for 6 minutes
@@ -120,21 +158,22 @@ Feature: events
120
158
  When a critical event is received
121
159
  And 1 minute passes
122
160
  And a critical event is received
123
- Then a notification should be generated
161
+ Then 1 notification should have been generated
124
162
  When an acknowledgement event is received
163
+ Then 2 notifications should have been generated
125
164
  And 6 minute passes
126
165
  And a critical event is received
127
- Then a notification should not be generated
166
+ Then 2 notifications should have been generated
128
167
 
129
168
  @time
130
169
  Scenario: Check critical to ok
131
170
  Given the check is in a critical state
132
171
  When 5 minutes passes
133
172
  And a critical event is received
134
- Then a notification should be generated
173
+ Then 1 notification should have been generated
135
174
  When 5 minutes passes
136
175
  And an ok event is received
137
- Then a notification should be generated
176
+ Then 2 notifications should have been generated
138
177
 
139
178
  @time
140
179
  Scenario: Check critical to ok when acknowledged
@@ -142,76 +181,69 @@ Feature: events
142
181
  When a critical event is received
143
182
  And one minute passes
144
183
  And a critical event is received
145
- Then a notification should be generated
146
- # the above all needs to be just a call to the "Check ok to critical for 1 minute" Scenario if that's possible
184
+ Then 1 notification should have been generated
185
+ And one minute passes
147
186
  When an acknowledgement event is received
148
- Then a notification should be generated
187
+ Then 2 notifications should have been generated
149
188
  When 1 minute passes
150
189
  And an ok event is received
151
- Then a notification should be generated
190
+ Then 3 notifications should have been generated
152
191
 
153
192
  @time
154
193
  Scenario: Check critical to ok when acknowledged, and fails after 6 minutes
155
194
  Given the check is in a critical state
156
195
  When an acknowledgement event is received
157
- Then a notification should be generated
196
+ Then 1 notification should have been generated
158
197
  When 1 minute passes
159
198
  And an ok event is received
160
- Then a notification should be generated
199
+ Then 2 notifications should have been generated
161
200
  When 6 minutes passes
162
201
  And a critical event is received
163
- Then a notification should not be generated
202
+ Then 3 notifications should have been generated
164
203
  When 6 minutes passes
165
204
  And a critical event is received
166
- Then a notification should be generated
205
+ Then 4 notifications should have been generated
167
206
 
168
207
  @time
169
- Scenario: Osciliating state, period of two minutes
208
+ Scenario: Oscillating state, period of two minutes
170
209
  Given the check is in an ok state
171
210
  When a critical event is received
172
- Then a notification should not be generated
211
+ Then no notifications should have been generated
173
212
  When 50 seconds passes
174
213
  And a critical event is received
175
- Then a notification should be generated
214
+ Then 1 notification should have been generated
176
215
  When 10 seconds passes
177
216
  And an ok event is received
178
- Then a notification should be generated
217
+ Then 2 notifications should have been generated
179
218
  When 50 seconds passes
180
219
  And an ok event is received
181
- Then a notification should not be generated
220
+ Then 2 notifications should have been generated
182
221
  When 10 seconds passes
183
222
  And a critical event is received
184
- Then a notification should not be generated
223
+ Then 3 notifications should have been generated
185
224
  When 50 seconds passes
186
225
  And a critical event is received
187
- Then a notification should be generated
226
+ Then 3 notifications should have been generated
188
227
  When 10 seconds passes
189
228
  And an ok event is received
190
- Then a notification should be generated
229
+ Then 4 notifications should have been generated
191
230
 
192
231
  Scenario: Acknowledgement when ok
193
232
  Given the check is in an ok state
194
233
  When an acknowledgement event is received
195
- Then a notification should not be generated
234
+ Then no notifications should have been generated
196
235
 
197
236
  Scenario: Acknowledgement when critical
198
237
  Given the check is in a critical state
199
238
  When an acknowledgement event is received
200
- Then a notification should be generated
201
-
202
- Scenario: Acknowledgement when acknowledged
203
- Given the check is in a critical state
204
- When an acknowledgement event is received
205
- Then a notification should be generated
206
- When an acknowledgement event is received
207
- Then a notification should be generated
239
+ Then 1 notification should have been generated
208
240
 
209
241
  Scenario: Brief critical then OK
210
242
  Given the check is in an ok state
211
243
  When a critical event is received
212
244
  And 10 seconds passes
213
245
  And an ok event is received
214
- Then a notification should not be generated
246
+ Then no notifications should have been generated
215
247
 
216
248
  @time
217
249
  Scenario: Quick stream of unknown
@@ -219,204 +251,197 @@ Feature: events
219
251
  When a critical event is received
220
252
  And 1 minute passes
221
253
  And a critical event is received
222
- Then a notification should be generated
254
+ Then 1 notification should have been generated
223
255
  When 10 minutes passes
224
256
  And an unknown event is received
225
- Then a notification should not be generated
257
+ Then 2 notifications should have been generated
226
258
  When 60 seconds passes
227
259
  And an unknown event is received
228
- Then a notification should be generated
260
+ Then 3 notifications should have been generated
229
261
  When 10 seconds passes
230
262
  And an unknown event is received
231
- Then a notification should not be generated
263
+ Then 3 notifications should have been generated
232
264
  When 10 seconds passes
233
265
  And an unknown event is received
234
- Then a notification should not be generated
266
+ Then 3 notifications should have been generated
235
267
  When 10 seconds passes
236
268
  And an unknown event is received
237
- Then a notification should not be generated
269
+ Then 3 notifications should have been generated
238
270
  When 10 seconds passes
239
271
  And an unknown event is received
240
- Then a notification should not be generated
272
+ Then 3 notifications should have been generated
241
273
  When 10 seconds passes
242
274
  And an unknown event is received
243
- Then a notification should not be generated
275
+ Then 3 notifications should have been generated
244
276
  When 1 minutes passes
245
277
  And an unknown event is received
246
- Then a notification should be generated
278
+ Then 4 notifications should have been generated
247
279
  When 10 seconds passes
248
280
  And an unknown event is received
249
- Then a notification should not be generated
281
+ Then 4 notifications should have been generated
250
282
  When 10 seconds passes
251
283
  And an unknown event is received
252
- Then a notification should not be generated
284
+ Then 4 notifications should have been generated
253
285
  When 10 seconds passes
254
286
  And an unknown event is received
255
- Then a notification should not be generated
287
+ Then 4 notifications should have been generated
256
288
 
257
289
  @time
258
290
  Scenario: Flapper (down for one minute, up for one minute, repeat)
259
291
  Given the check is in an ok state
260
292
  When a critical event is received
261
- Then a notification should not be generated
293
+ Then no notifications should have been generated
262
294
  When 10 seconds passes
263
295
  And a critical event is received
264
- Then a notification should not be generated
296
+ Then no notifications should have been generated
265
297
  When 10 seconds passes
266
298
  And a critical event is received
267
- Then a notification should not be generated
299
+ Then no notifications should have been generated
268
300
  When 10 seconds passes
269
301
  # 30 seconds
270
302
  And a critical event is received
271
- Then a notification should be generated
303
+ Then 1 notification should have been generated
272
304
  When 10 seconds passes
273
305
  And a critical event is received
274
- Then a notification should not be generated
306
+ Then 1 notification should have been generated
275
307
  When 10 seconds passes
276
308
  And a critical event is received
277
- Then a notification should not be generated
309
+ Then 1 notification should have been generated
278
310
  When 10 seconds passes
279
311
  # 60 seconds
280
312
  And an ok event is received
281
- Then a notification should be generated
313
+ Then 2 notifications should have been generated
282
314
  When 10 seconds passes
283
315
  And an ok event is received
284
- Then a notification should not be generated
316
+ Then 2 notifications should have been generated
285
317
  When 10 seconds passes
286
318
  And an ok event is received
287
- Then a notification should not be generated
319
+ Then 2 notifications should have been generated
288
320
  When 10 seconds passes
289
321
  And an ok event is received
290
- Then a notification should not be generated
322
+ Then 2 notifications should have been generated
291
323
  When 10 seconds passes
292
324
  And an ok event is received
293
- Then a notification should not be generated
325
+ Then 2 notifications should have been generated
294
326
  When 10 seconds passes
295
327
  And an ok event is received
296
- Then a notification should not be generated
328
+ Then 2 notifications should have been generated
297
329
  When 10 seconds passes
298
330
  # 120 seconds
299
331
  And a critical event is received
300
- Then a notification should not be generated
332
+ Then 3 notifications should have been generated
301
333
  When 10 seconds passes
302
334
  And a critical event is received
303
- Then a notification should not be generated
335
+ Then 3 notifications should have been generated
304
336
  When 10 seconds passes
305
337
  And a critical event is received
306
- Then a notification should not be generated
338
+ Then 3 notifications should have been generated
307
339
  When 10 seconds passes
308
340
  # 150 seconds
309
341
  And a critical event is received
310
- Then a notification should be generated
342
+ Then 3 notifications should have been generated
311
343
  When 10 seconds passes
312
344
  And a critical event is received
313
- Then a notification should not be generated
345
+ Then 3 notifications should have been generated
314
346
  When 10 seconds passes
315
347
  And a critical event is received
316
- Then a notification should not be generated
348
+ Then 3 notifications should have been generated
317
349
  When 10 seconds passes
318
350
  # 180 seconds
319
351
  And an ok event is received
320
- Then a notification should be generated
352
+ Then 4 notifications should have been generated
321
353
 
322
- # commenting out this test for now, will revive it
323
- # when working on gh-119
324
354
  @time
325
355
  Scenario: a lot of quick ok -> warning -> ok -> warning
326
- Given the check is in an ok state
327
- When 10 seconds passes
328
- And a warning event is received
329
- Then a notification should not be generated
330
- When 10 seconds passes
331
- And an ok event is received
332
- Then a notification should not be generated
333
- When 10 seconds passes
334
- And a warning event is received
335
- Then a notification should not be generated
336
- When 10 seconds passes
337
- And a warning event is received
338
- Then a notification should not be generated
339
- When 10 seconds passes
340
- And a warning event is received
341
- Then a notification should not be generated
342
- When 20 seconds passes
343
- And an ok event is received
344
- Then a notification should not be generated
345
- When 10 seconds passes
346
- And a warning event is received
347
- Then a notification should not be generated
348
- When 10 seconds passes
349
- And an ok event is received
350
- Then a notification should not be generated
351
- When 10 seconds passes
352
- And a warning event is received
353
- Then a notification should not be generated
354
- When 10 seconds passes
355
- And a warning event is received
356
- Then a notification should not be generated
357
- When 10 seconds passes
358
- And a warning event is received
359
- Then a notification should not be generated
360
- When 10 seconds passes
361
- And a warning event is received
362
- Then a notification should be generated
363
- When 10 seconds passes
364
- And a warning event is received
365
- Then a notification should not be generated
366
- When 10 seconds passes
367
- And a warning event is received
368
- Then a notification should not be generated
369
- When 10 seconds passes
370
- And an ok event is received
371
- Then a notification should be generated
372
- # recovered
373
- When 10 seconds passes
374
- And a warning event is received
375
- Then a notification should not be generated
376
- When 10 seconds passes
377
- And a warning event is received
378
- Then a notification should not be generated
379
- When 10 seconds passes
380
- And a warning event is received
381
- Then a notification should not be generated
382
- When 10 seconds passes
383
- And an ok event is received
384
- Then a notification should not be generated
385
- When 10 seconds passes
386
- And a warning event is received
387
- Then a notification should not be generated
388
- When 10 seconds passes
389
- And a warning event is received
390
- Then a notification should not be generated
391
- When 10 seconds passes
392
- And a warning event is received
393
- Then a notification should not be generated
394
- When 10 seconds passes
395
- And an ok event is received
396
- Then a notification should not be generated
397
- When 10 seconds passes
398
- And an ok event is received
399
- Then a notification should not be generated
400
- When 10 seconds passes
401
- And an ok event is received
402
- Then a notification should not be generated
403
- When 10 seconds passes
404
- And an ok event is received
405
- Then a notification should not be generated
406
- When 10 seconds passes
407
- And an ok event is received
408
- Then a notification should not be generated
409
- When 10 seconds passes
410
- And a warning event is received
411
- Then a notification should not be generated
412
- When 10 seconds passes
413
- And a warning event is received
414
- Then a notification should not be generated
415
- When 10 seconds passes
416
- And an ok event is received
417
- Then a notification should not be generated
418
-
419
- Scenario: scheduled maintenance created for initial check reference
420
- Given the check has no state
421
- When an ok event is received
422
- Then scheduled maintenance should be generated
356
+ Given the check is in an ok state
357
+ When 10 seconds passes
358
+ And a warning event is received
359
+ Then no notifications should have been generated
360
+ When 10 seconds passes
361
+ And an ok event is received
362
+ Then no notifications should have been generated
363
+ When 10 seconds passes
364
+ And a warning event is received
365
+ Then no notifications should have been generated
366
+ When 10 seconds passes
367
+ And a warning event is received
368
+ Then no notifications should have been generated
369
+ When 10 seconds passes
370
+ And a warning event is received
371
+ Then no notifications should have been generated
372
+ When 20 seconds passes
373
+ And an ok event is received
374
+ Then no notifications should have been generated
375
+ When 10 seconds passes
376
+ And a warning event is received
377
+ Then no notifications should have been generated
378
+ When 10 seconds passes
379
+ And an ok event is received
380
+ Then no notifications should have been generated
381
+ When 10 seconds passes
382
+ And a warning event is received
383
+ Then no notifications should have been generated
384
+ When 10 seconds passes
385
+ And a warning event is received
386
+ Then no notifications should have been generated
387
+ When 10 seconds passes
388
+ And a warning event is received
389
+ Then no notifications should have been generated
390
+ When 10 seconds passes
391
+ And a warning event is received
392
+ Then 1 notification should have been generated
393
+ When 10 seconds passes
394
+ And a warning event is received
395
+ Then 1 notification should have been generated
396
+ When 10 seconds passes
397
+ And a warning event is received
398
+ Then 1 notification should have been generated
399
+ When 10 seconds passes
400
+ And an ok event is received
401
+ Then 2 notifications should have been generated
402
+ # recovered
403
+ When 10 seconds passes
404
+ And a warning event is received
405
+ Then 2 notifications should have been generated
406
+ When 10 seconds passes
407
+ And a warning event is received
408
+ Then 2 notifications should have been generated
409
+ When 10 seconds passes
410
+ And a warning event is received
411
+ Then 2 notifications should have been generated
412
+ When 10 seconds passes
413
+ And an ok event is received
414
+ Then 2 notifications should have been generated
415
+ When 10 seconds passes
416
+ And a warning event is received
417
+ Then 2 notifications should have been generated
418
+ When 10 seconds passes
419
+ And a warning event is received
420
+ Then 2 notifications should have been generated
421
+ When 10 seconds passes
422
+ And a warning event is received
423
+ Then 2 notifications should have been generated
424
+ When 10 seconds passes
425
+ And an ok event is received
426
+ Then 2 notifications should have been generated
427
+ When 10 seconds passes
428
+ And an ok event is received
429
+ Then 2 notifications should have been generated
430
+ When 10 seconds passes
431
+ And an ok event is received
432
+ Then 2 notifications should have been generated
433
+ When 10 seconds passes
434
+ And an ok event is received
435
+ Then 2 notifications should have been generated
436
+ When 10 seconds passes
437
+ And an ok event is received
438
+ Then 2 notifications should have been generated
439
+ When 10 seconds passes
440
+ And a warning event is received
441
+ Then 3 notifications should have been generated
442
+ When 10 seconds passes
443
+ And a warning event is received
444
+ Then 3 notifications should have been generated
445
+ When 10 seconds passes
446
+ And an ok event is received
447
+ Then 4 notifications should have been generated