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.
- 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
|