flapjack 1.6.0 → 2.0.0b1

Sign up to get free protection for your applications and to get access to all the features.
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,590 +0,0 @@
1
- require 'spec_helper'
2
- require 'flapjack/gateways/jsonapi'
3
-
4
- describe 'Flapjack::Gateways::JSONAPI::ReportMethods', :sinatra => true, :logger => true do
5
-
6
- include_context "jsonapi"
7
-
8
- let(:entity) { double(Flapjack::Data::Entity) }
9
- let(:entity_check) { double(Flapjack::Data::EntityCheck) }
10
-
11
- let(:entity_id) { '457' }
12
- let(:entity_name) { 'www.example.net'}
13
- let(:entity_name_esc) { URI.escape(entity_name) }
14
- let(:entity_check_name) { 'ping' }
15
-
16
- let(:check_presenter) { double(Flapjack::Gateways::JSONAPI::CheckPresenter) }
17
-
18
- it "returns the status for all entities" do
19
- status = {'status' => 'data'}
20
- expect(check_presenter).to receive(:status).and_return(status)
21
-
22
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
23
- with(entity_check).and_return(check_presenter)
24
-
25
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity).
26
- with(entity, 'SSH', :redis => redis).and_return(entity_check)
27
-
28
- expect(entity).to receive(:check_list).and_return(['SSH'])
29
-
30
- expect(Flapjack::Data::Entity).to receive(:all).
31
- with(:redis => redis).and_return([entity])
32
-
33
- expect(entity).to receive(:name).twice.and_return(entity_name)
34
- expect(entity).to receive(:id).twice.and_return(entity_id)
35
-
36
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
37
-
38
- result = {
39
- :status_reports => [{
40
- :status => 'data',
41
- :links => {
42
- :entity => [entity_id],
43
- :check => ["#{entity_name}:SSH"]
44
- }}],
45
- :linked => {
46
- :entities => [{
47
- :id => entity_id,
48
- :name => entity_name,
49
- :links => {
50
- :checks => ["#{entity_name}:SSH"],
51
- }
52
- }],
53
- :checks => [{
54
- :id => "#{entity_name}:SSH",
55
- :name => 'SSH',
56
- }]
57
- }
58
- }
59
-
60
- aget "/status_report/entities"
61
- expect(last_response).to be_ok
62
- expect(last_response.body).to eq(result.to_json)
63
- end
64
-
65
- it "returns the status for all checks on an entity" do
66
- status = {'status' => 'data'}
67
- expect(check_presenter).to receive(:status).and_return(status)
68
-
69
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
70
- with(entity_check).and_return(check_presenter)
71
-
72
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity).
73
- with(entity, 'SSH', :redis => redis).and_return(entity_check)
74
-
75
- expect(entity).to receive(:check_list).and_return(['SSH'])
76
-
77
- expect(Flapjack::Data::Entity).to receive(:find_by_id).
78
- with(entity_id, :redis => redis).and_return(entity)
79
-
80
- expect(entity).to receive(:name).twice.and_return(entity_name)
81
- expect(entity).to receive(:id).twice.and_return(entity_id)
82
-
83
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
84
-
85
- result = {
86
- :status_reports => [{
87
- :status => 'data',
88
- :links => {
89
- :entity => [entity_id],
90
- :check => ["#{entity_name}:SSH"]
91
- }}],
92
- :linked => {
93
- :entities => [{
94
- :id => entity_id,
95
- :name => entity_name,
96
- :links => {
97
- :checks => ["#{entity_name}:SSH"],
98
- }
99
- }],
100
- :checks => [{
101
- :id => "#{entity_name}:SSH",
102
- :name => 'SSH',
103
- }]
104
- }
105
- }
106
-
107
- aget "/status_report/entities/#{entity_id}"
108
- expect(last_response).to be_ok
109
- expect(last_response.body).to eq(result.to_json)
110
- end
111
-
112
- it "should not show the status for an entity that's not found" do
113
- expect(Flapjack::Data::Entity).to receive(:find_by_id).
114
- with(entity_id, :redis => redis).and_return(nil)
115
-
116
- aget "/status_report/entities/#{entity_id}"
117
- expect(last_response.status).to eq(404)
118
- end
119
-
120
- it "returns the status for an entity check" do
121
- status = {'status' => 'data'}
122
- expect(check_presenter).to receive(:status).and_return(status)
123
-
124
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
125
- with(entity_check).and_return(check_presenter)
126
-
127
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity_name).
128
- with(entity_name, 'SSH', :redis => redis).and_return(entity_check)
129
-
130
- expect(entity).to receive(:name).twice.and_return(entity_name)
131
- expect(entity).to receive(:id).and_return(entity_id)
132
-
133
- expect(entity_check).to receive(:entity).and_return(entity)
134
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
135
-
136
- result = {
137
- :status_reports => [{
138
- :status => 'data',
139
- :links => {
140
- :entity => [entity_id],
141
- :check => ["#{entity_name}:SSH"]
142
- }}],
143
- :linked => {
144
- :entities => [{
145
- :id => entity_id,
146
- :name => entity_name,
147
- :links => {
148
- :checks => ["#{entity_name}:SSH"],
149
- }
150
- }],
151
- :checks => [{
152
- :id => "#{entity_name}:SSH",
153
- :name => 'SSH',
154
- }]
155
- }
156
- }
157
-
158
- aget "/status_report/checks/#{entity_name}:SSH"
159
- expect(last_response).to be_ok
160
- expect(last_response.body).to eq(result.to_json)
161
- end
162
-
163
- it "should not show the status for a check on an entity that's not found" do
164
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity_name).
165
- with(entity_name, 'SSH', :redis => redis).and_return(nil)
166
-
167
- aget "/status_report/checks/#{entity_name}:SSH"
168
- expect(last_response).to be_not_found
169
- end
170
-
171
- it "should not show the status for a check with a malformed name" do
172
- aget "/status_report/checks/SSH"
173
- expect(last_response.status).to eq(400)
174
- expect(last_response.body).to eq(Flapjack.dump_json({:errors => ['Malformed check ID']}))
175
- end
176
-
177
- it "returns a list of scheduled maintenance periods for an entity" do
178
- sched_maint = {:scheduled_maintenances => 'data'}
179
- expect(check_presenter).to receive(:scheduled_maintenance).and_return(sched_maint)
180
-
181
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
182
- with(entity_check).and_return(check_presenter)
183
-
184
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity).
185
- with(entity, 'SSH', :redis => redis).and_return(entity_check)
186
-
187
- expect(entity).to receive(:check_list).and_return(['SSH'])
188
-
189
- expect(Flapjack::Data::Entity).to receive(:find_by_id).
190
- with(entity_id, :redis => redis).and_return(entity)
191
-
192
- expect(entity).to receive(:name).twice.and_return(entity_name)
193
- expect(entity).to receive(:id).twice.and_return(entity_id)
194
-
195
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
196
-
197
- result = {
198
- :scheduled_maintenance_reports => [{
199
- :scheduled_maintenances => 'data',
200
- :links => {
201
- :entity => [entity_id],
202
- :check => ["#{entity_name}:SSH"]
203
- }}],
204
- :linked => {
205
- :entities => [{
206
- :id => entity_id,
207
- :name => entity_name,
208
- :links => {
209
- :checks => ["#{entity_name}:SSH"],
210
- }
211
- }],
212
- :checks => [{
213
- :id => "#{entity_name}:SSH",
214
- :name => 'SSH',
215
- }]
216
- }
217
- }
218
-
219
- aget "/scheduled_maintenance_report/entities/#{entity_id}"
220
- expect(last_response).to be_ok
221
- expect(last_response.body).to eq(result.to_json)
222
- end
223
-
224
- it "returns a list of scheduled maintenance periods within a time window for an entity" do
225
- start = Time.parse('1 Jan 2012')
226
- finish = Time.parse('6 Jan 2012')
227
-
228
- sched_maint = {:scheduled_maintenances => 'data'}
229
- expect(check_presenter).to receive(:scheduled_maintenance).
230
- with(start.to_i, finish.to_i).and_return(sched_maint)
231
-
232
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
233
- with(entity_check).and_return(check_presenter)
234
-
235
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity).
236
- with(entity, 'SSH', :redis => redis).and_return(entity_check)
237
-
238
- expect(entity).to receive(:check_list).and_return(['SSH'])
239
-
240
- expect(Flapjack::Data::Entity).to receive(:find_by_id).
241
- with(entity_id, :redis => redis).and_return(entity)
242
-
243
- expect(entity).to receive(:name).twice.and_return(entity_name)
244
- expect(entity).to receive(:id).twice.and_return(entity_id)
245
-
246
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
247
-
248
- result = {
249
- :scheduled_maintenance_reports => [{
250
- :scheduled_maintenances => 'data',
251
- :links => {
252
- :entity => [entity_id],
253
- :check => ["#{entity_name}:SSH"]
254
- }}],
255
- :linked => {
256
- :entities => [{
257
- :id => entity_id,
258
- :name => entity_name,
259
- :links => {
260
- :checks => ["#{entity_name}:SSH"],
261
- }
262
- }],
263
- :checks => [{
264
- :id => "#{entity_name}:SSH",
265
- :name => 'SSH',
266
- }]
267
- }
268
- }
269
-
270
- aget "/scheduled_maintenance_report/entities/#{entity_id}",
271
- :start_time => start.iso8601, :end_time => finish.iso8601
272
- expect(last_response).to be_ok
273
- expect(last_response.body).to eq(result.to_json)
274
- end
275
-
276
- it "returns a list of scheduled maintenance periods for a check on an entity" do
277
- sched_maint = {:scheduled_maintenances => 'data'}
278
- expect(check_presenter).to receive(:scheduled_maintenance).and_return(sched_maint)
279
-
280
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
281
- with(entity_check).and_return(check_presenter)
282
-
283
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity_name).
284
- with(entity_name, 'SSH', :redis => redis).and_return(entity_check)
285
-
286
- expect(entity).to receive(:name).twice.and_return(entity_name)
287
- expect(entity).to receive(:id).and_return(entity_id)
288
-
289
- expect(entity_check).to receive(:entity).and_return(entity)
290
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
291
-
292
- result = {
293
- :scheduled_maintenance_reports => [{
294
- :scheduled_maintenances => 'data',
295
- :links => {
296
- :entity => [entity_id],
297
- :check => ["#{entity_name}:SSH"]
298
- }}],
299
- :linked => {
300
- :entities => [{
301
- :id => entity_id,
302
- :name => entity_name,
303
- :links => {
304
- :checks => ["#{entity_name}:SSH"],
305
- }
306
- }],
307
- :checks => [{
308
- :id => "#{entity_name}:SSH",
309
- :name => 'SSH',
310
- }]
311
- }
312
- }
313
-
314
- aget "/scheduled_maintenance_report/checks/#{entity_name}:SSH"
315
- expect(last_response).to be_ok
316
- expect(last_response.body).to eq(result.to_json)
317
- end
318
-
319
- it "returns a list of unscheduled maintenance periods for an entity" do
320
- unsched_maint = {:unscheduled_maintenances => 'data'}
321
- expect(check_presenter).to receive(:unscheduled_maintenance).and_return(unsched_maint)
322
-
323
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
324
- with(entity_check).and_return(check_presenter)
325
-
326
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity).
327
- with(entity, 'SSH', :redis => redis).and_return(entity_check)
328
-
329
- expect(entity).to receive(:check_list).and_return(['SSH'])
330
-
331
- expect(Flapjack::Data::Entity).to receive(:find_by_id).
332
- with(entity_id, :redis => redis).and_return(entity)
333
-
334
- expect(entity).to receive(:name).twice.and_return(entity_name)
335
- expect(entity).to receive(:id).twice.and_return(entity_id)
336
-
337
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
338
-
339
- result = {
340
- :unscheduled_maintenance_reports => [{
341
- :unscheduled_maintenances => 'data',
342
- :links => {
343
- :entity => [entity_id],
344
- :check => ["#{entity_name}:SSH"]
345
- }}],
346
- :linked => {
347
- :entities => [{
348
- :id => entity_id,
349
- :name => entity_name,
350
- :links => {
351
- :checks => ["#{entity_name}:SSH"],
352
- }
353
- }],
354
- :checks => [{
355
- :id => "#{entity_name}:SSH",
356
- :name => 'SSH',
357
- }]
358
- }
359
- }
360
-
361
- aget "/unscheduled_maintenance_report/entities/#{entity_id}"
362
- expect(last_response).to be_ok
363
- expect(last_response.body).to eq(result.to_json)
364
- end
365
-
366
- it "returns a list of unscheduled maintenance periods for a check on an entity" do
367
- unsched_maint = {:unscheduled_maintenances => 'data'}
368
- expect(check_presenter).to receive(:unscheduled_maintenance).and_return(unsched_maint)
369
-
370
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
371
- with(entity_check).and_return(check_presenter)
372
-
373
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity_name).
374
- with(entity_name, 'SSH', :redis => redis).and_return(entity_check)
375
-
376
- expect(entity).to receive(:name).twice.and_return(entity_name)
377
- expect(entity).to receive(:id).and_return(entity_id)
378
-
379
- expect(entity_check).to receive(:entity).and_return(entity)
380
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
381
-
382
- result = {
383
- :unscheduled_maintenance_reports => [{
384
- :unscheduled_maintenances => 'data',
385
- :links => {
386
- :entity => [entity_id],
387
- :check => ["#{entity_name}:SSH"]
388
- }}],
389
- :linked => {
390
- :entities => [{
391
- :id => entity_id,
392
- :name => entity_name,
393
- :links => {
394
- :checks => ["#{entity_name}:SSH"],
395
- }
396
- }],
397
- :checks => [{
398
- :id => "#{entity_name}:SSH",
399
- :name => 'SSH',
400
- }]
401
- }
402
- }
403
-
404
- aget "/unscheduled_maintenance_report/checks/#{entity_name}:SSH"
405
- expect(last_response).to be_ok
406
- expect(last_response.body).to eq(result.to_json)
407
- end
408
-
409
- it "returns a list of unscheduled maintenance periods within a time window for a check an entity" do
410
- start = Time.parse('1 Jan 2012')
411
- finish = Time.parse('6 Jan 2012')
412
-
413
- unsched_maint = {:unscheduled_maintenances => 'data'}
414
- expect(check_presenter).to receive(:unscheduled_maintenance).
415
- with(start.to_i, finish.to_i).and_return(unsched_maint)
416
-
417
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
418
- with(entity_check).and_return(check_presenter)
419
-
420
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity_name).
421
- with(entity_name, 'SSH', :redis => redis).and_return(entity_check)
422
-
423
- expect(entity).to receive(:name).twice.and_return(entity_name)
424
- expect(entity).to receive(:id).and_return(entity_id)
425
-
426
- expect(entity_check).to receive(:entity).and_return(entity)
427
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
428
-
429
- result = {
430
- :unscheduled_maintenance_reports => [{
431
- :unscheduled_maintenances => 'data',
432
- :links => {
433
- :entity => [entity_id],
434
- :check => ["#{entity_name}:SSH"]
435
- }}],
436
- :linked => {
437
- :entities => [{
438
- :id => entity_id,
439
- :name => entity_name,
440
- :links => {
441
- :checks => ["#{entity_name}:SSH"],
442
- }
443
- }],
444
- :checks => [{
445
- :id => "#{entity_name}:SSH",
446
- :name => 'SSH',
447
- }]
448
- }
449
- }
450
-
451
- aget "/unscheduled_maintenance_report/checks/#{entity_name}:SSH",
452
- :start_time => start.iso8601, :end_time => finish.iso8601
453
- expect(last_response).to be_ok
454
- expect(last_response.body).to eq(result.to_json)
455
- end
456
-
457
- it "returns a list of outages for a check on an entity" do
458
- outages = {:outages => 'data'}
459
- expect(check_presenter).to receive(:outage).and_return(outages)
460
-
461
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
462
- with(entity_check).and_return(check_presenter)
463
-
464
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity_name).
465
- with(entity_name, 'SSH', :redis => redis).and_return(entity_check)
466
-
467
- expect(entity).to receive(:name).twice.and_return(entity_name)
468
- expect(entity).to receive(:id).and_return(entity_id)
469
-
470
- expect(entity_check).to receive(:entity).and_return(entity)
471
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
472
-
473
- result = {
474
- :outage_reports => [{
475
- :outages => 'data',
476
- :links => {
477
- :entity => [entity_id],
478
- :check => ["#{entity_name}:SSH"]
479
- }}],
480
- :linked => {
481
- :entities => [{
482
- :id => entity_id,
483
- :name => entity_name,
484
- :links => {
485
- :checks => ["#{entity_name}:SSH"],
486
- }
487
- }],
488
- :checks => [{
489
- :id => "#{entity_name}:SSH",
490
- :name => 'SSH',
491
- }]
492
- }
493
- }
494
-
495
- aget "/outage_report/checks/#{entity_name}:SSH"
496
- expect(last_response).to be_ok
497
- expect(last_response.body).to eq(result.to_json)
498
- end
499
-
500
- it "returns a list of downtimes for an entity" do
501
- downtime = {:downtime => 'data'}
502
- expect(check_presenter).to receive(:downtime).and_return(downtime)
503
-
504
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
505
- with(entity_check).and_return(check_presenter)
506
-
507
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity).
508
- with(entity, 'SSH', :redis => redis).and_return(entity_check)
509
-
510
- expect(entity).to receive(:check_list).and_return(['SSH'])
511
-
512
- expect(Flapjack::Data::Entity).to receive(:find_by_id).
513
- with(entity_id, :redis => redis).and_return(entity)
514
-
515
- expect(entity).to receive(:name).twice.and_return(entity_name)
516
- expect(entity).to receive(:id).twice.and_return(entity_id)
517
-
518
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
519
-
520
- result = {
521
- :downtime_reports => [{
522
- :downtime => 'data',
523
- :links => {
524
- :entity => [entity_id],
525
- :check => ["#{entity_name}:SSH"]
526
- }}],
527
- :linked => {
528
- :entities => [{
529
- :id => entity_id,
530
- :name => entity_name,
531
- :links => {
532
- :checks => ["#{entity_name}:SSH"],
533
- }
534
- }],
535
- :checks => [{
536
- :id => "#{entity_name}:SSH",
537
- :name => 'SSH',
538
- }]
539
- }
540
- }
541
-
542
- aget "/downtime_report/entities/#{entity_id}"
543
- expect(last_response).to be_ok
544
- expect(last_response.body).to eq(result.to_json)
545
- end
546
-
547
- it "returns a list of downtimes for a check on an entity" do
548
- downtime = {:downtime => 'data'}
549
- expect(check_presenter).to receive(:downtime).and_return(downtime)
550
-
551
- expect(Flapjack::Gateways::JSONAPI::CheckPresenter).to receive(:new).
552
- with(entity_check).and_return(check_presenter)
553
-
554
- expect(Flapjack::Data::EntityCheck).to receive(:for_entity_name).
555
- with(entity_name, 'SSH', :redis => redis).and_return(entity_check)
556
-
557
- expect(entity).to receive(:name).twice.and_return(entity_name)
558
- expect(entity).to receive(:id).and_return(entity_id)
559
-
560
- expect(entity_check).to receive(:entity).and_return(entity)
561
- expect(entity_check).to receive(:check).exactly(3).times.and_return('SSH')
562
-
563
- result = {
564
- :downtime_reports => [{
565
- :downtime => 'data',
566
- :links => {
567
- :entity => [entity_id],
568
- :check => ["#{entity_name}:SSH"]
569
- }}],
570
- :linked => {
571
- :entities => [{
572
- :id => entity_id,
573
- :name => entity_name,
574
- :links => {
575
- :checks => ["#{entity_name}:SSH"],
576
- }
577
- }],
578
- :checks => [{
579
- :id => "#{entity_name}:SSH",
580
- :name => 'SSH',
581
- }]
582
- }
583
- }
584
-
585
- aget "/downtime_report/checks/#{entity_name}:SSH"
586
- expect(last_response).to be_ok
587
- expect(last_response.body).to eq(result.to_json)
588
- end
589
-
590
- end