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
data/lib/flapjack/cli/purge.rb
CHANGED
@@ -3,8 +3,6 @@
|
|
3
3
|
require 'hiredis'
|
4
4
|
require 'flapjack/configuration'
|
5
5
|
|
6
|
-
require 'flapjack/data/migration'
|
7
|
-
|
8
6
|
module Flapjack
|
9
7
|
module CLI
|
10
8
|
class Purge
|
@@ -23,10 +21,11 @@ module Flapjack
|
|
23
21
|
@config_env = config.all
|
24
22
|
|
25
23
|
if @config_env.nil? || @config_env.empty?
|
26
|
-
exit_now! "No config data
|
24
|
+
exit_now! "No config data found in '#{global_options[:config]}'"
|
27
25
|
end
|
28
26
|
|
29
|
-
|
27
|
+
Flapjack::RedisProxy.config = config.for_redis
|
28
|
+
Zermelo.redis = Flapjack.redis
|
30
29
|
end
|
31
30
|
|
32
31
|
def check_history
|
@@ -35,36 +34,34 @@ module Flapjack
|
|
35
34
|
options = {}
|
36
35
|
if @options[:days]
|
37
36
|
options[:older_than] = @options[:days].to_i * 24 * 60 * 60
|
38
|
-
raise "days must be
|
37
|
+
raise "days must be resolvable to an integer" unless @options[:days].to_i.to_s == @options[:days]
|
39
38
|
end
|
40
39
|
checks = if @options[:check]
|
41
|
-
[Flapjack::Data::
|
40
|
+
[Flapjack::Data::Check.find_by_id(options[:check])].compact
|
42
41
|
else
|
43
|
-
Flapjack::Data::
|
42
|
+
Flapjack::Data::Check.all
|
44
43
|
end
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
|
45
|
+
purge_before = Time.now - options[:older_than]
|
46
|
+
purge_range = Zermelo::Filters::IndexRange.new(nil, purge_before, :by_score => true)
|
47
|
+
|
48
|
+
purged = checks.inject(0) do |memo, check|
|
49
|
+
purgees = check.states.intersect(:created_at => purge_range)
|
50
|
+
num = purgees.count
|
51
|
+
if num > 0
|
52
|
+
purgees.destroy_all
|
53
|
+
memo += num
|
54
|
+
end
|
48
55
|
memo
|
49
56
|
end
|
50
57
|
|
51
|
-
if purged
|
58
|
+
if purged == 0
|
52
59
|
puts "Nothing to do"
|
53
60
|
else
|
54
61
|
puts "Purged #{purged.reduce(:+) || 0} historical check states over #{purged.length} checks."
|
55
62
|
end
|
56
63
|
end
|
57
64
|
|
58
|
-
private
|
59
|
-
|
60
|
-
def redis
|
61
|
-
return @redis unless @redis.nil?
|
62
|
-
@redis = Redis.new(@redis_options.merge(:driver => :hiredis))
|
63
|
-
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => @redis)
|
64
|
-
Flapjack::Data::Migration.clear_orphaned_entity_ids(:redis => @redis)
|
65
|
-
@redis
|
66
|
-
end
|
67
|
-
|
68
65
|
end
|
69
66
|
end
|
70
67
|
end
|
@@ -78,7 +75,7 @@ command :purge do |purge|
|
|
78
75
|
check_history.flag [:d, 'days'], :desc => "purge check history older than DAYS days ago",
|
79
76
|
:default_value => 90
|
80
77
|
|
81
|
-
check_history.flag [:c, 'check'], :desc => "affect history of only the CHECK"
|
78
|
+
check_history.flag [:c, 'check'], :desc => "affect history of only the CHECK with the provided id"
|
82
79
|
|
83
80
|
check_history.action do |global_options,options,args|
|
84
81
|
purge = Flapjack::CLI::Purge.new(global_options, options)
|
@@ -1,12 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'dante'
|
4
3
|
require 'redis'
|
5
|
-
require 'hiredis'
|
6
4
|
|
7
5
|
require 'flapjack/configuration'
|
8
6
|
require 'flapjack/data/event'
|
9
|
-
require 'flapjack/data/migration'
|
10
7
|
require 'flapjack/patches'
|
11
8
|
|
12
9
|
# TODO options should be overridden by similar config file options
|
@@ -30,101 +27,29 @@ module Flapjack
|
|
30
27
|
|
31
28
|
if @config_env.nil? || @config_env.empty?
|
32
29
|
unless 'mirror'.eql?(@options[:type])
|
33
|
-
exit_now! "No config data
|
30
|
+
exit_now! "No config data found in '#{global_options[:config]}'"
|
34
31
|
end
|
35
|
-
|
36
|
-
@config_env = {}
|
37
|
-
@config_runner = {}
|
38
|
-
else
|
39
|
-
@config_runner = @config_env["#{@options[:type]}-receiver"] || {}
|
40
32
|
end
|
41
33
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
def pidfile
|
46
|
-
@pidfile ||= case
|
47
|
-
when !@options[:pidfile].nil?
|
48
|
-
@options[:pidfile]
|
49
|
-
when !@config_env['pid_dir'].nil?
|
50
|
-
File.join(@config_env['pid_dir'], "#{@options[:type]}-receiver.pid")
|
51
|
-
else
|
52
|
-
"/var/run/flapjack/#{@options[:type]}-receiver.pid"
|
34
|
+
unless 'mirror'.eql?(@options[:type])
|
35
|
+
Flapjack::RedisProxy.config = @config.for_redis
|
36
|
+
Zermelo.redis = Flapjack.redis
|
53
37
|
end
|
54
|
-
end
|
55
38
|
|
56
|
-
|
57
|
-
@logfile ||= case
|
58
|
-
when !@options[:logfile].nil?
|
59
|
-
@options[:logfile]
|
60
|
-
when !@config_env['log_dir'].nil?
|
61
|
-
File.join(@config_env['log_dir'], "#{@options[:type]}-receiver.log")
|
62
|
-
else
|
63
|
-
"/var/run/flapjack/#{@options[:type]}-receiver.log"
|
64
|
-
end
|
39
|
+
@redis_options = @config.for_redis
|
65
40
|
end
|
66
41
|
|
67
42
|
def start
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
main_umask = File.umask
|
75
|
-
else
|
76
|
-
print "\n"
|
77
|
-
end
|
78
|
-
runner(@options[:type]).execute(:daemonize => @options[:daemonize]) do
|
79
|
-
begin
|
80
|
-
File.umask(main_umask) if @options[:daemonize]
|
81
|
-
main(:fifo => @options[:fifo], :type => @options[:type])
|
82
|
-
rescue Exception => e
|
83
|
-
p e.message
|
84
|
-
puts e.backtrace.join("\n")
|
85
|
-
end
|
86
|
-
end
|
87
|
-
puts " done."
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def stop
|
92
|
-
pid = get_pid
|
93
|
-
if runner(@options[:type]).daemon_running?
|
94
|
-
print "#{@options[:type]}-receiver stopping..."
|
95
|
-
runner(@options[:type]).execute(:kill => true)
|
96
|
-
puts " done."
|
97
|
-
else
|
98
|
-
puts "#{@options[:type]}-receiver is not running."
|
99
|
-
end
|
100
|
-
exit_now! unless wait_pid_gone(pid)
|
101
|
-
end
|
102
|
-
|
103
|
-
def restart
|
104
|
-
print "#{@options[:type]}-receiver restarting..."
|
105
|
-
main_umask = File.umask
|
106
|
-
runner(@options[:type]).execute(:daemonize => true, :restart => true) do
|
107
|
-
begin
|
108
|
-
File.umask(main_umask)
|
109
|
-
main(:fifo => @options[:fifo], :type => @options[:type])
|
110
|
-
rescue Exception => e
|
111
|
-
p e.message
|
112
|
-
puts e.backtrace.join("\n")
|
113
|
-
end
|
43
|
+
puts "#{@options[:type]}-receiver starting..."
|
44
|
+
begin
|
45
|
+
main(:fifo => @options[:fifo], :type => @options[:type])
|
46
|
+
rescue Exception => e
|
47
|
+
p e.message
|
48
|
+
puts e.backtrace.join("\n")
|
114
49
|
end
|
115
50
|
puts " done."
|
116
51
|
end
|
117
52
|
|
118
|
-
def status
|
119
|
-
if runner(@options[:type]).daemon_running?
|
120
|
-
pid = get_pid
|
121
|
-
uptime = Time.now - File.stat(pidfile).ctime
|
122
|
-
puts "#{@options[:type]}-receiver is running: pid #{pid}, uptime #{uptime}"
|
123
|
-
else
|
124
|
-
exit_now! "#{@options[:type]}-receiver is not running"
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
53
|
def json
|
129
54
|
json_feeder(:from => @options[:from])
|
130
55
|
end
|
@@ -146,19 +71,7 @@ module Flapjack
|
|
146
71
|
private
|
147
72
|
|
148
73
|
def redis
|
149
|
-
|
150
|
-
@redis = Redis.new(@redis_options.merge(:driver => :hiredis))
|
151
|
-
Flapjack::Data::Migration.migrate_entity_check_data_if_required(:redis => @redis)
|
152
|
-
Flapjack::Data::Migration.clear_orphaned_entity_ids(:redis => @redis)
|
153
|
-
@redis
|
154
|
-
end
|
155
|
-
|
156
|
-
def runner(type)
|
157
|
-
return @runner if @runner
|
158
|
-
|
159
|
-
@runner = Dante::Runner.new("#{@options[:type]}-receiver", :pid_path => pidfile,
|
160
|
-
:log_path => logfile)
|
161
|
-
@runner
|
74
|
+
@redis ||= Redis.new(@redis_options)
|
162
75
|
end
|
163
76
|
|
164
77
|
def process_input(opts)
|
@@ -247,7 +160,7 @@ module Flapjack
|
|
247
160
|
'perfdata' => check_perfdata,
|
248
161
|
'time' => timestamp,
|
249
162
|
}
|
250
|
-
Flapjack::Data::Event.
|
163
|
+
Flapjack::Data::Event.push('events', event)
|
251
164
|
end
|
252
165
|
rescue Redis::CannotConnectError
|
253
166
|
puts "Error, unable to to connect to the redis server (#{$!})"
|
@@ -263,99 +176,101 @@ module Flapjack
|
|
263
176
|
end
|
264
177
|
end
|
265
178
|
|
266
|
-
def process_exists(pid)
|
267
|
-
return unless pid
|
268
|
-
begin
|
269
|
-
Process.kill(0, pid)
|
270
|
-
return true
|
271
|
-
rescue Errno::ESRCH
|
272
|
-
return false
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
# wait until the specified pid no longer exists, or until a timeout is reached
|
277
|
-
def wait_pid_gone(pid, timeout = 30)
|
278
|
-
print "waiting for a max of #{timeout} seconds for process #{pid} to exit" if process_exists(pid)
|
279
|
-
started_at = Time.now.to_i
|
280
|
-
while process_exists(pid)
|
281
|
-
break unless (Time.now.to_i - started_at < timeout)
|
282
|
-
print '.'
|
283
|
-
sleep 1
|
284
|
-
end
|
285
|
-
puts ''
|
286
|
-
!process_exists(pid)
|
287
|
-
end
|
288
|
-
|
289
|
-
def get_pid
|
290
|
-
IO.read(pidfile).chomp.to_i
|
291
|
-
rescue StandardError
|
292
|
-
pid = nil
|
293
|
-
end
|
294
|
-
|
295
|
-
class EventFeedHandler < Oj::ScHandler
|
296
|
-
|
297
|
-
def initialize(&block)
|
298
|
-
@hash_depth = 0
|
299
|
-
@callback = block if block_given?
|
300
|
-
end
|
301
|
-
|
302
|
-
def hash_start
|
303
|
-
@hash_depth += 1
|
304
|
-
Hash.new
|
305
|
-
end
|
306
|
-
|
307
|
-
def hash_end
|
308
|
-
@hash_depth -= 1
|
309
|
-
end
|
310
|
-
|
311
|
-
def array_start
|
312
|
-
Array.new
|
313
|
-
end
|
314
|
-
|
315
|
-
def array_end
|
316
|
-
end
|
317
|
-
|
318
|
-
def add_value(value)
|
319
|
-
@callback.call(value) if @callback
|
320
|
-
nil
|
321
|
-
end
|
322
|
-
|
323
|
-
def hash_set(hash, key, value)
|
324
|
-
hash[key] = value
|
325
|
-
end
|
326
|
-
|
327
|
-
def array_append(array, value)
|
328
|
-
array << value
|
329
|
-
end
|
330
|
-
|
331
|
-
end
|
332
|
-
|
333
179
|
def json_feeder(opts = {})
|
180
|
+
require 'json/stream'
|
181
|
+
|
334
182
|
input = if opts[:from]
|
335
183
|
File.open(opts[:from]) # Explodes if file does not exist.
|
336
|
-
elsif
|
184
|
+
elsif !'java'.eql?(RUBY_PLATFORM) && STDIN.tty?
|
185
|
+
# tty check isn't working under JRuby, assume STDIN is OK to use
|
186
|
+
# https://github.com/jruby/jruby/issues/1332
|
337
187
|
exit_now! "No file provided, and STDIN is from terminal! Exiting..."
|
338
188
|
else
|
339
|
-
|
189
|
+
STDIN
|
340
190
|
end
|
341
191
|
|
342
192
|
# Sit and churn through the input stream until a valid JSON blob has been assembled.
|
343
193
|
# This handles both the case of a process sending a single JSON and then exiting
|
344
194
|
# (eg. cat foo.json | bin/flapjack receiver json) *and* a longer-running process spitting
|
345
195
|
# out events (eg. /usr/bin/slow-event-feed | bin/flapjack receiver json)
|
196
|
+
#
|
197
|
+
# @data is a stack, but @stack is used by the Parser class
|
198
|
+
parser = JSON::Stream::Parser.new do
|
199
|
+
start_document do
|
200
|
+
@data = []
|
201
|
+
@keys = []
|
202
|
+
@result = nil
|
203
|
+
end
|
346
204
|
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
205
|
+
end_document {
|
206
|
+
# interfering with json-stream's "one object per stream" model,
|
207
|
+
# but it errors without this
|
208
|
+
@state = :start_document
|
209
|
+
}
|
210
|
+
|
211
|
+
start_object do
|
212
|
+
@data.push({})
|
213
|
+
end
|
214
|
+
|
215
|
+
end_object do
|
216
|
+
node = @data.pop
|
217
|
+
|
218
|
+
if @data.size > 0
|
219
|
+
top = @data.last
|
220
|
+
case top
|
221
|
+
when Hash
|
222
|
+
top[@keys.pop] = node
|
223
|
+
when Array
|
224
|
+
top << node
|
225
|
+
end
|
226
|
+
else
|
227
|
+
errors = Flapjack::Data::Event.validation_errors_for_hash(node)
|
228
|
+
if errors.empty?
|
229
|
+
Flapjack::Data::Event.push('events', node)
|
230
|
+
puts "Enqueued event data, #{node.inspect}"
|
231
|
+
else
|
232
|
+
puts "Invalid event data received, #{errors.join(', ')} #{node.inspect}"
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
start_array do
|
238
|
+
@data.push([])
|
239
|
+
end
|
240
|
+
|
241
|
+
end_array do
|
242
|
+
node = @data.pop
|
243
|
+
if @data.size > 0
|
244
|
+
top = @data.last
|
245
|
+
case top
|
246
|
+
when Hash
|
247
|
+
top[@keys.pop] = node
|
248
|
+
when Array
|
249
|
+
top << node
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
key do |k|
|
255
|
+
@keys << k
|
256
|
+
end
|
257
|
+
|
258
|
+
value do |v|
|
259
|
+
top = @data.last
|
260
|
+
case top
|
261
|
+
when Hash
|
262
|
+
top[@keys.pop] = v
|
263
|
+
when Array
|
264
|
+
top << v
|
265
|
+
else
|
266
|
+
@data << v
|
267
|
+
end
|
355
268
|
end
|
356
269
|
end
|
357
270
|
|
358
|
-
|
271
|
+
while data = input.read(4096)
|
272
|
+
parser << data
|
273
|
+
end
|
359
274
|
|
360
275
|
puts "Done."
|
361
276
|
end
|
@@ -387,7 +302,8 @@ module Flapjack
|
|
387
302
|
exit_now! "could not understand destination Redis config"
|
388
303
|
end
|
389
304
|
|
390
|
-
Flapjack::
|
305
|
+
Flapjack::RedisProxy.config = dest_redis
|
306
|
+
Zermelo.redis = Flapjack.redis
|
391
307
|
|
392
308
|
archives = mirror_get_archive_keys_stats(:source => source_redis)
|
393
309
|
raise "found no archives!" if archives.empty?
|
@@ -420,11 +336,17 @@ module Flapjack
|
|
420
336
|
loop do
|
421
337
|
event_json = source_redis.lindex(archive_key, cursor)
|
422
338
|
if event_json
|
423
|
-
event = Flapjack::Data::Event.parse_and_validate(event_json)
|
424
|
-
|
339
|
+
event, errors = Flapjack::Data::Event.parse_and_validate(event_json)
|
340
|
+
|
341
|
+
if !errors.nil? && !errors.empty?
|
342
|
+
Flapjack.logger.error {
|
343
|
+
error_str = errors.nil? ? '' : errors.join(', ')
|
344
|
+
"Invalid event data received, #{error_str} #{event.inspect}"
|
345
|
+
}
|
346
|
+
elsif (include_re.nil? ||
|
425
347
|
(include_re === "#{event['entity']}:#{event['check']}"))
|
426
348
|
|
427
|
-
Flapjack::Data::Event.add(event
|
349
|
+
Flapjack::Data::Event.add(event)
|
428
350
|
events_sent += 1
|
429
351
|
print "#{events_sent} " if events_sent % 1000 == 0
|
430
352
|
end
|
@@ -498,173 +420,63 @@ command :receiver do |receiver|
|
|
498
420
|
|
499
421
|
# Details on the wiki: http://flapjack.io/docs/1.0/usage/USING#configuring-nagios
|
500
422
|
# '
|
423
|
+
nagios.flag [:f, 'fifo'], :desc => 'PATH of the nagios perfdata named pipe'
|
501
424
|
|
502
|
-
nagios.
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
start.flag [:p, 'pidfile'], :desc => 'PATH of the pidfile to write to'
|
508
|
-
|
509
|
-
start.flag [:l, 'logfile'], :desc => 'PATH of the logfile to write to'
|
510
|
-
|
511
|
-
start.flag [:f, 'fifo'], :desc => 'PATH of the nagios perfdata named pipe'
|
512
|
-
|
513
|
-
start.action do |global_options,options,args|
|
514
|
-
options.merge!(:type => 'nagios')
|
515
|
-
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
516
|
-
receiver.start
|
517
|
-
end
|
518
|
-
end
|
519
|
-
|
520
|
-
nagios.command :stop do |stop|
|
521
|
-
|
522
|
-
stop.flag [:p, 'pidfile'], :desc => 'PATH of the pidfile to write to'
|
523
|
-
|
524
|
-
stop.flag [:l, 'logfile'], :desc => 'PATH of the logfile to write to'
|
525
|
-
|
526
|
-
stop.action do |global_options,options,args|
|
527
|
-
options.merge!(:type => 'nagios')
|
528
|
-
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
529
|
-
receiver.stop
|
530
|
-
end
|
531
|
-
end
|
532
|
-
|
533
|
-
nagios.command :restart do |restart|
|
534
|
-
|
535
|
-
restart.flag [:p, 'pidfile'], :desc => 'PATH of the pidfile to write to'
|
536
|
-
|
537
|
-
restart.flag [:l, 'logfile'], :desc => 'PATH of the logfile to write to'
|
538
|
-
|
539
|
-
restart.flag [:f, 'fifo'], :desc => 'PATH of the nagios perfdata named pipe'
|
540
|
-
|
541
|
-
restart.action do |global_options,options,args|
|
542
|
-
options.merge!(:type => 'nagios')
|
543
|
-
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
544
|
-
receiver.restart
|
545
|
-
end
|
425
|
+
nagios.action do |global_options,options,args|
|
426
|
+
options.merge!(:type => 'nagios')
|
427
|
+
receiver_cli = Flapjack::CLI::Receiver.new(global_options, options)
|
428
|
+
receiver_cli.start
|
546
429
|
end
|
547
|
-
|
548
|
-
nagios.command :status do |status|
|
549
|
-
|
550
|
-
status.flag [:p, 'pidfile'], :desc => 'PATH of the pidfile to write to'
|
551
|
-
|
552
|
-
status.flag [:l, 'logfile'], :desc => 'PATH of the logfile to write to'
|
553
|
-
|
554
|
-
status.action do |global_options,options,args|
|
555
|
-
options.merge!(:type => 'nagios')
|
556
|
-
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
557
|
-
receiver.status
|
558
|
-
end
|
559
|
-
end
|
560
|
-
|
561
430
|
end
|
562
431
|
|
563
432
|
receiver.desc 'NSCA receiver'
|
564
433
|
#receiver.arg_name 'Turn Nagios passive check results into Flapjack events'
|
565
434
|
receiver.command :nsca do |nsca|
|
566
435
|
|
567
|
-
|
568
|
-
|
569
|
-
# # Not sure what to do with this, extra help output:
|
570
|
-
|
571
|
-
# Required Nagios Configuration Changes
|
572
|
-
# -------------------------------------
|
573
|
-
|
574
|
-
# flapjack-nsca-receiver reads events from the nagios "command file" read from by Nagios, written to by the Nsca-daemon.
|
575
|
-
|
576
|
-
# The named pipe is automatically created by _nagios_ if it is enabled
|
577
|
-
# in the configfile:
|
436
|
+
# # Not sure what to do with this, extra help output:
|
578
437
|
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
# The Nsca daemon is optionally writing to a tempfile if the named pipe does
|
583
|
-
# not exist.
|
584
|
-
|
585
|
-
# Details on the wiki: http://flapjack.io/docs/1.0/usage/USING#XXX
|
586
|
-
# '
|
587
|
-
|
588
|
-
start.switch [:d, 'daemonize'], :desc => 'Daemonize',
|
589
|
-
:default_value => true
|
590
|
-
|
591
|
-
start.flag [:p, 'pidfile'], :desc => 'PATH of the pidfile to write to'
|
592
|
-
|
593
|
-
start.flag [:l, 'logfile'], :desc => 'PATH of the logfile to write to'
|
594
|
-
|
595
|
-
start.flag [:f, 'fifo'], :desc => 'PATH of the nagios perfdata named pipe'
|
596
|
-
|
597
|
-
start.action do |global_options,options,args|
|
598
|
-
options.merge!(:type => 'nsca')
|
599
|
-
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
600
|
-
receiver.start
|
601
|
-
end
|
602
|
-
end
|
603
|
-
|
604
|
-
nsca.command :stop do |stop|
|
605
|
-
|
606
|
-
stop.flag [:p, 'pidfile'], :desc => 'PATH of the pidfile to write to'
|
607
|
-
|
608
|
-
stop.flag [:l, 'logfile'], :desc => 'PATH of the logfile to write to'
|
609
|
-
|
610
|
-
stop.action do |global_options,options,args|
|
611
|
-
options.merge!(:type => 'nsca')
|
612
|
-
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
613
|
-
receiver.stop
|
614
|
-
end
|
615
|
-
end
|
616
|
-
|
617
|
-
nsca.command :restart do |restart|
|
618
|
-
|
619
|
-
restart.flag [:p, 'pidfile'], :desc => 'PATH of the pidfile to write to'
|
620
|
-
|
621
|
-
restart.flag [:l, 'logfile'], :desc => 'PATH of the logfile to write to'
|
438
|
+
# Required Nagios Configuration Changes
|
439
|
+
# -------------------------------------
|
622
440
|
|
623
|
-
|
441
|
+
# flapjack-nsca-receiver reads events from the nagios "command file" read from by Nagios, written to by the Nsca-daemon.
|
624
442
|
|
625
|
-
|
626
|
-
|
627
|
-
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
628
|
-
receiver.restart
|
629
|
-
end
|
630
|
-
end
|
443
|
+
# The named pipe is automatically created by _nagios_ if it is enabled
|
444
|
+
# in the configfile:
|
631
445
|
|
632
|
-
|
446
|
+
# # modified lines:
|
447
|
+
# command_file=/var/lib/nagios3/rw/nagios.cmd
|
633
448
|
|
634
|
-
|
449
|
+
# The Nsca daemon is optionally writing to a tempfile if the named pipe does
|
450
|
+
# not exist.
|
635
451
|
|
636
|
-
|
452
|
+
# Details on the wiki: http://flapjack.io/docs/1.0/usage/USING#XXX
|
453
|
+
# '
|
454
|
+
nsca.flag [:f, 'fifo'], :desc => 'PATH of the nagios perfdata named pipe'
|
637
455
|
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
end
|
456
|
+
nsca.action do |global_options,options,args|
|
457
|
+
options.merge!(:type => 'nsca')
|
458
|
+
cli_receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
459
|
+
cli_receiver.start
|
643
460
|
end
|
644
461
|
|
645
462
|
end
|
646
463
|
|
647
464
|
receiver.desc 'JSON receiver'
|
648
465
|
receiver.command :json do |json|
|
649
|
-
|
650
466
|
json.flag [:f, 'from'], :desc => 'PATH of the file to process [STDIN]'
|
651
467
|
|
652
468
|
json.action do |global_options,options,args|
|
653
|
-
|
654
|
-
|
469
|
+
cli_receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
470
|
+
cli_receiver.json
|
655
471
|
end
|
656
472
|
end
|
657
473
|
|
658
474
|
receiver.desc 'Mirror receiver'
|
659
475
|
receiver.command :mirror do |mirror|
|
660
476
|
|
661
|
-
mirror.flag [:s, 'source'], :desc => 'URL of source redis database,
|
477
|
+
mirror.flag [:s, 'source'], :desc => 'URL of source redis database, eg redis://localhost:6379/0',
|
662
478
|
:required => true
|
663
479
|
|
664
|
-
mirror.flag [:d, 'dest'], :desc => 'URL of destination redis database, e.g. redis://localhost:6379/1'
|
665
|
-
|
666
|
-
mirror.flag [:i, 'include'], :desc => 'Regexp which must match event id for it to be mirrored'
|
667
|
-
|
668
480
|
# one or both of follow, all is required
|
669
481
|
mirror.switch [:f, 'follow'], :desc => 'keep reading events as they are archived on the source',
|
670
482
|
:default_value => nil
|
@@ -681,7 +493,6 @@ command :receiver do |receiver|
|
|
681
493
|
:default_value => nil
|
682
494
|
|
683
495
|
mirror.action do |global_options,options,args|
|
684
|
-
options.merge!(:type => 'mirror')
|
685
496
|
receiver = Flapjack::CLI::Receiver.new(global_options, options)
|
686
497
|
receiver.mirror
|
687
498
|
end
|
@@ -696,6 +507,8 @@ command :receiver do |receiver|
|
|
696
507
|
oneoff = libexec.join('oneoff')
|
697
508
|
if oneoff.exist?
|
698
509
|
Kernel.exec(oneoff.to_s, *ARGV)
|
510
|
+
else
|
511
|
+
exit_now! "Oneoff event submitter doesn't exist"
|
699
512
|
end
|
700
513
|
end
|
701
514
|
end
|
@@ -708,6 +521,8 @@ command :receiver do |receiver|
|
|
708
521
|
httpchecker = libexec.join('httpchecker')
|
709
522
|
if httpchecker.exist?
|
710
523
|
Kernel.exec(httpchecker.to_s, *ARGV)
|
524
|
+
else
|
525
|
+
exit_now! "HTTP checker doesn't exist"
|
711
526
|
end
|
712
527
|
end
|
713
528
|
end
|
@@ -721,9 +536,26 @@ command :receiver do |receiver|
|
|
721
536
|
httpbroker = libexec.join('httpbroker')
|
722
537
|
if httpbroker.exist?
|
723
538
|
Kernel.exec(httpbroker.to_s, *ARGV)
|
539
|
+
else
|
540
|
+
exit_now! "HTTP broker doesn't exist"
|
724
541
|
end
|
725
542
|
end
|
726
543
|
end
|
544
|
+
|
545
|
+
receiver.desc 'HTTP API that caches and submits Cloudwatch events'
|
546
|
+
receiver.command :cloudwatchbroker do |cloudwatchbroker|
|
547
|
+
cloudwatchbroker.passthrough = true
|
548
|
+
cloudwatchbroker.action do |global_options, options, args|
|
549
|
+
libexec = Pathname.new(__FILE__).parent.parent.parent.parent.join('libexec').expand_path
|
550
|
+
cloudwatchbroker = libexec.join('httpbroker')
|
551
|
+
if cloudwatchbroker.exist?
|
552
|
+
Kernel.exec(cloudwatchbroker.to_s, *(ARGV + ['--format=sns']))
|
553
|
+
else
|
554
|
+
exit_now! "HTTP broker doesn't exist"
|
555
|
+
end
|
556
|
+
end
|
557
|
+
end
|
558
|
+
|
727
559
|
end
|
728
560
|
|
729
561
|
|
@@ -732,10 +564,6 @@ end
|
|
732
564
|
|
733
565
|
# config_nr = config_env['nsca-receiver'] || {}
|
734
566
|
|
735
|
-
# pidfile = options.pidfile.nil? ?
|
736
|
-
# (config_nr['pid_file'] || "/var/run/flapjack/#{exe}.pid") :
|
737
|
-
# options.pidfile
|
738
|
-
|
739
567
|
# logfile = options.logfile.nil? ?
|
740
568
|
# (config_nr['log_file'] || "/var/log/flapjack/#{exe}.log") :
|
741
569
|
# options.logfile
|
@@ -743,7 +571,3 @@ end
|
|
743
571
|
# fifo = options.fifo.nil? ?
|
744
572
|
# (config_nr['fifo'] || '/var/lib/nagios3/rw/nagios.cmd') :
|
745
573
|
# options.fifo
|
746
|
-
|
747
|
-
# daemonize = options.daemonize.nil? ?
|
748
|
-
# !!config_nr['daemonize'] :
|
749
|
-
# options.daemonize
|