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
@@ -0,0 +1,976 @@
1
+ require 'spec_helper'
2
+ require 'flapjack/data/scheduled_maintenance'
3
+
4
+ describe Flapjack::Data::ScheduledMaintenance, :redis => true do
5
+
6
+ # it "creates an unscheduled maintenance period from a human readable time" do
7
+ # Flapjack::Data::EntityCheck.create_maintenance(:redis => @redis, :entity => name, :check => check, :type => 'unscheduled', :started => '14/3/2027 3pm', :duration => '30 minutes', :reason => 'oops')
8
+ # t = Time.local(2027, 3, 14, 15, 0).to_i
9
+
10
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
11
+ # expect(ec).to be_in_unscheduled_maintenance
12
+
13
+ # umps = ec.maintenances(nil, nil, :scheduled => false)
14
+ # expect(umps).not_to be_nil
15
+ # expect(umps).to be_an(Array)
16
+ # expect(umps.size).to eq(1)
17
+ # expect(umps[0]).to be_a(Hash)
18
+
19
+ # start_time = umps[0][:start_time]
20
+ # expect(start_time).not_to be_nil
21
+ # expect(start_time).to be_an(Integer)
22
+ # expect(start_time).to eq(t)
23
+
24
+ # duration = umps[0][:duration]
25
+ # expect(duration).not_to be_nil
26
+ # expect(duration).to be_a(Float)
27
+ # expect(duration).to eq(1800.0)
28
+
29
+ # summary = @redis.get("#{name}:#{check}:#{t}:unscheduled_maintenance:summary")
30
+ # expect(summary).not_to be_nil
31
+ # expect(summary).to eq('oops')
32
+ # end
33
+
34
+ # it "ends an unscheduled maintenance period", :time => true do
35
+ # t = Time.now.to_i
36
+ # later_t = t + (15 * 60)
37
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
38
+
39
+ # ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
40
+ # expect(ec).to be_in_unscheduled_maintenance
41
+
42
+ # Delorean.time_travel_to(Time.at(later_t))
43
+ # expect(ec).to be_in_unscheduled_maintenance
44
+ # ec.end_unscheduled_maintenance(later_t)
45
+ # expect(ec).not_to be_in_unscheduled_maintenance
46
+
47
+ # umps = ec.maintenances(nil, nil, :scheduled => false)
48
+ # expect(umps).not_to be_nil
49
+ # expect(umps).to be_an(Array)
50
+ # expect(umps.size).to eq(1)
51
+ # expect(umps[0]).to be_a(Hash)
52
+
53
+ # start_time = umps[0][:start_time]
54
+ # expect(start_time).not_to be_nil
55
+ # expect(start_time).to be_an(Integer)
56
+ # expect(start_time).to eq(t)
57
+
58
+ # duration = umps[0][:duration]
59
+ # expect(duration).not_to be_nil
60
+ # expect(duration).to be_a(Float)
61
+ # expect(duration).to eq(15 * 60)
62
+ # end
63
+
64
+ # it "creates a scheduled maintenance period for a future time" do
65
+ # t = Time.now.to_i
66
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
67
+ # ec.create_scheduled_maintenance(t + (60 * 60),
68
+ # half_an_hour, :summary => "30 minutes")
69
+
70
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
71
+ # expect(smps).not_to be_nil
72
+ # expect(smps).to be_an(Array)
73
+ # expect(smps.size).to eq(1)
74
+ # expect(smps[0]).to be_a(Hash)
75
+
76
+ # start_time = smps[0][:start_time]
77
+ # expect(start_time).not_to be_nil
78
+ # expect(start_time).to be_an(Integer)
79
+ # expect(start_time).to eq(t + (60 * 60))
80
+
81
+ # duration = smps[0][:duration]
82
+ # expect(duration).not_to be_nil
83
+ # expect(duration).to be_a(Float)
84
+ # expect(duration).to eq(half_an_hour)
85
+ # end
86
+
87
+ # # TODO this should probably enforce that it starts in the future
88
+ # it "creates a scheduled maintenance period covering the current time" do
89
+ # t = Time.now.to_i
90
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
91
+ # ec.create_scheduled_maintenance(t - (60 * 60),
92
+ # 2 * (60 * 60), :summary => "2 hours")
93
+
94
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
95
+ # expect(smps).not_to be_nil
96
+ # expect(smps).to be_an(Array)
97
+ # expect(smps.size).to eq(1)
98
+ # expect(smps[0]).to be_a(Hash)
99
+
100
+ # start_time = smps[0][:start_time]
101
+ # expect(start_time).not_to be_nil
102
+ # expect(start_time).to be_an(Integer)
103
+ # expect(start_time).to eq(t - (60 * 60))
104
+
105
+ # duration = smps[0][:duration]
106
+ # expect(duration).not_to be_nil
107
+ # expect(duration).to be_a(Float)
108
+ # expect(duration).to eq(2 * (60 * 60))
109
+ # end
110
+
111
+ # it "creates an scheduled maintenance period from a human readable time" do
112
+ # Flapjack::Data::EntityCheck.create_maintenance(:redis => @redis, :entity => name, :check => check, :type => 'scheduled', :started => '14/3/2027 3pm', :duration => '30 minutes', :reason => 'oops')
113
+ # t = Time.local(2027, 3, 14, 15, 0).to_i
114
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
115
+
116
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
117
+ # expect(smps).not_to be_nil
118
+ # expect(smps).to be_an(Array)
119
+ # expect(smps.size).to eq(1)
120
+ # expect(smps[0]).to be_a(Hash)
121
+
122
+ # start_time = smps[0][:start_time]
123
+ # expect(start_time).not_to be_nil
124
+ # expect(start_time).to be_an(Integer)
125
+ # expect(start_time).to eq(t)
126
+
127
+ # duration = smps[0][:duration]
128
+ # expect(duration).not_to be_nil
129
+ # expect(duration).to be_a(Float)
130
+ # expect(duration).to eq(1800.0)
131
+
132
+ # summary = @redis.get("#{name}:#{check}:#{t}:scheduled_maintenance:summary")
133
+ # expect(summary).not_to be_nil
134
+ # expect(summary).to eq('oops')
135
+ # end
136
+
137
+ # it "removes a scheduled maintenance period for a future time" do
138
+ # t = Time.now.to_i
139
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
140
+ # ec.create_scheduled_maintenance(t + (60 * 60),
141
+ # 2 * (60 * 60), :summary => "2 hours")
142
+
143
+ # ec.end_scheduled_maintenance(t + (60 * 60))
144
+
145
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
146
+ # expect(smps).not_to be_nil
147
+ # expect(smps).to be_an(Array)
148
+ # expect(smps).to be_empty
149
+ # end
150
+
151
+ # # maint period starts an hour from now, goes for two hours -- at 30 minutes into
152
+ # # it we stop it, and its duration should be 30 minutes
153
+ # it "shortens a scheduled maintenance period covering a current time", :time => true do
154
+ # t = Time.now.to_i
155
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
156
+ # ec.create_scheduled_maintenance(t + (60 * 60),
157
+ # 2 * (60 * 60), :summary => "2 hours")
158
+
159
+ # Delorean.time_travel_to(Time.at(t + (90 * 60)))
160
+
161
+ # ec.end_scheduled_maintenance(t + (60 * 60))
162
+
163
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
164
+ # expect(smps).not_to be_nil
165
+ # expect(smps).to be_an(Array)
166
+ # expect(smps).not_to be_empty
167
+ # expect(smps.size).to eq(1)
168
+ # expect(smps.first[:duration]).to eq(30 * 60)
169
+ # end
170
+
171
+ # it "does not alter or remove a scheduled maintenance period covering a past time", :time => true do
172
+ # t = Time.now.to_i
173
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
174
+ # ec.create_scheduled_maintenance(t + (60 * 60),
175
+ # 2 * (60 * 60), :summary => "2 hours")
176
+
177
+ # Delorean.time_travel_to(Time.at(t + (6 * (60 * 60))))
178
+
179
+ # ec.end_scheduled_maintenance(t + (60 * 60))
180
+
181
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
182
+ # expect(smps).not_to be_nil
183
+ # expect(smps).to be_an(Array)
184
+ # expect(smps).not_to be_empty
185
+ # expect(smps.size).to eq(1)
186
+ # expect(smps.first[:duration]).to eq(2 * (60 * 60))
187
+ # end
188
+
189
+ # it "returns a list of scheduled maintenance periods" do
190
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
191
+ # ec.create_scheduled_maintenance(five_hours_ago, half_an_hour,
192
+ # :summary => "first")
193
+ # ec.create_scheduled_maintenance(three_hours_ago, half_an_hour,
194
+ # :summary => "second")
195
+
196
+ # smp = ec.maintenances(nil, nil, :scheduled => true)
197
+ # expect(smp).not_to be_nil
198
+ # expect(smp).to be_an(Array)
199
+ # expect(smp.size).to eq(2)
200
+ # expect(smp[0]).to eq(:start_time => five_hours_ago,
201
+ # :end_time => five_hours_ago + half_an_hour,
202
+ # :duration => half_an_hour,
203
+ # :summary => "first")
204
+ # expect(smp[1]).to eq(:start_time => three_hours_ago,
205
+ # :end_time => three_hours_ago + half_an_hour,
206
+ # :duration => half_an_hour,
207
+ # :summary => "second")
208
+ # end
209
+
210
+ # it "returns a list of unscheduled maintenance periods" do
211
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
212
+ # ec.create_unscheduled_maintenance(five_hours_ago,
213
+ # half_an_hour, :summary => "first")
214
+ # ec.create_unscheduled_maintenance(three_hours_ago,
215
+ # half_an_hour, :summary => "second")
216
+
217
+ # ump = ec.maintenances(nil, nil, :scheduled => false)
218
+ # expect(ump).not_to be_nil
219
+ # expect(ump).to be_an(Array)
220
+ # expect(ump.size).to eq(2)
221
+ # expect(ump[0]).to eq(:start_time => five_hours_ago,
222
+ # :end_time => five_hours_ago + half_an_hour,
223
+ # :duration => half_an_hour,
224
+ # :summary => "first")
225
+ # expect(ump[1]).to eq(:start_time => three_hours_ago,
226
+ # :end_time => three_hours_ago + half_an_hour,
227
+ # :duration => half_an_hour,
228
+ # :summary => "second")
229
+ # end
230
+
231
+ # it "finds current scheduled maintenance periods for multiple entities" do
232
+ # ec = nil
233
+
234
+ # %w(alpha lima bravo).each do |entity|
235
+ # Flapjack::Data::Entity.add({ 'name' => entity }, :redis => @redis)
236
+
237
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(entity, check, :redis => @redis)
238
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours,
239
+ # :summary => "Test scheduled maintenance for #{entity}")
240
+ # end
241
+
242
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis,
243
+ # :type => 'scheduled', :finishing => 'more than 0 minutes from now').sort_by { |k| k[:entity] }
244
+
245
+ # expect(smp).to be_an(Array)
246
+ # expect(smp.size).to eq(3)
247
+ # %w(alpha bravo lima).each_with_index do |entity, index|
248
+ # expect(smp[index]).to eq(:entity => entity,
249
+ # :check => "ping",
250
+ # # The state here is nil due to no check having gone
251
+ # # through for this item. This is normally 'critical' or 'ok'
252
+ # :state => nil,
253
+ # :start_time => five_hours_ago,
254
+ # :end_time => five_hours_ago + seven_hours,
255
+ # :duration => seven_hours,
256
+ # :summary => "Test scheduled maintenance for #{entity}")
257
+ # end
258
+ # end
259
+
260
+ # it "finds current unscheduled maintenance periods for multiple entities" do
261
+ # ec = nil
262
+
263
+ # %w(alpha bravo lima).each do |entity|
264
+ # Flapjack::Data::Entity.add({ 'name' => entity }, :redis => @redis)
265
+
266
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(entity, check, :redis => @redis)
267
+ # ec.create_unscheduled_maintenance(five_hours_ago, seven_hours, :summary => "Test unscheduled maintenance for #{entity}")
268
+ # end
269
+
270
+ # ump = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'unscheduled', :finishing => 'more than 0 minutes from now').sort_by { |k| k[:entity] }
271
+
272
+ # expect(ump).not_to be_nil
273
+ # expect(ump).to be_an(Array)
274
+ # expect(ump.size).to eq(3)
275
+ # %w(alpha bravo lima).each_with_index do |entity, index|
276
+ # expect(ump[index]).to eq(:entity => entity,
277
+ # :check => "ping",
278
+ # # The state here is nil due to no check having gone
279
+ # # through for this item. This is normally 'critical' or 'ok'
280
+ # :state => nil,
281
+ # :start_time => five_hours_ago,
282
+ # :end_time => five_hours_ago + seven_hours,
283
+ # :duration => seven_hours,
284
+ # :summary => "Test unscheduled maintenance for #{entity}")
285
+ # end
286
+ # end
287
+
288
+ # it "finds all scheduled maintenance starting more than 3 hours ago" do
289
+ # ['more than three hours ago', 'before 3 hours ago'].each do |input|
290
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
291
+
292
+ # # Maintenance in the past, now ended
293
+ # ec.create_scheduled_maintenance(five_hours_ago, half_an_hour, :summary => "30 minute maintenance")
294
+ # # Maintenance started in the past, still running
295
+ # ec.create_scheduled_maintenance(three_hours_ago + five_minutes, seven_hours, :summary => "Scheduled maintenance started 3 hours ago")
296
+ # ec.create_scheduled_maintenance(four_hours_ago, seven_hours, :summary => "Scheduled maintenance started 4 hours ago")
297
+
298
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :started => input).sort_by { |k| k[:entity] }
299
+
300
+ # expect(smp).to be_an(Array)
301
+ # expect(smp.size).to eq(2)
302
+
303
+ # expect(smp[0]).to eq(:entity => name,
304
+ # :check => check,
305
+ # # The state here is nil due to no check having gone
306
+ # # through for this item. This is normally 'critical' or 'ok'
307
+ # :state => nil,
308
+ # :start_time => five_hours_ago,
309
+ # :end_time => five_hours_ago + half_an_hour,
310
+ # :duration => half_an_hour,
311
+ # :summary => "30 minute maintenance")
312
+ # expect(smp[1]).to eq(:entity => name,
313
+ # :check => check,
314
+ # # The state here is nil due to no check having gone
315
+ # # through for this item. This is normally 'critical' or 'ok'
316
+ # :state => nil,
317
+ # :start_time => four_hours_ago,
318
+ # :end_time => four_hours_ago + seven_hours,
319
+ # :duration => seven_hours,
320
+ # :summary => "Scheduled maintenance started 4 hours ago")
321
+ # end
322
+ # end
323
+
324
+ # it "finds all scheduled maintenance starting within the next four hours" do
325
+ # ['less than four hours ago', 'after 4 hours ago'].each do |input|
326
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
327
+
328
+ # # Maintenance in the past, now ended
329
+ # ec.create_scheduled_maintenance(five_hours_ago, half_an_hour, :summary => "30 minute maintenance")
330
+ # # Maintenance started in the past, still running
331
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago")
332
+ # ec.create_scheduled_maintenance(four_hours_ago, seven_hours, :summary => "Scheduled maintenance started 4 hours ago")
333
+
334
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :started => input).sort_by { |k| k[:entity] }
335
+
336
+ # expect(smp).to be_an(Array)
337
+ # expect(smp.size).to eq(1)
338
+
339
+ # expect(smp[0]).to eq(:entity => name,
340
+ # :check => check,
341
+ # # The state here is nil due to no check having gone
342
+ # # through for this item. This is normally 'critical' or 'ok'
343
+ # :state => nil,
344
+ # :start_time => three_hours_ago,
345
+ # :end_time => three_hours_ago + seven_hours,
346
+ # :duration => seven_hours,
347
+ # :summary => "Scheduled maintenance started 3 hours ago")
348
+ # end
349
+ # end
350
+
351
+ # it "finds all scheduled maintenance ending within the next two hours" do
352
+ # ['less than two hours', 'before 2 hours'].each do |input|
353
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
354
+ # # Maintenance in the past, now ended
355
+ # ec.create_scheduled_maintenance(two_hours_ago + five_minutes, half_an_hour, :summary => "Scheduled maintenance started 3 hours ago")
356
+ # # Maintenance started in the past, still running
357
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
358
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours + five_minutes, :summary => "Scheduled maintenance started 5 hours ago")
359
+ # # Current maintenance
360
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Scheduled maintenance started now")
361
+ # # Future maintenance
362
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
363
+
364
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :finishing => input).sort_by { |k| k[:entity] }
365
+
366
+ # expect(smp).to be_an(Array)
367
+ # expect(smp.size).to eq(3)
368
+
369
+ # expect(smp[0]).to eq(:entity => name,
370
+ # :check => check,
371
+ # # The state here is nil due to no check having gone
372
+ # # through for this item. This is normally 'critical' or 'ok'
373
+ # :state => nil,
374
+ # :start_time => two_hours_ago + five_minutes,
375
+ # :end_time => two_hours_ago + five_minutes + half_an_hour,
376
+ # :duration => half_an_hour,
377
+ # :summary => "Scheduled maintenance started 3 hours ago")
378
+ # expect(smp[1]).to eq(:entity => name,
379
+ # :check => check,
380
+ # # The state here is nil due to no check having gone
381
+ # # through for this item. This is normally 'critical' or 'ok'
382
+ # :state => nil,
383
+ # :start_time => t,
384
+ # :end_time => t + half_an_hour,
385
+ # :duration => half_an_hour,
386
+ # :summary => "Scheduled maintenance started now")
387
+ # expect(smp[2]).to eq(:entity => name,
388
+ # :check => check,
389
+ # # The state here is nil due to no check having gone
390
+ # # through for this item. This is normally 'critical' or 'ok'
391
+ # :state => nil,
392
+ # :start_time => t + five_minutes,
393
+ # :end_time => t + five_minutes + half_an_hour,
394
+ # :duration => half_an_hour,
395
+ # :summary => "Scheduled maintenance starting in 5 minutes")
396
+ # end
397
+ # end
398
+
399
+ # it "finds all scheduled maintenance ending between two times (1 hour ago - 2 hours ago)" do
400
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
401
+ # # Maintenance in the past, now ended
402
+ # ec.create_scheduled_maintenance(two_hours_ago + five_minutes, half_an_hour, :summary => "Scheduled maintenance started 1 hour, 55 minutes ago")
403
+ # # Maintenance started in the past, still running
404
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
405
+ # ec.create_scheduled_maintenance(five_hours_ago, three_hours + five_minutes, :summary => "Scheduled maintenance started 5 hours ago")
406
+ # # Future maintenance
407
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
408
+
409
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :finishing => 'between one and two hours ago').sort_by { |k| k[:entity] }
410
+
411
+ # expect(smp).to be_an(Array)
412
+ # expect(smp.size).to eq(2)
413
+
414
+ # expect(smp[0]).to eq(:entity => name,
415
+ # :check => check,
416
+ # # The state here is nil due to no check having gone
417
+ # # through for this item. This is normally 'critical' or 'ok'
418
+ # :state => nil,
419
+ # :start_time => five_hours_ago,
420
+ # :end_time => five_hours_ago + three_hours + five_minutes,
421
+ # :duration => three_hours + five_minutes,
422
+ # :summary => "Scheduled maintenance started 5 hours ago")
423
+ # expect(smp[1]).to eq(:entity => name,
424
+ # :check => check,
425
+ # # The state here is nil due to no check having gone
426
+ # # through for this item. This is normally 'critical' or 'ok'
427
+ # :state => nil,
428
+ # :start_time => two_hours_ago + five_minutes,
429
+ # :end_time => two_hours_ago + five_minutes + half_an_hour,
430
+ # :duration => half_an_hour,
431
+ # :summary => "Scheduled maintenance started 1 hour, 55 minutes ago")
432
+ # end
433
+
434
+ # it "finds all scheduled maintenance ending between two times (1 hour from now - 2 hours from now)" do
435
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
436
+ # # Maintenance in the past, now ended
437
+ # ec.create_scheduled_maintenance(two_hours_ago + five_minutes, half_an_hour, :summary => "Scheduled maintenance started 1 hour, 55 minutes ago")
438
+ # # Maintenance started in the past, still running
439
+ # ec.create_scheduled_maintenance(three_hours_ago, five_hours - five_minutes, :summary => "Scheduled maintenance started 3 hours ago for 4 hours, 25 minutes")
440
+ # ec.create_scheduled_maintenance(five_hours_ago, three_hours + five_minutes, :summary => "Scheduled maintenance started 5 hours ago")
441
+ # # Future maintenance
442
+ # ec.create_scheduled_maintenance(t + five_minutes, one_hour, :summary => "Scheduled maintenance starting in 5 minutes")
443
+
444
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :finishing => 'between one and two hours').sort_by { |k| k[:entity] }
445
+
446
+ # expect(smp).to be_an(Array)
447
+ # expect(smp.size).to eq(2)
448
+
449
+ # expect(smp[0]).to eq(:entity => name,
450
+ # :check => check,
451
+ # # The state here is nil due to no check having gone
452
+ # # through for this item. This is normally 'critical' or 'ok'
453
+ # :state => nil,
454
+ # :start_time => three_hours_ago,
455
+ # :end_time => three_hours_ago + five_hours - five_minutes,
456
+ # :duration => five_hours - five_minutes,
457
+ # :summary => "Scheduled maintenance started 3 hours ago for 4 hours, 25 minutes")
458
+ # expect(smp[1]).to eq(:entity => name,
459
+ # :check => check,
460
+ # # The state here is nil due to no check having gone
461
+ # # through for this item. This is normally 'critical' or 'ok'
462
+ # :state => nil,
463
+ # :start_time => t + five_minutes,
464
+ # :end_time => t + five_minutes + one_hour,
465
+ # :duration => one_hour,
466
+ # :summary => "Scheduled maintenance starting in 5 minutes")
467
+ # end
468
+
469
+ # it "finds all scheduled maintenance ending in more than two hours" do
470
+ # ['more than two hours', 'after 2 hours'].each do |input|
471
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
472
+ # # Maintenance in the past, now ended
473
+ # ec.create_scheduled_maintenance(two_hours_ago, half_an_hour, :summary => "Scheduled maintenance started 2 hours ago")
474
+ # # Maintenance started in the past, still running
475
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
476
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours, :summary => "Scheduled maintenance started 5 hours ago")
477
+ # # Current maintenance
478
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Scheduled maintenance started now")
479
+ # # Future maintenance
480
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
481
+
482
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :finishing => input).sort_by { |k| k[:entity] }
483
+
484
+ # expect(smp).to be_an(Array)
485
+ # expect(smp.size).to eq(1)
486
+
487
+ # expect(smp[0]).to eq(:entity => name,
488
+ # :check => check,
489
+ # # The state here is nil due to no check having gone
490
+ # # through for this item. This is normally 'critical' or 'ok'
491
+ # :state => nil,
492
+ # :start_time => three_hours_ago,
493
+ # :end_time => three_hours_ago + seven_hours,
494
+ # :duration => seven_hours,
495
+ # :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
496
+ # end
497
+ # end
498
+
499
+ # it "finds all scheduled maintenance with a duration of less than one hour" do
500
+ # ['less than', 'before'].each do |input|
501
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
502
+ # # Maintenance in the past, now ended
503
+ # ec.create_scheduled_maintenance(two_hours_ago, half_an_hour, :summary => "Scheduled maintenance started 3 hours ago")
504
+ # # Maintenance started in the past, still running
505
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
506
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours, :summary => "Scheduled maintenance started 5 hours ago")
507
+ # # Current maintenance
508
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Scheduled maintenance started now")
509
+ # # Future maintenance
510
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
511
+
512
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :duration => "#{input} one hour").sort_by { |k| k[:entity] }
513
+
514
+ # expect(smp).to be_an(Array)
515
+ # expect(smp.size).to eq(3)
516
+
517
+ # expect(smp[0]).to eq(:entity => name,
518
+ # :check => check,
519
+ # # The state here is nil due to no check having gone
520
+ # # through for this item. This is normally 'critical' or 'ok'
521
+ # :state => nil,
522
+ # :start_time => two_hours_ago,
523
+ # :end_time => two_hours_ago + half_an_hour,
524
+ # :duration => half_an_hour,
525
+ # :summary => "Scheduled maintenance started 3 hours ago")
526
+ # expect(smp[1]).to eq(:entity => name,
527
+ # :check => check,
528
+ # # The state here is nil due to no check having gone
529
+ # # through for this item. This is normally 'critical' or 'ok'
530
+ # :state => nil,
531
+ # :start_time => t,
532
+ # :end_time => t + half_an_hour,
533
+ # :duration => half_an_hour,
534
+ # :summary => "Scheduled maintenance started now")
535
+ # expect(smp[2]).to eq(:entity => name,
536
+ # :check => check,
537
+ # # The state here is nil due to no check having gone
538
+ # # through for this item. This is normally 'critical' or 'ok'
539
+ # :state => nil,
540
+ # :start_time => t + five_minutes,
541
+ # :end_time => t + five_minutes + half_an_hour,
542
+ # :duration => half_an_hour,
543
+ # :summary => "Scheduled maintenance starting in 5 minutes")
544
+ # end
545
+ # end
546
+
547
+ # it "finds all scheduled maintenance with a duration of 30 minutes" do
548
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
549
+ # # Maintenance in the past, now ended
550
+ # ec.create_scheduled_maintenance(two_hours_ago, half_an_hour, :summary => "Scheduled maintenance started 3 hours ago")
551
+ # # Maintenance started in the past, still running
552
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
553
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours, :summary => "Scheduled maintenance started 5 hours ago")
554
+ # # Current maintenance
555
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Scheduled maintenance started now")
556
+ # # Future maintenance
557
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
558
+
559
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :duration => '30 minutes').sort_by { |k| k[:entity] }
560
+
561
+ # expect(smp).to be_an(Array)
562
+ # expect(smp.size).to eq(3)
563
+
564
+ # expect(smp[0]).to eq(:entity => name,
565
+ # :check => check,
566
+ # # The state here is nil due to no check having gone
567
+ # # through for this item. This is normally 'critical' or 'ok'
568
+ # :state => nil,
569
+ # :start_time => two_hours_ago,
570
+ # :end_time => two_hours_ago + half_an_hour,
571
+ # :duration => half_an_hour,
572
+ # :summary => "Scheduled maintenance started 3 hours ago")
573
+ # expect(smp[1]).to eq(:entity => name,
574
+ # :check => check,
575
+ # # The state here is nil due to no check having gone
576
+ # # through for this item. This is normally 'critical' or 'ok'
577
+ # :state => nil,
578
+ # :start_time => t,
579
+ # :end_time => t + half_an_hour,
580
+ # :duration => half_an_hour,
581
+ # :summary => "Scheduled maintenance started now")
582
+ # expect(smp[2]).to eq(:entity => name,
583
+ # :check => check,
584
+ # # The state here is nil due to no check having gone
585
+ # # through for this item. This is normally 'critical' or 'ok'
586
+ # :state => nil,
587
+ # :start_time => t + five_minutes,
588
+ # :end_time => t + five_minutes + half_an_hour,
589
+ # :duration => half_an_hour,
590
+ # :summary => "Scheduled maintenance starting in 5 minutes")
591
+ # end
592
+
593
+ # it "finds all scheduled maintenance with a duration of between 15 and 65 minutes" do
594
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
595
+ # # Maintenance in the past, now ended
596
+ # ec.create_scheduled_maintenance(two_hours_ago, half_an_hour, :summary => "Scheduled maintenance started 3 hours ago")
597
+ # # Maintenance started in the past, still running
598
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
599
+ # ec.create_scheduled_maintenance(five_hours_ago, one_hour, :summary => "Scheduled maintenance started 5 hours ago")
600
+ # # Current maintenance
601
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Scheduled maintenance started now")
602
+ # # Future maintenance
603
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
604
+
605
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :duration => 'between 15 and 65 minutes').sort_by { |k| k[:entity] }
606
+
607
+ # expect(smp).to be_an(Array)
608
+ # expect(smp.size).to eq(4)
609
+
610
+ # expect(smp[1]).to eq(:entity => name,
611
+ # :check => check,
612
+ # # The state here is nil due to no check having gone
613
+ # # through for this item. This is normally 'critical' or 'ok'
614
+ # :state => nil,
615
+ # :start_time => two_hours_ago,
616
+ # :end_time => two_hours_ago + half_an_hour,
617
+ # :duration => half_an_hour,
618
+ # :summary => "Scheduled maintenance started 3 hours ago")
619
+ # expect(smp[0]).to eq(:entity => name,
620
+ # :check => check,
621
+ # # The state here is nil due to no check having gone
622
+ # # through for this item. This is normally 'critical' or 'ok'
623
+ # :state => nil,
624
+ # :start_time => five_hours_ago,
625
+ # :end_time => five_hours_ago + one_hour,
626
+ # :duration => one_hour,
627
+ # :summary => "Scheduled maintenance started 5 hours ago")
628
+ # expect(smp[2]).to eq(:entity => name,
629
+ # :check => check,
630
+ # # The state here is nil due to no check having gone
631
+ # # through for this item. This is normally 'critical' or 'ok'
632
+ # :state => nil,
633
+ # :start_time => t,
634
+ # :end_time => t + half_an_hour,
635
+ # :duration => half_an_hour,
636
+ # :summary => "Scheduled maintenance started now")
637
+ # expect(smp[3]).to eq(:entity => name,
638
+ # :check => check,
639
+ # # The state here is nil due to no check having gone
640
+ # # through for this item. This is normally 'critical' or 'ok'
641
+ # :state => nil,
642
+ # :start_time => t + five_minutes,
643
+ # :end_time => t + five_minutes + half_an_hour,
644
+ # :duration => half_an_hour,
645
+ # :summary => "Scheduled maintenance starting in 5 minutes")
646
+ # end
647
+
648
+ # it "finds all scheduled maintenance with a duration of more than one hour" do
649
+ # ['more than, after'].each do |input|
650
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
651
+ # # Maintenance in the past, now ended
652
+ # ec.create_scheduled_maintenance(two_hours_ago, half_an_hour, :summary => "Scheduled maintenance started 3 hours ago")
653
+ # # Maintenance started in the past, still running
654
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
655
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours, :summary => "Scheduled maintenance started 5 hours ago")
656
+ # # Current maintenance
657
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Scheduled maintenance started now")
658
+ # # Future maintenance
659
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
660
+
661
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :duration => "#{input} one hour").sort_by { |k| k[:entity] }
662
+
663
+ # expect(smp).to be_an(Array)
664
+ # expect(smp.size).to eq(2)
665
+
666
+ # expect(smp[0]).to eq(:entity => name,
667
+ # :check => check,
668
+ # # The state here is nil due to no check having gone
669
+ # # through for this item. This is normally 'critical' or 'ok'
670
+ # :state => nil,
671
+ # :start_time => five_hours_ago,
672
+ # :end_time => five_hours_ago + seven_hours,
673
+ # :duration => seven_hours,
674
+ # :summary => "Scheduled maintenance started 5 hours ago")
675
+ # expect(smp[1]).to eq(:entity => name,
676
+ # :check => check,
677
+ # # The state here is nil due to no check having gone
678
+ # # through for this item. This is normally 'critical' or 'ok'
679
+ # :state => nil,
680
+ # :start_time => three_hours_ago,
681
+ # :end_time => three_hours_ago + seven_hours,
682
+ # :duration => seven_hours,
683
+ # :summary => "Scheduled maintenance started 3 hours ago for 7 hours")
684
+ # end
685
+ # end
686
+
687
+ # it "finds all scheduled maintenance with a particular entity name" do
688
+ # ['bravo', 'br.*'].each do |input|
689
+ # %w(alpha bravo lima).each do |entity|
690
+ # Flapjack::Data::Entity.add({ 'name' => entity }, :redis => @redis)
691
+
692
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(entity, check, :redis => @redis)
693
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours, :summary => "Test scheduled maintenance for #{entity}")
694
+ # end
695
+
696
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :entity => input ).sort_by { |k| k[:entity] }
697
+
698
+ # expect(smp).to be_an(Array)
699
+ # expect(smp.size).to eq(1)
700
+ # expect(smp[0]).to eq(:entity => "bravo",
701
+ # :check => check,
702
+ # # The state here is nil due to no check having gone
703
+ # # through for this item. This is normally 'critical' or 'ok'
704
+ # :state => nil,
705
+ # :start_time => five_hours_ago,
706
+ # :end_time => five_hours_ago + seven_hours,
707
+ # :duration => seven_hours,
708
+ # :summary => "Test scheduled maintenance for bravo")
709
+ # end
710
+ # end
711
+
712
+ # it "finds all scheduled maintenance with a particular check name" do
713
+ # ['http', 'ht.*'].each do |input|
714
+ # %w(ping http ssh).each do |check|
715
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
716
+ # ec.create_scheduled_maintenance(five_hours_ago, seven_hours, :summary => "Test scheduled maintenance for #{check}")
717
+ # end
718
+
719
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :check => input ).sort_by { |k| k[:entity] }
720
+
721
+ # expect(smp).to be_an(Array)
722
+ # expect(smp.size).to eq(1)
723
+ # expect(smp[0]).to eq(:entity => name,
724
+ # :check => "http",
725
+ # # The state here is nil due to no check having gone
726
+ # # through for this item. This is normally 'critical' or 'ok'
727
+ # :state => nil,
728
+ # :start_time => five_hours_ago,
729
+ # :end_time => five_hours_ago + seven_hours,
730
+ # :duration => seven_hours,
731
+ # :summary => "Test scheduled maintenance for http")
732
+ # end
733
+ # end
734
+
735
+ # it "finds all scheduled maintenance with a particular summary" do
736
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
737
+
738
+ # # Maintenance started in the past, still running
739
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Bring me a shrubbery!")
740
+ # # Current maintenance
741
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Bring me a shrubbery!")
742
+ # # Future maintenance
743
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
744
+
745
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :reason => "Bring me a shrubbery!").sort_by { |k| k[:entity] }
746
+
747
+ # expect(smp).to be_an(Array)
748
+ # expect(smp.size).to eq(2)
749
+
750
+ # expect(smp[0]).to eq(:entity => name,
751
+ # :check => check,
752
+ # # The state here is nil due to no check having gone
753
+ # # through for this item. This is normally 'critical' or 'ok'
754
+ # :state => nil,
755
+ # :start_time => three_hours_ago,
756
+ # :end_time => three_hours_ago + seven_hours,
757
+ # :duration => seven_hours,
758
+ # :summary => "Bring me a shrubbery!")
759
+ # expect(smp[1]).to eq(:entity => name,
760
+ # :check => check,
761
+ # # The state here is nil due to no check having gone
762
+ # # through for this item. This is normally 'critical' or 'ok'
763
+ # :state => nil,
764
+ # :start_time => t,
765
+ # :end_time => t + half_an_hour,
766
+ # :duration => half_an_hour,
767
+ # :summary => "Bring me a shrubbery!")
768
+ # end
769
+
770
+ # it "finds all scheduled maintenance with a summary regex" do
771
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
772
+
773
+ # # Maintenance started in the past, still running
774
+ # ec.create_scheduled_maintenance(three_hours_ago, seven_hours, :summary => "Bring me a shrubbery!")
775
+ # # Current maintenance
776
+ # ec.create_scheduled_maintenance(t, half_an_hour, :summary => "Bring me a shrubbery!")
777
+ # # Future maintenance
778
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
779
+
780
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled', :reason => '.* shrubbery!').sort_by { |k| k[:entity] }
781
+
782
+ # expect(smp).to be_an(Array)
783
+ # expect(smp.size).to eq(2)
784
+
785
+ # expect(smp[0]).to eq(:entity => name,
786
+ # :check => check,
787
+ # # The state here is nil due to no check having gone
788
+ # # through for this item. This is normally 'critical' or 'ok'
789
+ # :state => nil,
790
+ # :start_time => three_hours_ago,
791
+ # :end_time => three_hours_ago + seven_hours,
792
+ # :duration => seven_hours,
793
+ # :summary => "Bring me a shrubbery!")
794
+ # expect(smp[1]).to eq(:entity => name,
795
+ # :check => check,
796
+ # # The state here is nil due to no check having gone
797
+ # # through for this item. This is normally 'critical' or 'ok'
798
+ # :state => nil,
799
+ # :start_time => t,
800
+ # :end_time => t + half_an_hour,
801
+ # :duration => half_an_hour,
802
+ # :summary => "Bring me a shrubbery!")
803
+ # end
804
+
805
+ # it "deletes scheduled maintenance from list" do
806
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
807
+ # # Current maintenance
808
+ # ec.create_scheduled_maintenance(two_hours_ago, seven_hours, :summary => "Scheduled maintenance started 2 hours ago")
809
+ # ec.create_scheduled_maintenance(t + half_an_hour, half_an_hour, :summary => "Scheduled maintenance starting in half an hour")
810
+ # # Future maintenance
811
+ # ec.create_scheduled_maintenance(t + five_minutes, half_an_hour, :summary => "Scheduled maintenance starting in 5 minutes")
812
+
813
+ # smp = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled').sort_by { |k| k[:entity] }
814
+
815
+ # expect(smp).to be_an(Array)
816
+ # expect(smp.size).to eq(3)
817
+
818
+ # expect(smp[0]).to eq(:entity => name,
819
+ # :check => check,
820
+ # # The state here is nil due to no check having gone
821
+ # # through for this item. This is normally 'critical' or 'ok'
822
+ # :state => nil,
823
+ # :start_time => two_hours_ago,
824
+ # :end_time => two_hours_ago + seven_hours,
825
+ # :duration => seven_hours,
826
+ # :summary => "Scheduled maintenance started 2 hours ago")
827
+ # expect(smp[1]).to eq(:entity => name,
828
+ # :check => check,
829
+ # # The state here is nil due to no check having gone
830
+ # # through for this item. This is normally 'critical' or 'ok'
831
+ # :state => nil,
832
+ # :start_time => t + five_minutes,
833
+ # :end_time => t + five_minutes + half_an_hour,
834
+ # :duration => half_an_hour,
835
+ # :summary => "Scheduled maintenance starting in 5 minutes")
836
+ # expect(smp[2]).to eq(:entity => name,
837
+ # :check => check,
838
+ # # The state here is nil due to no check having gone
839
+ # # through for this item. This is normally 'critical' or 'ok'
840
+ # :state => nil,
841
+ # :start_time => t + half_an_hour,
842
+ # :end_time => t + half_an_hour + half_an_hour,
843
+ # :duration => half_an_hour,
844
+ # :summary => "Scheduled maintenance starting in half an hour")
845
+
846
+ # delete = Flapjack::Data::EntityCheck.delete_maintenance(:redis => @redis, :type => 'scheduled', :duration => '30 minutes' )
847
+ # expect(delete).to eq({})
848
+
849
+ # remain = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'scheduled').sort_by { |k| k[:entity] }
850
+
851
+ # expect(remain).to be_an(Array)
852
+ # expect(remain.size).to eq(1)
853
+
854
+ # expect(remain[0]).to eq(:entity => name,
855
+ # :check => check,
856
+ # # The state here is nil due to no check having gone
857
+ # # through for this item. This is normally 'critical' or 'ok'
858
+ # :state => nil,
859
+ # :start_time => two_hours_ago,
860
+ # :end_time => two_hours_ago + seven_hours,
861
+ # :duration => seven_hours,
862
+ # :summary => "Scheduled maintenance started 2 hours ago")
863
+ # end
864
+
865
+ # it "deletes unscheduled maintenance from list" do
866
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
867
+ # ec.create_unscheduled_maintenance(t, half_an_hour, :summary => "Unscheduled maintenance starting now")
868
+
869
+ # ump = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'unscheduled').sort_by { |k| k[:entity] }
870
+ # expect(ump).to be_an(Array)
871
+ # expect(ump.size).to eq(1)
872
+
873
+ # expect(ump[0]).to eq(:entity => name,
874
+ # :check => check,
875
+ # # The state here is nil due to no check having gone
876
+ # # through for this item. This is normally 'critical' or 'ok'
877
+ # :state => nil,
878
+ # :start_time => t,
879
+ # :duration => half_an_hour,
880
+ # :end_time => t + half_an_hour,
881
+ # :summary => "Unscheduled maintenance starting now")
882
+
883
+ # later_t = t + (15 * 60)
884
+ # Delorean.time_travel_to(Time.at(later_t))
885
+
886
+ # delete = Flapjack::Data::EntityCheck.delete_maintenance(:redis => @redis, :type => 'unscheduled', :duration => '30 minutes')
887
+ # expect(delete).to eq({})
888
+
889
+ # remain = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'unscheduled').sort_by { |k| k[:entity] }
890
+ # expect(remain).to be_an(Array)
891
+ # expect(remain.size).to eq(1)
892
+
893
+ # expect(remain[0]).to eq(:entity => name,
894
+ # :check => check,
895
+ # # The state here is nil due to no check having gone
896
+ # # through for this item. This is normally 'critical' or 'ok'
897
+ # :state => nil,
898
+ # :start_time => t,
899
+ # :duration => half_an_hour,
900
+ # :end_time => t + half_an_hour,
901
+ # :summary => "Unscheduled maintenance starting now")
902
+ # end
903
+
904
+ # it "shows errors when deleting maintenance in the past" do
905
+ # Flapjack::Data::EntityCheck.create_maintenance(:redis => @redis, :entity => name, :check => check, :type => 'unscheduled', :started => '14/3/1927 3pm', :duration => '30 minutes', :reason => 'Unscheduled maintenance')
906
+ # t = Time.local(1927, 3, 14, 15, 0).to_i
907
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
908
+
909
+ # ump = Flapjack::Data::EntityCheck.find_maintenance(:redis => @redis, :type => 'unscheduled').sort_by { |k| k[:entity] }
910
+ # expect(ump).to be_an(Array)
911
+ # expect(ump.size).to eq(1)
912
+
913
+ # expect(ump[0]).to eq(:entity => name,
914
+ # :check => check,
915
+ # # The state here is nil due to no check having gone
916
+ # # through for this item. This is normally 'critical' or 'ok'
917
+ # :state => nil,
918
+ # :start_time => t,
919
+ # :duration => half_an_hour,
920
+ # :end_time => t + half_an_hour,
921
+ # :summary => "Unscheduled maintenance")
922
+
923
+ # delete = Flapjack::Data::EntityCheck.delete_maintenance(:redis => @redis, :type => 'unscheduled', :duration => '30 minutes')
924
+ # expect(delete).to eq({"abc-123:ping:#{t}"=>"Maintenance can't be deleted as it finished in the past"})
925
+ # end
926
+ # end
927
+
928
+
929
+ # it "creates a scheduled maintenance period for a future time" do
930
+ # t = Time.now.to_i
931
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check)
932
+ # ec.create_scheduled_maintenance(t + (60 * 60),
933
+ # half_an_hour, :summary => "30 minutes")
934
+
935
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
936
+ # smps.should_not be_nil
937
+ # smps.should be_an(Array)
938
+ # smps.should have(1).scheduled_maintenance_period
939
+ # smps[0].should be_a(Hash)
940
+
941
+ # start_time = smps[0][:start_time]
942
+ # start_time.should_not be_nil
943
+ # start_time.should be_an(Integer)
944
+ # start_time.should == (t + (60 * 60))
945
+
946
+ # duration = smps[0][:duration]
947
+ # duration.should_not be_nil
948
+ # duration.should be_a(Float)
949
+ # duration.should == half_an_hour
950
+ # end
951
+
952
+ # # TODO this should probably enforce that it starts in the future
953
+ # it "creates a scheduled maintenance period covering the current time" do
954
+ # t = Time.now.to_i
955
+ # ec = Flapjack::Data::EntityCheck.for_entity_name(name, check)
956
+ # ec.create_scheduled_maintenance(t - (60 * 60),
957
+ # 2 * (60 * 60), :summary => "2 hours")
958
+
959
+ # smps = ec.maintenances(nil, nil, :scheduled => true)
960
+ # smps.should_not be_nil
961
+ # smps.should be_an(Array)
962
+ # smps.should have(1).scheduled_maintenance_period
963
+ # smps[0].should be_a(Hash)
964
+
965
+ # start_time = smps[0][:start_time]
966
+ # start_time.should_not be_nil
967
+ # start_time.should be_an(Integer)
968
+ # start_time.should == (t - (60 * 60))
969
+
970
+ # duration = smps[0][:duration]
971
+ # duration.should_not be_nil
972
+ # duration.should be_a(Float)
973
+ # duration.should == 2 * (60 * 60)
974
+ # end
975
+
976
+ end