flapjack 1.6.0 → 2.0.0b1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -6
- data/.gitmodules +1 -1
- data/.rspec +1 -1
- data/.ruby-version +1 -1
- data/.travis.yml +12 -13
- data/CHANGELOG.md +2 -9
- data/CONTRIBUTING.md +7 -2
- data/Gemfile +4 -13
- data/LICENCE +1 -0
- data/README.md +8 -2
- data/Rakefile +2 -2
- data/bin/flapjack +3 -12
- data/build.sh +4 -2
- data/etc/flapjack_config.toml.example +273 -0
- data/features/ack_after_sched_maint.feature +18 -21
- data/features/cli.feature +11 -71
- data/features/cli_flapjack-feed-events.feature +14 -15
- data/features/cli_flapjack-nagios-receiver.feature +12 -41
- data/features/cli_flapper.feature +12 -41
- data/features/cli_purge.feature +5 -6
- data/features/cli_receive-events.feature +6 -7
- data/features/cli_simulate-failed-check.feature +5 -6
- data/features/events.feature +206 -181
- data/features/events_check_names.feature +4 -7
- data/features/notification_rules.feature +144 -223
- data/features/notifications.feature +65 -57
- data/features/rollup.feature +45 -47
- data/features/steps/cli_steps.rb +4 -5
- data/features/steps/events_steps.rb +163 -373
- data/features/steps/notifications_steps.rb +408 -264
- data/features/steps/packaging-lintian_steps.rb +0 -4
- data/features/steps/time_travel_steps.rb +0 -26
- data/features/support/daemons.rb +6 -31
- data/features/support/env.rb +65 -74
- data/flapjack.gemspec +22 -24
- data/lib/flapjack.rb +14 -7
- data/lib/flapjack/cli/flapper.rb +74 -173
- data/lib/flapjack/cli/maintenance.rb +278 -109
- data/lib/flapjack/cli/migrate.rb +950 -0
- data/lib/flapjack/cli/purge.rb +19 -22
- data/lib/flapjack/cli/receiver.rb +150 -326
- data/lib/flapjack/cli/server.rb +8 -235
- data/lib/flapjack/cli/simulate.rb +42 -57
- data/lib/flapjack/configuration.rb +51 -37
- data/lib/flapjack/coordinator.rb +138 -129
- data/lib/flapjack/data/acknowledgement.rb +177 -0
- data/lib/flapjack/data/alert.rb +97 -158
- data/lib/flapjack/data/check.rb +611 -0
- data/lib/flapjack/data/condition.rb +70 -0
- data/lib/flapjack/data/contact.rb +226 -456
- data/lib/flapjack/data/event.rb +96 -184
- data/lib/flapjack/data/extensions/associations.rb +59 -0
- data/lib/flapjack/data/extensions/short_name.rb +25 -0
- data/lib/flapjack/data/medium.rb +428 -0
- data/lib/flapjack/data/metrics.rb +194 -0
- data/lib/flapjack/data/notification.rb +22 -281
- data/lib/flapjack/data/rule.rb +473 -0
- data/lib/flapjack/data/scheduled_maintenance.rb +244 -0
- data/lib/flapjack/data/state.rb +221 -0
- data/lib/flapjack/data/statistic.rb +112 -0
- data/lib/flapjack/data/tag.rb +277 -0
- data/lib/flapjack/data/test_notification.rb +182 -0
- data/lib/flapjack/data/unscheduled_maintenance.rb +159 -0
- data/lib/flapjack/data/validators/id_validator.rb +20 -0
- data/lib/flapjack/exceptions.rb +6 -0
- data/lib/flapjack/filters/acknowledgement.rb +23 -16
- data/lib/flapjack/filters/base.rb +0 -5
- data/lib/flapjack/filters/delays.rb +53 -43
- data/lib/flapjack/filters/ok.rb +23 -14
- data/lib/flapjack/filters/scheduled_maintenance.rb +3 -3
- data/lib/flapjack/filters/unscheduled_maintenance.rb +12 -3
- data/lib/flapjack/gateways/aws_sns.rb +65 -49
- data/lib/flapjack/gateways/aws_sns/alert.text.erb +2 -2
- data/lib/flapjack/gateways/aws_sns/alert_subject.text.erb +2 -2
- data/lib/flapjack/gateways/aws_sns/rollup_subject.text.erb +1 -1
- data/lib/flapjack/gateways/email.rb +107 -90
- data/lib/flapjack/gateways/email/alert.html.erb +19 -18
- data/lib/flapjack/gateways/email/alert.text.erb +20 -14
- data/lib/flapjack/gateways/email/alert_subject.text.erb +2 -1
- data/lib/flapjack/gateways/email/rollup.html.erb +14 -13
- data/lib/flapjack/gateways/email/rollup.text.erb +13 -10
- data/lib/flapjack/gateways/jabber.rb +679 -671
- data/lib/flapjack/gateways/jabber/alert.text.erb +9 -6
- data/lib/flapjack/gateways/jsonapi.rb +164 -350
- data/lib/flapjack/gateways/jsonapi/data/join_descriptor.rb +44 -0
- data/lib/flapjack/gateways/jsonapi/data/method_descriptor.rb +21 -0
- data/lib/flapjack/gateways/jsonapi/helpers/headers.rb +63 -0
- data/lib/flapjack/gateways/jsonapi/helpers/miscellaneous.rb +136 -0
- data/lib/flapjack/gateways/jsonapi/helpers/resources.rb +227 -0
- data/lib/flapjack/gateways/jsonapi/helpers/serialiser.rb +313 -0
- data/lib/flapjack/gateways/jsonapi/helpers/swagger_docs.rb +322 -0
- data/lib/flapjack/gateways/jsonapi/methods/association_delete.rb +115 -0
- data/lib/flapjack/gateways/jsonapi/methods/association_get.rb +288 -0
- data/lib/flapjack/gateways/jsonapi/methods/association_patch.rb +178 -0
- data/lib/flapjack/gateways/jsonapi/methods/association_post.rb +116 -0
- data/lib/flapjack/gateways/jsonapi/methods/metrics.rb +71 -0
- data/lib/flapjack/gateways/jsonapi/methods/resource_delete.rb +119 -0
- data/lib/flapjack/gateways/jsonapi/methods/resource_get.rb +186 -0
- data/lib/flapjack/gateways/jsonapi/methods/resource_patch.rb +239 -0
- data/lib/flapjack/gateways/jsonapi/methods/resource_post.rb +197 -0
- data/lib/flapjack/gateways/jsonapi/middleware/array_param_fixer.rb +27 -0
- data/lib/flapjack/gateways/jsonapi/{rack → middleware}/json_params_parser.rb +7 -6
- data/lib/flapjack/gateways/jsonapi/middleware/request_timestamp.rb +18 -0
- data/lib/flapjack/gateways/oobetet.rb +222 -170
- data/lib/flapjack/gateways/pager_duty.rb +388 -0
- data/lib/flapjack/gateways/pager_duty/alert.text.erb +13 -0
- data/lib/flapjack/gateways/slack.rb +56 -48
- data/lib/flapjack/gateways/slack/alert.text.erb +1 -1
- data/lib/flapjack/gateways/slack/rollup.text.erb +1 -1
- data/lib/flapjack/gateways/sms_aspsms.rb +155 -0
- data/lib/flapjack/gateways/sms_aspsms/alert.text.erb +7 -0
- data/lib/flapjack/gateways/sms_aspsms/rollup.text.erb +2 -0
- data/lib/flapjack/gateways/sms_messagenet.rb +77 -57
- data/lib/flapjack/gateways/sms_messagenet/alert.text.erb +3 -2
- data/lib/flapjack/gateways/sms_nexmo.rb +53 -51
- data/lib/flapjack/gateways/sms_nexmo/alert.text.erb +2 -2
- data/lib/flapjack/gateways/sms_nexmo/rollup.text.erb +1 -1
- data/lib/flapjack/gateways/sms_twilio.rb +79 -62
- data/lib/flapjack/gateways/sms_twilio/alert.text.erb +3 -2
- data/lib/flapjack/gateways/web.rb +437 -345
- data/lib/flapjack/gateways/web/middleware/request_timestamp.rb +18 -0
- data/lib/flapjack/gateways/web/public/css/bootstrap.css +3793 -4340
- data/lib/flapjack/gateways/web/public/css/bootstrap.css.map +1 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.svg +273 -214
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/lib/flapjack/gateways/web/public/js/bootstrap.js +1637 -1607
- data/lib/flapjack/gateways/web/public/js/self_stats.js +1 -2
- data/lib/flapjack/gateways/web/views/_pagination.html.erb +19 -0
- data/lib/flapjack/gateways/web/views/check.html.erb +159 -121
- data/lib/flapjack/gateways/web/views/checks.html.erb +82 -41
- data/lib/flapjack/gateways/web/views/contact.html.erb +59 -71
- data/lib/flapjack/gateways/web/views/contacts.html.erb +32 -8
- data/lib/flapjack/gateways/web/views/index.html.erb +2 -2
- data/lib/flapjack/gateways/web/views/{layout.erb → layout.html.erb} +7 -23
- data/lib/flapjack/gateways/web/views/self_stats.html.erb +32 -33
- data/lib/flapjack/gateways/web/views/tag.html.erb +32 -0
- data/lib/flapjack/gateways/web/views/tags.html.erb +51 -0
- data/lib/flapjack/logger.rb +34 -3
- data/lib/flapjack/notifier.rb +180 -112
- data/lib/flapjack/patches.rb +8 -63
- data/lib/flapjack/pikelet.rb +185 -143
- data/lib/flapjack/processor.rb +323 -191
- data/lib/flapjack/record_queue.rb +33 -0
- data/lib/flapjack/redis_proxy.rb +66 -0
- data/lib/flapjack/utility.rb +21 -15
- data/lib/flapjack/version.rb +2 -1
- data/libexec/httpbroker.go +218 -14
- data/libexec/oneoff.go +13 -10
- data/spec/lib/flapjack/configuration_spec.rb +286 -0
- data/spec/lib/flapjack/coordinator_spec.rb +103 -157
- data/spec/lib/flapjack/data/check_spec.rb +175 -0
- data/spec/lib/flapjack/data/contact_spec.rb +26 -349
- data/spec/lib/flapjack/data/event_spec.rb +76 -291
- data/spec/lib/flapjack/data/medium_spec.rb +19 -0
- data/spec/lib/flapjack/data/rule_spec.rb +43 -0
- data/spec/lib/flapjack/data/scheduled_maintenance_spec.rb +976 -0
- data/spec/lib/flapjack/data/unscheduled_maintenance_spec.rb +34 -0
- data/spec/lib/flapjack/gateways/aws_sns_spec.rb +111 -60
- data/spec/lib/flapjack/gateways/email_spec.rb +194 -161
- data/spec/lib/flapjack/gateways/jabber_spec.rb +961 -162
- data/spec/lib/flapjack/gateways/jsonapi/methods/check_links_spec.rb +155 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/checks_spec.rb +426 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/contact_links_spec.rb +217 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/contacts_spec.rb +425 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/events_spec.rb +271 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/media_spec.rb +257 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/medium_links_spec.rb +163 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/metrics_spec.rb +8 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/rule_links_spec.rb +212 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/rules_spec.rb +289 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/scheduled_maintenance_links_spec.rb +49 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/scheduled_maintenances_spec.rb +242 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/tag_links_spec.rb +274 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/tags_spec.rb +302 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/unscheduled_maintenance_links_spec.rb +49 -0
- data/spec/lib/flapjack/gateways/jsonapi/methods/unscheduled_maintenances_spec.rb +339 -0
- data/spec/lib/flapjack/gateways/jsonapi_spec.rb +1 -1
- data/spec/lib/flapjack/gateways/oobetet_spec.rb +151 -79
- data/spec/lib/flapjack/gateways/pager_duty_spec.rb +353 -0
- data/spec/lib/flapjack/gateways/slack_spec.rb +53 -53
- data/spec/lib/flapjack/gateways/sms_aspsms_spec.rb +106 -0
- data/spec/lib/flapjack/gateways/sms_messagenet_spec.rb +111 -54
- data/spec/lib/flapjack/gateways/sms_nexmo_spec.rb +50 -51
- data/spec/lib/flapjack/gateways/sms_twilio_spec.rb +108 -48
- data/spec/lib/flapjack/gateways/web_spec.rb +144 -216
- data/spec/lib/flapjack/notifier_spec.rb +132 -1
- data/spec/lib/flapjack/pikelet_spec.rb +111 -50
- data/spec/lib/flapjack/processor_spec.rb +210 -40
- data/spec/lib/flapjack/redis_proxy_spec.rb +45 -0
- data/spec/lib/flapjack/utility_spec.rb +11 -15
- data/spec/service_consumers/fixture_data.rb +547 -0
- data/spec/service_consumers/pact_helper.rb +21 -32
- data/spec/service_consumers/pacts/flapjack-diner_v2.0.json +4652 -0
- data/spec/service_consumers/provider_states_for_flapjack-diner.rb +279 -322
- data/spec/service_consumers/provider_support.rb +8 -0
- data/spec/spec_helper.rb +34 -44
- data/spec/support/erb_view_helper.rb +1 -1
- data/spec/support/factories.rb +58 -0
- data/spec/support/jsonapi_helper.rb +15 -26
- data/spec/support/mock_logger.rb +43 -0
- data/spec/support/xmpp_comparable.rb +24 -0
- data/src/flapjack/transport_test.go +30 -1
- data/tasks/dump_keys.rake +82 -0
- data/tasks/events.rake +7 -7
- data/tasks/support/flapjack_config_benchmark.toml +28 -0
- data/tasks/support/flapjack_config_benchmark.yaml +0 -2
- metadata +175 -222
- data/Guardfile +0 -14
- data/etc/flapjack_config.yaml.example +0 -477
- data/features/cli_flapjack-populator.feature +0 -90
- data/features/support/silent_system.rb +0 -4
- data/lib/flapjack/cli/import.rb +0 -108
- data/lib/flapjack/data/entity.rb +0 -652
- data/lib/flapjack/data/entity_check.rb +0 -1044
- data/lib/flapjack/data/message.rb +0 -56
- data/lib/flapjack/data/migration.rb +0 -234
- data/lib/flapjack/data/notification_rule.rb +0 -425
- data/lib/flapjack/data/semaphore.rb +0 -44
- data/lib/flapjack/data/tagged.rb +0 -48
- data/lib/flapjack/gateways/jsonapi/check_methods.rb +0 -206
- data/lib/flapjack/gateways/jsonapi/check_presenter.rb +0 -221
- data/lib/flapjack/gateways/jsonapi/contact_methods.rb +0 -186
- data/lib/flapjack/gateways/jsonapi/entity_methods.rb +0 -223
- data/lib/flapjack/gateways/jsonapi/medium_methods.rb +0 -185
- data/lib/flapjack/gateways/jsonapi/metrics_methods.rb +0 -132
- data/lib/flapjack/gateways/jsonapi/notification_rule_methods.rb +0 -141
- data/lib/flapjack/gateways/jsonapi/pagerduty_credential_methods.rb +0 -139
- data/lib/flapjack/gateways/jsonapi/report_methods.rb +0 -146
- data/lib/flapjack/gateways/pagerduty.rb +0 -318
- data/lib/flapjack/gateways/pagerduty/alert.text.erb +0 -10
- data/lib/flapjack/gateways/web/public/css/select2-bootstrap.css +0 -87
- data/lib/flapjack/gateways/web/public/css/select2.css +0 -615
- data/lib/flapjack/gateways/web/public/css/tablesort.css +0 -67
- data/lib/flapjack/gateways/web/public/img/select2-spinner.gif +0 -0
- data/lib/flapjack/gateways/web/public/img/select2.png +0 -0
- data/lib/flapjack/gateways/web/public/img/select2x2.png +0 -0
- data/lib/flapjack/gateways/web/public/js/backbone.js +0 -1581
- data/lib/flapjack/gateways/web/public/js/backbone.jsonapi.js +0 -322
- data/lib/flapjack/gateways/web/public/js/flapjack.js +0 -82
- data/lib/flapjack/gateways/web/public/js/jquery.tablesorter.js +0 -1640
- data/lib/flapjack/gateways/web/public/js/jquery.tablesorter.widgets.js +0 -1390
- data/lib/flapjack/gateways/web/public/js/modules/contact.js +0 -520
- data/lib/flapjack/gateways/web/public/js/modules/entity.js +0 -28
- data/lib/flapjack/gateways/web/public/js/modules/medium.js +0 -40
- data/lib/flapjack/gateways/web/public/js/select2.js +0 -3397
- data/lib/flapjack/gateways/web/public/js/tablesort.js +0 -44
- data/lib/flapjack/gateways/web/public/js/underscore.js +0 -1276
- data/lib/flapjack/gateways/web/views/edit_contacts.html.erb +0 -173
- data/lib/flapjack/gateways/web/views/entities.html.erb +0 -30
- data/lib/flapjack/gateways/web/views/entity.html.erb +0 -51
- data/lib/flapjack/rack_logger.rb +0 -47
- data/lib/flapjack/redis_pool.rb +0 -42
- data/spec/lib/flapjack/data/entity_check_spec.rb +0 -1418
- data/spec/lib/flapjack/data/entity_spec.rb +0 -872
- data/spec/lib/flapjack/data/message_spec.rb +0 -30
- data/spec/lib/flapjack/data/migration_spec.rb +0 -104
- data/spec/lib/flapjack/data/notification_rule_spec.rb +0 -232
- data/spec/lib/flapjack/data/notification_spec.rb +0 -53
- data/spec/lib/flapjack/data/semaphore_spec.rb +0 -24
- data/spec/lib/flapjack/filters/acknowledgement_spec.rb +0 -6
- data/spec/lib/flapjack/filters/delays_spec.rb +0 -6
- data/spec/lib/flapjack/filters/ok_spec.rb +0 -6
- data/spec/lib/flapjack/filters/scheduled_maintenance_spec.rb +0 -6
- data/spec/lib/flapjack/filters/unscheduled_maintenance_spec.rb +0 -6
- data/spec/lib/flapjack/gateways/jsonapi/check_methods_spec.rb +0 -315
- data/spec/lib/flapjack/gateways/jsonapi/check_presenter_spec.rb +0 -223
- data/spec/lib/flapjack/gateways/jsonapi/contact_methods_spec.rb +0 -131
- data/spec/lib/flapjack/gateways/jsonapi/entity_methods_spec.rb +0 -389
- data/spec/lib/flapjack/gateways/jsonapi/medium_methods_spec.rb +0 -231
- data/spec/lib/flapjack/gateways/jsonapi/notification_rule_methods_spec.rb +0 -169
- data/spec/lib/flapjack/gateways/jsonapi/pagerduty_credential_methods_spec.rb +0 -114
- data/spec/lib/flapjack/gateways/jsonapi/report_methods_spec.rb +0 -590
- data/spec/lib/flapjack/gateways/pagerduty_spec.rb +0 -249
- data/spec/lib/flapjack/gateways/web/views/check.html.erb_spec.rb +0 -21
- data/spec/lib/flapjack/gateways/web/views/contact.html.erb_spec.rb +0 -24
- data/spec/lib/flapjack/gateways/web/views/index.html.erb_spec.rb +0 -16
- data/spec/lib/flapjack/redis_pool_spec.rb +0 -29
- data/spec/service_consumers/pacts/flapjack-diner_v1.0.json +0 -4702
- data/tasks/entities.rake +0 -151
- data/tasks/profile.rake +0 -282
- data/tmp/acknowledge.rb +0 -13
- data/tmp/create_config_yaml.rb +0 -16
- data/tmp/create_event_ok.rb +0 -30
- data/tmp/create_event_unknown.rb +0 -30
- data/tmp/create_events_failure.rb +0 -34
- data/tmp/create_events_ok.rb +0 -32
- data/tmp/create_events_ok_fail_ack_ok.rb +0 -53
- data/tmp/create_events_ok_failure.rb +0 -41
- data/tmp/create_events_ok_failure_ack.rb +0 -53
- data/tmp/dummy_contacts.json +0 -43
- data/tmp/dummy_entities.json +0 -37
- data/tmp/generate_nagios_test_hosts.rb +0 -16
- data/tmp/notification_rules.rb +0 -73
- data/tmp/parse_config_yaml.rb +0 -7
- data/tmp/redis_find_spurious_unknown_states.rb +0 -52
- data/tmp/test_json_post.rb +0 -19
- data/tmp/test_notification_rules_api.rb +0 -171
@@ -7,14 +7,8 @@ require 'active_support/time'
|
|
7
7
|
When /^(.+) passes$/ do |time|
|
8
8
|
period = Chronic.parse("#{time} from now")
|
9
9
|
RedisDelorean.time_travel_to(period)
|
10
|
-
#puts "Time Travelled to #{Time.now.to_s}"
|
11
10
|
end
|
12
11
|
|
13
|
-
# Given /^I time travel to (.+)$/ do |period|
|
14
|
-
# RedisDelorean.time_travel_to(period)
|
15
|
-
# # puts "Time Travelled to #{Time.now.to_s}"
|
16
|
-
# end
|
17
|
-
|
18
12
|
Given /^the timezone is (.*)$/ do |tz|
|
19
13
|
Time.zone = tz
|
20
14
|
Chronic.time_class = Time.zone
|
@@ -22,24 +16,4 @@ end
|
|
22
16
|
|
23
17
|
Given /^the time is (.*)$/ do |time|
|
24
18
|
RedisDelorean.time_travel_to(Chronic.parse("#{time}"))
|
25
|
-
#puts "Time Travelled to #{Time.now.to_s}"
|
26
19
|
end
|
27
|
-
|
28
|
-
# Given /^I come back to the present$/ do
|
29
|
-
# RedisDelorean.back_to_the_present
|
30
|
-
# # puts "Time Travelled to the present, #{Time.now.to_s}"
|
31
|
-
# end
|
32
|
-
|
33
|
-
# Given /^I time travel in (.+) to (.+)$/ do |zone_name, timestamp|
|
34
|
-
# zone = ::Time.find_zone!(zone_name)
|
35
|
-
# time = zone.parse timestamp
|
36
|
-
# RedisDelorean.time_travel_to time
|
37
|
-
# # puts "Time Travelled to #{Time.now.to_s}"
|
38
|
-
# end
|
39
|
-
|
40
|
-
# Then /^the time in UTC should be about (.+)$/ do |timestamp|
|
41
|
-
# actual = Time.now.in_time_zone('UTC')
|
42
|
-
# expected = Time.parse("#{timestamp} UTC")
|
43
|
-
# (expected..expected+5).cover?(actual).should be true
|
44
|
-
# end
|
45
|
-
|
data/features/support/daemons.rb
CHANGED
@@ -59,13 +59,9 @@ def kill_lingering_processes
|
|
59
59
|
puts green("Process #{pid} has already exited.") if @debug
|
60
60
|
end
|
61
61
|
|
62
|
-
if @debug
|
63
|
-
|
64
|
-
|
65
|
-
puts process.read + "\n"
|
66
|
-
else
|
67
|
-
# TODO capture STDOUT from daemonize?
|
68
|
-
end
|
62
|
+
if @debug && !process.nil?
|
63
|
+
puts blue("Output from #{pid} #{command}\n")
|
64
|
+
puts process.read + "\n"
|
69
65
|
end
|
70
66
|
end
|
71
67
|
puts yellow("Done killing processes") if @debug
|
@@ -80,36 +76,15 @@ def time_and_pid_from_file(pid_file, cutoff_time = nil)
|
|
80
76
|
end
|
81
77
|
|
82
78
|
def spawn_process(command, opts={})
|
83
|
-
@daemons_output ||= []
|
84
|
-
@daemons_exit_status ||= []
|
85
|
-
|
86
79
|
puts yellow("Running: #{command}") if @debug
|
87
80
|
|
88
81
|
process_h = nil
|
89
82
|
|
90
83
|
file = opts[:daemon_pidfile]
|
91
84
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
@daemons_output << `#{command}`
|
97
|
-
@daemons_exit_status << $?
|
98
|
-
|
99
|
-
while attempts < 50
|
100
|
-
time_and_pid = time_and_pid_from_file(file, time)
|
101
|
-
if time_and_pid
|
102
|
-
process_h = {:pid => time_and_pid.last, :command => command}
|
103
|
-
break
|
104
|
-
end
|
105
|
-
attempts += 1
|
106
|
-
sleep 0.2
|
107
|
-
end
|
108
|
-
else
|
109
|
-
process = IO.popen(command)
|
110
|
-
pid = process.pid
|
111
|
-
process_h = {:process => process, :command => command}
|
112
|
-
end
|
85
|
+
process = IO.popen(command)
|
86
|
+
pid = process.pid
|
87
|
+
process_h = {:process => process, :command => command}
|
113
88
|
|
114
89
|
raise "failed to spawn process #{command}" if process_h.nil?
|
115
90
|
|
data/features/support/env.rb
CHANGED
@@ -6,9 +6,8 @@ require 'delorean'
|
|
6
6
|
require 'chronic'
|
7
7
|
require 'active_support/time'
|
8
8
|
require 'ice_cube'
|
9
|
+
|
9
10
|
require 'flapjack/configuration'
|
10
|
-
require 'flapjack/data/entity_check'
|
11
|
-
require 'flapjack/data/event'
|
12
11
|
|
13
12
|
if ENV['COVERAGE']
|
14
13
|
require 'simplecov'
|
@@ -16,16 +15,19 @@ if ENV['COVERAGE']
|
|
16
15
|
add_filter '/features/'
|
17
16
|
end
|
18
17
|
SimpleCov.at_exit do
|
18
|
+
# Oj.default_options = { :mode => :compat }
|
19
19
|
SimpleCov.result.format!
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
@debug = false
|
24
24
|
|
25
|
-
|
25
|
+
require 'i18n'
|
26
|
+
I18n.config.enforce_available_locales = true
|
27
|
+
|
26
28
|
FLAPJACK_ENV = 'test'
|
27
29
|
FLAPJACK_ROOT = File.join(File.dirname(__FILE__), '..', '..')
|
28
|
-
FLAPJACK_CONFIG = File.join(FLAPJACK_ROOT, 'etc', '
|
30
|
+
FLAPJACK_CONFIG = File.join(FLAPJACK_ROOT, 'etc', 'flapjack_test_config.toml')
|
29
31
|
|
30
32
|
$: << File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
|
31
33
|
|
@@ -35,29 +37,40 @@ require 'webmock/cucumber'
|
|
35
37
|
WebMock.disable_net_connect!
|
36
38
|
|
37
39
|
require 'flapjack'
|
40
|
+
require 'flapjack/patches'
|
41
|
+
require 'flapjack/redis_proxy'
|
42
|
+
|
43
|
+
require 'flapjack/data/check'
|
44
|
+
require 'flapjack/data/event'
|
45
|
+
|
38
46
|
require 'flapjack/notifier'
|
39
47
|
require 'flapjack/processor'
|
40
|
-
require 'flapjack/patches'
|
41
48
|
|
42
49
|
class MockLogger
|
43
50
|
attr_accessor :messages
|
44
51
|
|
52
|
+
def self.configure_log(name)
|
53
|
+
@name = name
|
54
|
+
end
|
55
|
+
|
45
56
|
def initialize
|
46
57
|
@messages = []
|
47
58
|
end
|
48
59
|
|
49
60
|
%w(debug info warn error fatal).each do |level|
|
50
61
|
class_eval <<-RUBY
|
51
|
-
def #{level}(msg)
|
52
|
-
|
62
|
+
def #{level}(msg = nil, &block)
|
63
|
+
msg = yield if msg.nil? && block_given?
|
64
|
+
@messages << '[#{level.upcase}] :: ' +
|
65
|
+
(self.class.instance_variable_get('@name') || 'flapjack') + ' :: ' + msg
|
53
66
|
end
|
54
67
|
RUBY
|
55
68
|
end
|
56
69
|
end
|
57
70
|
|
58
|
-
|
59
|
-
|
60
|
-
|
71
|
+
require 'mail'
|
72
|
+
Mail.defaults do
|
73
|
+
delivery_method :test
|
61
74
|
end
|
62
75
|
|
63
76
|
class RedisDelorean
|
@@ -84,105 +97,85 @@ class RedisDelorean
|
|
84
97
|
return deleted
|
85
98
|
SHIFT_TTLS
|
86
99
|
|
87
|
-
def self.before_all
|
88
|
-
|
89
|
-
@shift_ttls_sha = redis.script(:load, ShiftTTLsScript)
|
90
|
-
end
|
91
|
-
|
92
|
-
def self.before_each(options = {})
|
93
|
-
@redis = options[:redis]
|
100
|
+
def self.before_all
|
101
|
+
@shift_ttls_sha = Flapjack.redis.script(:load, ShiftTTLsScript)
|
94
102
|
end
|
95
103
|
|
96
104
|
def self.time_travel_to(dest_time)
|
97
105
|
old_maybe_fake_time = Time.now.in_time_zone
|
98
106
|
Delorean.time_travel_to(dest_time)
|
99
|
-
# puts "real time is #{Time.now_without_delorean.in_time_zone}"
|
100
|
-
# puts "old assumed time is #{old_maybe_fake_time}"
|
101
|
-
# puts "new assumed time is #{Time.now.in_time_zone}"
|
102
107
|
|
103
|
-
|
104
|
-
|
105
|
-
del = @redis.evalsha(@shift_ttls_sha, ['*'],
|
106
|
-
[(dest_time - old_maybe_fake_time).to_i])
|
107
|
-
|
108
|
-
# keys_after = @redis.keys('*')
|
109
|
-
|
110
|
-
# puts "Expired #{del} key#{(del == 1) ? '' : 's'}, #{(keys_prior - keys_after).inspect}"
|
108
|
+
Flapjack.redis.evalsha(@shift_ttls_sha, ['*'],
|
109
|
+
[(dest_time - old_maybe_fake_time).to_i])
|
111
110
|
end
|
112
|
-
|
113
111
|
end
|
114
112
|
|
115
113
|
config = Flapjack::Configuration.new
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
redis =
|
120
|
-
redis.flushdb
|
121
|
-
RedisDelorean.before_all
|
122
|
-
redis.quit
|
114
|
+
Flapjack::RedisProxy.config = config.load(FLAPJACK_CONFIG) ?
|
115
|
+
config.for_redis :
|
116
|
+
{:db => 14, :driver => :ruby}
|
117
|
+
Zermelo.redis = Flapjack.redis
|
118
|
+
Flapjack.redis.flushdb
|
119
|
+
RedisDelorean.before_all
|
120
|
+
Flapjack.redis.quit
|
123
121
|
|
124
122
|
# Not the most efficient of operations...
|
125
|
-
def redis_peek(queue, start = 0, count = nil)
|
126
|
-
size =
|
123
|
+
def redis_peek(queue, klass, start = 0, count = nil)
|
124
|
+
size = Flapjack.redis.llen(queue)
|
127
125
|
start = 0 if start < 0
|
128
126
|
count = (size - start) if count.nil? || (count > (size - start))
|
129
127
|
|
130
128
|
(0..(size - 1)).inject([]) do |memo, n|
|
131
|
-
|
132
|
-
next memo unless (n >= start || n < (start + count))
|
133
|
-
|
129
|
+
obj_id = Flapjack.redis.rpoplpush(queue, queue)
|
130
|
+
next memo unless (n >= start || n < (start + count)) &&
|
131
|
+
(object = klass.find_by_id(obj_id))
|
132
|
+
memo << object
|
134
133
|
memo
|
135
134
|
end
|
136
135
|
end
|
137
136
|
|
138
|
-
Around do |scenario, blk|
|
139
|
-
EM.synchrony do
|
140
|
-
blk.call
|
141
|
-
EM.stop
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
137
|
Before do
|
146
|
-
|
147
|
-
@logger = MockLogger.new
|
138
|
+
Flapjack.logger = MockLogger.new
|
148
139
|
end
|
149
140
|
|
150
141
|
After do
|
151
|
-
|
152
|
-
|
142
|
+
Flapjack.logger.messages = []
|
143
|
+
WebMock.reset!
|
153
144
|
end
|
154
145
|
|
155
146
|
Before('@processor') do
|
156
|
-
|
157
|
-
|
158
|
-
@
|
147
|
+
Flapjack.redis.flushdb
|
148
|
+
MockLogger.configure_log('flapjack-processor')
|
149
|
+
@processor = Flapjack::Processor.new(:boot_time => Time.now,
|
150
|
+
:config => {'new_check_scheduled_maintenance_duration' => '0 seconds'})
|
151
|
+
@processor.start_stats
|
159
152
|
end
|
160
153
|
|
161
154
|
After('@processor') do
|
162
|
-
|
163
|
-
@redis.quit
|
164
|
-
@redis = nil
|
155
|
+
Flapjack.redis.quit
|
165
156
|
end
|
166
157
|
|
167
158
|
Before('@notifier') do
|
168
|
-
|
169
|
-
|
159
|
+
Flapjack.redis.flushdb
|
160
|
+
MockLogger.configure_log('flapjack-notifier')
|
161
|
+
@notifier = Flapjack::Notifier.new(
|
170
162
|
:config => {'email_queue' => 'email_notifications',
|
171
163
|
'sms_queue' => 'sms_notifications',
|
172
164
|
'sms_nexmo_queue' => 'sms_nexmo_notifications',
|
173
165
|
'sns_queue' => 'sns_notifications',
|
174
166
|
'default_contact_timezone' => 'America/New_York'})
|
175
|
-
@notifier_redis = @notifier.instance_variable_get('@redis')
|
176
167
|
end
|
177
168
|
|
178
169
|
After('@notifier') do
|
179
|
-
|
180
|
-
|
181
|
-
|
170
|
+
Flapjack.redis.quit
|
171
|
+
end
|
172
|
+
|
173
|
+
Before('@notifications') do
|
174
|
+
Mail::TestMailer.deliveries.clear
|
182
175
|
end
|
183
176
|
|
184
|
-
Before('@
|
185
|
-
|
177
|
+
Before('@not_jruby') do
|
178
|
+
pending if 'java'.eql?(RUBY_PLATFORM)
|
186
179
|
end
|
187
180
|
|
188
181
|
After('@time') do
|
@@ -190,19 +183,19 @@ After('@time') do
|
|
190
183
|
end
|
191
184
|
|
192
185
|
After('@process') do
|
193
|
-
['tmp/cucumber_cli/flapjack_cfg.
|
194
|
-
'tmp/cucumber_cli/flapjack_cfg.
|
195
|
-
'tmp/cucumber_cli/flapjack_cfg_d.
|
186
|
+
['tmp/cucumber_cli/flapjack_cfg.toml',
|
187
|
+
'tmp/cucumber_cli/flapjack_cfg.toml.bak',
|
188
|
+
'tmp/cucumber_cli/flapjack_cfg_d.toml',
|
196
189
|
'tmp/cucumber_cli/flapjack.log',
|
197
190
|
'tmp/cucumber_cli/flapjack.pid',
|
198
191
|
'tmp/cucumber_cli/nagios_perfdata.fifo',
|
199
192
|
'tmp/cucumber_cli/flapjack-nagios-receiver.pid',
|
200
193
|
'tmp/cucumber_cli/flapjack-nagios-receiver.log',
|
201
|
-
'tmp/cucumber_cli/flapjack-nagios-receiver_d.
|
202
|
-
'tmp/cucumber_cli/flapjack-nagios-receiver.
|
194
|
+
'tmp/cucumber_cli/flapjack-nagios-receiver_d.toml',
|
195
|
+
'tmp/cucumber_cli/flapjack-nagios-receiver.toml',
|
203
196
|
'tmp/cucumber_cli/flapper.pid',
|
204
197
|
'tmp/cucumber_cli/flapper.log',
|
205
|
-
'tmp/cucumber_cli/flapjack-populator.
|
198
|
+
'tmp/cucumber_cli/flapjack-populator.toml',
|
206
199
|
'tmp/cucumber_cli/flapjack-populator-contacts.json',
|
207
200
|
'tmp/cucumber_cli/flapjack-populator-entities.json',
|
208
201
|
].each do |file|
|
@@ -210,5 +203,3 @@ After('@process') do
|
|
210
203
|
File.unlink(file)
|
211
204
|
end
|
212
205
|
end
|
213
|
-
|
214
|
-
|
data/flapjack.gemspec
CHANGED
@@ -2,45 +2,43 @@
|
|
2
2
|
require File.expand_path('../lib/flapjack/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = [
|
6
|
-
gem.email =
|
7
|
-
gem.description =
|
8
|
-
gem.summary =
|
9
|
-
gem.homepage =
|
5
|
+
gem.authors = [ 'Lindsay Holmwood', 'Jesse Reynolds', 'Ali Graham', 'Sarah Kowalik' ]
|
6
|
+
gem.email = 'lindsay@holmwood.id.au'
|
7
|
+
gem.description = 'Flapjack is a distributed monitoring notification system that provides a scalable method for processing streams of events from Nagios and deciding who should be notified'
|
8
|
+
gem.summary = 'Intelligent, scalable, distributed monitoring notification system.'
|
9
|
+
gem.homepage = 'http://flapjack.io/'
|
10
10
|
gem.license = 'MIT'
|
11
11
|
|
12
12
|
# see http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
|
13
13
|
# following a middle road here, not shipping it with the gem :)
|
14
14
|
gem.files = `git ls-files`.split($\) - ['Gemfile.lock']
|
15
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{
|
15
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{|f| File.basename(f) }
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
|
-
gem.name =
|
18
|
-
gem.require_paths = [
|
17
|
+
gem.name = 'flapjack'
|
18
|
+
gem.require_paths = ['lib']
|
19
19
|
gem.version = Flapjack::VERSION
|
20
20
|
|
21
|
-
gem.add_dependency 'dante', '= 0.2.0'
|
22
|
-
gem.add_dependency 'oj', '>= 2.9.0'
|
23
|
-
gem.add_dependency 'eventmachine', '~> 1.0.0'
|
24
|
-
gem.add_dependency 'redis', '~> 3.0.6'
|
25
21
|
gem.add_dependency 'hiredis'
|
26
|
-
gem.add_dependency '
|
27
|
-
gem.add_dependency '
|
28
|
-
gem.add_dependency '
|
22
|
+
gem.add_dependency 'redis', '>= 3.0.7'
|
23
|
+
gem.add_dependency 'json-stream'
|
24
|
+
gem.add_dependency 'zermelo', '= 1.4.3'
|
29
25
|
gem.add_dependency 'sinatra'
|
30
|
-
gem.add_dependency '
|
31
|
-
gem.add_dependency 'thin', '~> 1.6.1'
|
26
|
+
gem.add_dependency 'swagger-blocks'
|
32
27
|
gem.add_dependency 'mail'
|
33
|
-
gem.add_dependency '
|
28
|
+
gem.add_dependency 'xmpp4r', '>= 0.5.5'
|
29
|
+
gem.add_dependency 'nexmo', '= 2.0.0'
|
34
30
|
gem.add_dependency 'chronic'
|
35
31
|
gem.add_dependency 'chronic_duration'
|
36
|
-
gem.add_dependency 'terminal-table'
|
37
32
|
gem.add_dependency 'activesupport'
|
38
33
|
gem.add_dependency 'ice_cube'
|
34
|
+
gem.add_dependency 'icalendar'
|
39
35
|
gem.add_dependency 'tzinfo'
|
40
36
|
gem.add_dependency 'tzinfo-data'
|
41
|
-
gem.add_dependency '
|
42
|
-
gem.add_dependency '
|
43
|
-
gem.add_dependency '
|
44
|
-
gem.add_dependency '
|
45
|
-
gem.add_dependency '
|
37
|
+
gem.add_dependency 'gli', '= 2.13.1'
|
38
|
+
gem.add_dependency 'terminal-table'
|
39
|
+
gem.add_dependency 'toml-rb'
|
40
|
+
gem.add_dependency 'puma'
|
41
|
+
gem.add_dependency 'flapjack-diner', '= 2.0.0b1'
|
42
|
+
|
43
|
+
gem.add_development_dependency 'rake'
|
46
44
|
end
|
data/lib/flapjack.rb
CHANGED
@@ -1,25 +1,32 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'active_support/time'
|
4
|
+
require 'active_support/json/encoding'
|
5
|
+
|
6
|
+
ActiveSupport.use_standard_json_time_format = true
|
7
|
+
ActiveSupport.time_precision = 0
|
8
|
+
|
9
|
+
require 'json'
|
10
|
+
|
11
|
+
require 'flapjack/logger'
|
4
12
|
|
5
13
|
module Flapjack
|
14
|
+
UUID_RE = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
|
6
15
|
|
7
16
|
DEFAULT_INITIAL_FAILURE_DELAY = 30
|
8
17
|
DEFAULT_REPEAT_FAILURE_DELAY = 60
|
9
18
|
|
10
19
|
def self.load_json(data)
|
11
|
-
|
20
|
+
ActiveSupport::JSON.decode(data)
|
12
21
|
end
|
13
22
|
|
14
23
|
def self.dump_json(data)
|
15
|
-
|
24
|
+
ActiveSupport::JSON.encode(data)
|
16
25
|
end
|
17
26
|
|
18
27
|
def self.sanitize(str)
|
19
28
|
return str if str.nil? || !str.is_a?(String) || str.valid_encoding?
|
20
|
-
return str.scrub('?') if str.respond_to
|
21
|
-
str.chars.collect {|c| c.valid_encoding? ? c : '
|
29
|
+
return str.scrub('?') if str.respond_to(:scrub)
|
30
|
+
str.chars.collect {|c| c.valid_encoding? ? c : '_' }.join
|
22
31
|
end
|
23
|
-
|
24
32
|
end
|
25
|
-
|