karafka-web 0.10.4 → 0.11.0.beta1
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +54 -176
- data/Gemfile +4 -0
- data/Gemfile.lock +87 -43
- data/LICENSE +6 -2
- data/bin/verify_kafka_warnings +35 -0
- data/bin/verify_topics_naming +35 -0
- data/config/locales/pro_errors.yml +1 -0
- data/docker-compose.yml +1 -1
- data/gulpfile.js +0 -2
- data/karafka-web.gemspec +2 -2
- data/lib/karafka/web/config.rb +80 -9
- data/lib/karafka/web/contracts/config.rb +44 -5
- data/lib/karafka/web/errors.rb +10 -0
- data/lib/karafka/web/management/actions/create_initial_states.rb +6 -6
- data/lib/karafka/web/management/actions/create_topics.rb +30 -64
- data/lib/karafka/web/management/actions/delete_topics.rb +5 -5
- data/lib/karafka/web/management/actions/enable.rb +5 -5
- data/lib/karafka/web/pro/commanding/commands/base.rb +37 -13
- data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +33 -0
- data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +32 -0
- data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +37 -0
- data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +30 -0
- data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +30 -0
- data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +30 -0
- data/lib/karafka/web/pro/commanding/config.rb +6 -10
- data/lib/karafka/web/pro/commanding/contracts/config.rb +2 -10
- data/lib/karafka/web/pro/commanding/dispatcher.rb +45 -24
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +67 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +44 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +29 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +86 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +56 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +55 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +62 -0
- data/lib/karafka/web/pro/commanding/listener.rb +4 -12
- data/lib/karafka/web/pro/commanding/manager.rb +36 -24
- data/lib/karafka/web/pro/commanding/matcher.rb +7 -17
- data/lib/karafka/web/pro/commanding/request.rb +39 -0
- data/lib/karafka/web/pro/commanding.rb +2 -10
- data/lib/karafka/web/pro/loader.rb +13 -10
- data/lib/karafka/web/pro/ui/app.rb +31 -390
- data/lib/karafka/web/pro/ui/controllers/base_controller.rb +8 -10
- data/lib/karafka/web/pro/ui/controllers/cluster_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/consumers/base_controller.rb +21 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/commanding_controller.rb +148 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/commands_controller.rb +96 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/consumers_controller.rb +101 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +36 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +57 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +86 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +75 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +110 -0
- data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +3 -11
- data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +21 -0
- data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +215 -0
- data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +145 -0
- data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +68 -0
- data/lib/karafka/web/pro/ui/controllers/health_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +12 -13
- data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +8 -16
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +9 -15
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/status_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/support_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +21 -0
- data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +86 -0
- data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +91 -0
- data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +55 -0
- data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +37 -0
- data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +101 -0
- data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/branding/config.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/branding.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/features.rb +53 -0
- data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/policies/config.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/policies/messages.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/policies/requests.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/policies.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/safe_runner.rb +5 -0
- data/lib/karafka/web/pro/ui/lib/search/config.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +10 -11
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +23 -11
- data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +2 -10
- data/lib/karafka/web/pro/ui/lib/search/runner.rb +3 -11
- data/lib/karafka/web/pro/ui/lib/search.rb +2 -10
- data/lib/karafka/web/pro/ui/routes/base.rb +19 -0
- data/lib/karafka/web/pro/ui/routes/cluster.rb +37 -0
- data/lib/karafka/web/pro/ui/routes/consumers.rb +145 -0
- data/lib/karafka/web/pro/ui/routes/dashboard.rb +25 -0
- data/lib/karafka/web/pro/ui/routes/dlq.rb +24 -0
- data/lib/karafka/web/pro/ui/routes/errors.rb +39 -0
- data/lib/karafka/web/pro/ui/routes/explorer.rb +118 -0
- data/lib/karafka/web/pro/ui/routes/health.rb +47 -0
- data/lib/karafka/web/pro/ui/routes/jobs.rb +33 -0
- data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +59 -0
- data/lib/karafka/web/pro/ui/routes/routing.rb +31 -0
- data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +75 -0
- data/lib/karafka/web/pro/ui/routes/status.rb +24 -0
- data/lib/karafka/web/pro/ui/routes/support.rb +24 -0
- data/lib/karafka/web/pro/ui/routes/topics.rb +90 -0
- data/lib/karafka/web/pro/ui/routes/ux.rb +24 -0
- data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +3 -0
- data/lib/karafka/web/pro/ui/views/cluster/_config.erb +3 -0
- data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/cluster/index.erb +4 -1
- data/lib/karafka/web/pro/ui/views/cluster/show.erb +3 -0
- data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_backtrace.erb +3 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +24 -0
- data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_command.erb +22 -6
- data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +4 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +6 -0
- data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_incompatible_schema.erb +3 -0
- data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_metadata.erb +4 -1
- data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_table.erb +5 -2
- data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/index.erb +7 -4
- data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +32 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +46 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +59 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +71 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +38 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +80 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +11 -0
- data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_metrics.erb +3 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +10 -0
- data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_partition.erb +16 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +33 -0
- data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_stopped.erb +3 -0
- data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_subscription_group.erb +7 -3
- data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_tabs.erb +7 -4
- data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +15 -0
- data/lib/karafka/web/pro/ui/views/consumers/{index.erb → consumers/index.erb} +6 -3
- data/lib/karafka/web/pro/ui/views/consumers/{performance.erb → consumers/performance.erb} +6 -3
- data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +24 -0
- data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +16 -0
- data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +107 -0
- data/lib/karafka/web/pro/ui/views/consumers/{controls.erb → controls/index.erb} +8 -5
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +36 -0
- data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_job.erb +3 -0
- data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_no_jobs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/consumers/{pending_jobs.erb → jobs/pending.erb} +7 -8
- data/lib/karafka/web/pro/ui/views/consumers/{running_jobs.erb → jobs/running.erb} +7 -8
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +77 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +58 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +109 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +16 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +15 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +12 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +22 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +27 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +60 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +59 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +24 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +78 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +16 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +20 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +16 -0
- data/lib/karafka/web/pro/ui/views/dashboard/index.erb +4 -1
- data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +3 -0
- data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +4 -1
- data/lib/karafka/web/pro/ui/views/dlq/index.erb +3 -0
- data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/errors/_error.erb +3 -0
- data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +3 -0
- data/lib/karafka/web/pro/ui/views/errors/_selector.erb +3 -0
- data/lib/karafka/web/pro/ui/views/errors/_table.erb +4 -1
- data/lib/karafka/web/pro/ui/views/errors/index.erb +6 -3
- data/lib/karafka/web/pro/ui/views/errors/partition.erb +5 -2
- data/lib/karafka/web/pro/ui/views/errors/show.erb +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/{_breadcrumbs.erb → explorer/_breadcrumbs.erb} +7 -4
- data/lib/karafka/web/pro/ui/views/explorer/{_failed_deserialization.erb → explorer/_failed_deserialization.erb} +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/{_filtered.erb → explorer/_filtered.erb} +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/{_message.erb → explorer/_message.erb} +4 -1
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +4 -0
- data/lib/karafka/web/pro/ui/views/explorer/{_partition_option.erb → explorer/_partition_option.erb} +4 -1
- data/lib/karafka/web/pro/ui/views/explorer/{_selector.erb → explorer/_selector.erb} +4 -1
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +13 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +17 -0
- data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_metadata.erb +10 -7
- data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_payload.erb +6 -3
- data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_resources_utilization.erb +7 -4
- data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_too_big_to_be_displayed.erb +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_detail.erb +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +51 -0
- data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_key.erb +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_cleaned.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_empty.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/{partition → explorer/partition}/_messages.erb +4 -1
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +16 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +33 -0
- data/lib/karafka/web/pro/ui/views/explorer/{partition.erb → explorer/partition.erb} +24 -17
- data/lib/karafka/web/pro/ui/views/explorer/{show.erb → explorer/show.erb} +17 -19
- data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_actions.erb +5 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_limited.erb +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/{topic.erb → explorer/topic.erb} +7 -4
- data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +32 -0
- data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +143 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +4 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +6 -0
- data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_metadata.erb +3 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +6 -0
- data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_no_search_criteria.erb +3 -0
- data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_criteria.erb +3 -0
- data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_modal.erb +5 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +32 -0
- data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/health/_no_data.erb +3 -0
- data/lib/karafka/web/pro/ui/views/health/_partition.erb +16 -1
- data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +3 -0
- data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +3 -0
- data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +3 -0
- data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +4 -1
- data/lib/karafka/web/pro/ui/views/health/_tabs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/health/changes.erb +4 -1
- data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +3 -0
- data/lib/karafka/web/pro/ui/views/health/lags.erb +5 -2
- data/lib/karafka/web/pro/ui/views/health/offsets.erb +4 -1
- data/lib/karafka/web/pro/ui/views/health/overview.erb +8 -3
- data/lib/karafka/web/pro/ui/views/jobs/_job.erb +50 -38
- data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/jobs/pending.erb +4 -1
- data/lib/karafka/web/pro/ui/views/jobs/running.erb +4 -1
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +3 -0
- data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +3 -0
- data/lib/karafka/web/pro/ui/views/routing/_detail.erb +3 -0
- data/lib/karafka/web/pro/ui/views/routing/_topic.erb +3 -0
- data/lib/karafka/web/pro/ui/views/routing/index.erb +3 -0
- data/lib/karafka/web/pro/ui/views/routing/show.erb +3 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +6 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +3 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +4 -1
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +3 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +23 -16
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +6 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +3 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +3 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +4 -1
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +3 -0
- data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +25 -17
- data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +16 -0
- data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +3 -0
- data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +3 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +34 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +26 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +13 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +50 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +16 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +12 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +16 -0
- data/lib/karafka/web/pro/ui/views/topics/{config.erb → configs/index.erb} +9 -3
- data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +13 -0
- data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_badges.erb +3 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +28 -0
- data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_chart.erb +3 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +47 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +15 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +14 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +4 -0
- data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_limited.erb +3 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +13 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +16 -0
- data/lib/karafka/web/pro/ui/views/topics/{distribution.erb → distributions/show.erb} +11 -7
- data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +20 -0
- data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +13 -0
- data/lib/karafka/web/pro/ui/views/topics/{offsets.erb → offsets/show.erb} +6 -3
- data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +20 -0
- data/lib/karafka/web/pro/ui/views/topics/{_partition.erb → replications/_partition.erb} +4 -1
- data/lib/karafka/web/pro/ui/views/topics/{replication.erb → replications/show.erb} +6 -3
- data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +32 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +13 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +15 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +36 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +15 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +13 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +80 -0
- data/lib/karafka/web/pro/ui/views/topics/{_tabs.erb → topics/_tabs.erb} +7 -4
- data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +12 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +10 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +19 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +12 -0
- data/lib/karafka/web/processing/consumers/metrics.rb +1 -1
- data/lib/karafka/web/processing/consumers/state.rb +1 -1
- data/lib/karafka/web/processing/publisher.rb +4 -4
- data/lib/karafka/web/tracking/consumers/contracts/partition.rb +1 -0
- data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +2 -2
- data/lib/karafka/web/tracking/consumers/listeners/transactions.rb +44 -0
- data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
- data/lib/karafka/web/tracking/consumers/sampler.rb +81 -14
- data/lib/karafka/web/tracking/helpers/sysconf.rb +33 -0
- data/lib/karafka/web/tracking/producers/reporter.rb +1 -1
- data/lib/karafka/web/ui/app.rb +19 -112
- data/lib/karafka/web/ui/base.rb +63 -4
- data/lib/karafka/web/ui/controllers/base_controller.rb +43 -1
- data/lib/karafka/web/ui/controllers/cluster_controller.rb +5 -2
- data/lib/karafka/web/ui/controllers/errors_controller.rb +1 -1
- data/lib/karafka/web/ui/controllers/requests/execution_wrapper.rb +52 -0
- data/lib/karafka/web/ui/controllers/requests/hookable.rb +99 -0
- data/lib/karafka/web/ui/controllers/requests/params.rb +39 -1
- data/lib/karafka/web/ui/controllers/responses/redirect.rb +0 -5
- data/lib/karafka/web/ui/controllers/status_controller.rb +3 -0
- data/lib/karafka/web/ui/helpers/application_helper.rb +10 -1
- data/lib/karafka/web/ui/helpers/paths_helper.rb +54 -10
- data/lib/karafka/web/ui/lib/admin.rb +1 -1
- data/lib/karafka/web/ui/lib/cache.rb +135 -0
- data/lib/karafka/web/ui/models/broker.rb +1 -2
- data/lib/karafka/web/ui/models/cluster_info.rb +15 -21
- data/lib/karafka/web/ui/models/consumers_metrics.rb +1 -1
- data/lib/karafka/web/ui/models/consumers_state.rb +1 -1
- data/lib/karafka/web/ui/models/counters.rb +1 -1
- data/lib/karafka/web/ui/models/health.rb +9 -7
- data/lib/karafka/web/ui/models/process.rb +14 -0
- data/lib/karafka/web/ui/models/processes.rb +2 -2
- data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +1 -1
- data/lib/karafka/web/ui/models/status.rb +27 -8
- data/lib/karafka/web/ui/models/topic.rb +1 -2
- data/lib/karafka/web/ui/public/javascripts/application.js +8 -98
- data/lib/karafka/web/ui/public/javascripts/application.min.js +12 -4
- data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
- data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
- data/lib/karafka/web/ui/public/javascripts/components/action_confirmation_manager.js +30 -0
- data/lib/karafka/web/ui/public/javascripts/components/alerts.js +39 -0
- data/lib/karafka/web/ui/public/javascripts/components/button_lock_manager.js +50 -0
- data/lib/karafka/web/ui/public/javascripts/components/live_poll.js +71 -19
- data/lib/karafka/web/ui/public/javascripts/components/message_republish_manager.js +50 -0
- data/lib/karafka/web/ui/public/javascripts/components/page_title_tracker.js +21 -0
- data/lib/karafka/web/ui/public/javascripts/components/partition_redirect_manager.js +21 -0
- data/lib/karafka/web/ui/public/javascripts/components/time_ago_manager.js +25 -0
- data/lib/karafka/web/ui/public/javascripts/components/timestamp_selector.js +30 -0
- data/lib/karafka/web/ui/public/javascripts/libs/datepicker.js +2 -2
- data/lib/karafka/web/ui/public/stylesheets/application.css +30 -0
- data/lib/karafka/web/ui/public/stylesheets/application.min.css +5122 -13
- data/lib/karafka/web/ui/public/stylesheets/application.min.css.br +0 -0
- data/lib/karafka/web/ui/public/stylesheets/application.min.css.gz +0 -0
- data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.gz +0 -0
- data/lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.gz +0 -0
- data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +512 -213
- data/lib/karafka/web/ui/routes/assets.rb +53 -0
- data/lib/karafka/web/ui/routes/base.rb +36 -0
- data/lib/karafka/web/ui/routes/cluster.rb +28 -0
- data/lib/karafka/web/ui/routes/consumers.rb +35 -0
- data/lib/karafka/web/ui/routes/dashboard.rb +20 -0
- data/lib/karafka/web/ui/routes/errors.rb +26 -0
- data/lib/karafka/web/ui/routes/jobs.rb +28 -0
- data/lib/karafka/web/ui/routes/pro_only.rb +27 -0
- data/lib/karafka/web/ui/routes/routing.rb +26 -0
- data/lib/karafka/web/ui/routes/status.rb +19 -0
- data/lib/karafka/web/ui/routes/support.rb +19 -0
- data/lib/karafka/web/ui/routes/ux.rb +19 -0
- data/lib/karafka/web/ui/views/cluster/_partition.erb +2 -2
- data/lib/karafka/web/ui/views/cluster/brokers.erb +1 -1
- data/lib/karafka/web/ui/views/consumers/_breadcrumbs.erb +7 -1
- data/lib/karafka/web/ui/views/consumers/_consumer.erb +39 -30
- data/lib/karafka/web/ui/views/consumers/_incompatible.erb +13 -0
- data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +2 -2
- data/lib/karafka/web/ui/views/consumers/_tabs.erb +4 -4
- data/lib/karafka/web/ui/views/consumers/index.erb +1 -1
- data/lib/karafka/web/ui/views/dashboard/_feature_pro.erb +1 -1
- data/lib/karafka/web/ui/views/dashboard/_not_enough_data.erb +2 -2
- data/lib/karafka/web/ui/views/dashboard/_ranges_selector.erb +1 -1
- data/lib/karafka/web/ui/views/dashboard/index.erb +6 -49
- data/lib/karafka/web/ui/views/errors/_detail.erb +3 -3
- data/lib/karafka/web/ui/views/errors/index.erb +1 -1
- data/lib/karafka/web/ui/views/jobs/_job.erb +38 -29
- data/lib/karafka/web/ui/views/jobs/pending.erb +1 -1
- data/lib/karafka/web/ui/views/jobs/running.erb +1 -1
- data/lib/karafka/web/ui/views/layout.erb +7 -5
- data/lib/karafka/web/ui/views/shared/_become_pro.erb +1 -1
- data/lib/karafka/web/ui/views/shared/_brand.erb +1 -1
- data/lib/karafka/web/ui/views/shared/_breadcrumbs.erb +1 -1
- data/lib/karafka/web/ui/views/shared/_content.erb +1 -1
- data/lib/karafka/web/ui/views/shared/_controls.erb +10 -3
- data/lib/karafka/web/ui/views/shared/_custom_nav.erb +9 -0
- data/lib/karafka/web/ui/views/shared/_flashes.erb +3 -5
- data/lib/karafka/web/ui/views/shared/_header.erb +25 -2
- data/lib/karafka/web/ui/views/shared/_navigation.erb +17 -15
- data/lib/karafka/web/ui/views/shared/alerts/_error.erb +8 -0
- data/lib/karafka/web/ui/views/shared/alerts/_info.erb +8 -0
- data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +8 -0
- data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +8 -0
- data/lib/karafka/web/ui/views/shared/alerts/_success.erb +8 -0
- data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +8 -0
- data/lib/karafka/web/ui/views/shared/exceptions/incompatible_schema.erb +34 -0
- data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +4 -0
- data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +5 -1
- data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +4 -0
- data/lib/karafka/web/ui/views/shared/icons/_arrow_left.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_arrow_up_tray.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_clock.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_pencil.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_pencil_square.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_play_pause.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_plus.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_trash.erb +3 -0
- data/lib/karafka/web/ui/views/status/failures/_live_reporting.erb +1 -1
- data/lib/karafka/web/ui/views/status/failures/_partitions.erb +3 -3
- data/lib/karafka/web/ui/views/status/failures/_state_calculation.erb +2 -2
- data/lib/karafka/web/ui/views/status/info/_components.erb +6 -6
- data/lib/karafka/web/ui/views/status/show.erb +15 -0
- data/lib/karafka/web/ui/views/status/warnings/_consumers_schemas.erb +31 -0
- data/lib/karafka/web/ui/views/ux/_icons.erb +1 -1
- data/lib/karafka/web/ui/views/ux/_status_rows.erb +6 -0
- data/lib/karafka/web/version.rb +1 -1
- data/lib/karafka/web.rb +3 -0
- data/package-lock.json +776 -1208
- data/package.json +3 -4
- data/postcss.config.js +1 -2
- data/renovate.json +13 -1
- data/tailwind.config.js +0 -4
- data.tar.gz.sig +0 -0
- metadata +232 -108
- metadata.gz.sig +0 -0
- data/lib/karafka/web/pro/commanding/commands/quiet.rb +0 -34
- data/lib/karafka/web/pro/commanding/commands/stop.rb +0 -34
- data/lib/karafka/web/pro/commanding/commands/trace.rb +0 -41
- data/lib/karafka/web/pro/ui/controllers/commanding_controller.rb +0 -118
- data/lib/karafka/web/pro/ui/controllers/commands_controller.rb +0 -96
- data/lib/karafka/web/pro/ui/controllers/consumers_controller.rb +0 -138
- data/lib/karafka/web/pro/ui/controllers/explorer_controller.rb +0 -220
- data/lib/karafka/web/pro/ui/controllers/messages_controller.rb +0 -107
- data/lib/karafka/web/pro/ui/controllers/search_controller.rb +0 -73
- data/lib/karafka/web/pro/ui/controllers/topics_controller.rb +0 -130
- data/lib/karafka/web/pro/ui/views/commands/_breadcrumbs.erb +0 -21
- data/lib/karafka/web/pro/ui/views/commands/_command_details.erb +0 -1
- data/lib/karafka/web/pro/ui/views/commands/_empty.erb +0 -3
- data/lib/karafka/web/pro/ui/views/commands/show.erb +0 -33
- data/lib/karafka/web/pro/ui/views/consumers/_breadcrumbs.erb +0 -55
- data/lib/karafka/web/pro/ui/views/consumers/_consumer.erb +0 -47
- data/lib/karafka/web/pro/ui/views/consumers/_consumer_controls.erb +0 -95
- data/lib/karafka/web/pro/ui/views/consumers/_consumer_performance.erb +0 -59
- data/lib/karafka/web/pro/ui/views/consumers/_tabs.erb +0 -33
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_commands.erb +0 -72
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_consumer_group.erb +0 -8
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_no_subscriptions.erb +0 -7
- data/lib/karafka/web/pro/ui/views/consumers/details.erb +0 -13
- data/lib/karafka/web/pro/ui/views/consumers/subscriptions.erb +0 -25
- data/lib/karafka/web/pro/ui/views/explorer/_no_topics.erb +0 -1
- data/lib/karafka/web/pro/ui/views/explorer/_topic.erb +0 -10
- data/lib/karafka/web/pro/ui/views/explorer/index.erb +0 -14
- data/lib/karafka/web/pro/ui/views/explorer/messages/_headers.erb +0 -33
- data/lib/karafka/web/pro/ui/views/explorer/partition/_cleaned.erb +0 -3
- data/lib/karafka/web/pro/ui/views/explorer/partition/_empty.erb +0 -3
- data/lib/karafka/web/pro/ui/views/explorer/topic/_empty.erb +0 -3
- data/lib/karafka/web/pro/ui/views/search/_breadcrumbs.erb +0 -1
- data/lib/karafka/web/pro/ui/views/search/_fix_errors.erb +0 -3
- data/lib/karafka/web/pro/ui/views/search/_no_results.erb +0 -3
- data/lib/karafka/web/pro/ui/views/search/_timeout.erb +0 -3
- data/lib/karafka/web/pro/ui/views/search/index.erb +0 -29
- data/lib/karafka/web/pro/ui/views/topics/_breadcrumbs.erb +0 -45
- data/lib/karafka/web/pro/ui/views/topics/_partition_offsets.erb +0 -10
- data/lib/karafka/web/pro/ui/views/topics/_topic.erb +0 -9
- data/lib/karafka/web/pro/ui/views/topics/distribution/_empty_partitions.erb +0 -1
- data/lib/karafka/web/pro/ui/views/topics/distribution/_partition.erb +0 -10
- data/lib/karafka/web/pro/ui/views/topics/index.erb +0 -14
- data/lib/karafka/web/ui/lib/ttl_cache.rb +0 -82
data/lib/karafka/web/config.rb
CHANGED
@@ -35,24 +35,79 @@ module Karafka
|
|
35
35
|
# Topics naming - used for processing and UI
|
36
36
|
setting :topics do
|
37
37
|
# All the errors encountered will be dispatched to this topic for inspection
|
38
|
-
setting :errors
|
38
|
+
setting :errors do
|
39
|
+
setting :name, default: 'karafka_errors'
|
40
|
+
|
41
|
+
# Remove really old errors (older than 3 months just to preserve space)
|
42
|
+
setting :config, default: {
|
43
|
+
'cleanup.policy': 'delete',
|
44
|
+
'retention.ms': 3 * 31 * 24 * 60 * 60 * 1_000 # 3 months
|
45
|
+
}
|
46
|
+
end
|
39
47
|
|
40
48
|
setting :consumers do
|
41
49
|
# Reports containing particular consumer processes. This topic contains the heartbeat
|
42
50
|
# information sent from each consumer process.
|
43
|
-
setting :reports
|
51
|
+
setting :reports do
|
52
|
+
# Name of the topic
|
53
|
+
setting :name, default: 'karafka_consumers_reports'
|
54
|
+
|
55
|
+
# We do not need to to store this data for longer than 1 day as this data is only
|
56
|
+
# used to materialize the end states
|
57
|
+
# On the other hand we do not want to have it really short-living because in case
|
58
|
+
# of a consumer crash, we may want to use this info to catch up and backfill the
|
59
|
+
# state.
|
60
|
+
#
|
61
|
+
# In case its not consumed because no processes are running, it also usually means
|
62
|
+
# there's no data to consume because no karafka servers report
|
63
|
+
setting :config, default: {
|
64
|
+
'cleanup.policy': 'delete',
|
65
|
+
'retention.ms': 24 * 60 * 60 * 1_000 # 1 day
|
66
|
+
}
|
67
|
+
end
|
44
68
|
|
45
69
|
# Topic for storing states aggregated info
|
46
|
-
setting :states
|
70
|
+
setting :states do
|
71
|
+
setting :name, default: 'karafka_consumers_states'
|
72
|
+
|
73
|
+
# We care only about the most recent state, previous are irrelevant. So we can
|
74
|
+
# easily compact after one minute. We do not use this beyond the most recent
|
75
|
+
# collective state, hence it all can easily go away. We also limit the segment
|
76
|
+
# size to at most 100MB not to use more space ever.
|
77
|
+
setting :config, default: {
|
78
|
+
'cleanup.policy': 'compact',
|
79
|
+
'retention.ms': 60 * 60 * 1_000,
|
80
|
+
'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
|
81
|
+
'segment.bytes': 104_857_600 # 100MB
|
82
|
+
}
|
83
|
+
end
|
47
84
|
|
48
85
|
# Topic for storing consumers historical metrics info
|
49
|
-
setting :metrics
|
86
|
+
setting :metrics do
|
87
|
+
setting :name, default: 'karafka_consumers_metrics'
|
88
|
+
|
89
|
+
setting :config, default: {
|
90
|
+
'cleanup.policy': 'compact',
|
91
|
+
'retention.ms': 24 * 60 * 60 * 1_000, # 1 day
|
92
|
+
'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
|
93
|
+
'segment.bytes': 104_857_600 # 100MB
|
94
|
+
}
|
95
|
+
end
|
50
96
|
|
51
97
|
# Topic for storing commands and their results
|
52
98
|
# This is used only in Pro, however we do setup it in OSS in case of upgrade so the
|
53
99
|
# transition from one to another is smooth. Otherwise upgrade would require changes
|
54
100
|
# to topics (migration) which may be more complex
|
55
|
-
setting :commands
|
101
|
+
setting :commands do
|
102
|
+
setting :name, default: 'karafka_consumers_commands'
|
103
|
+
|
104
|
+
setting :config, default: {
|
105
|
+
'cleanup.policy': 'delete',
|
106
|
+
'retention.ms': 7 * 24 * 60 * 60 * 1_000, # 7 days
|
107
|
+
'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
|
108
|
+
'segment.bytes': 104_857_600 # 100MB
|
109
|
+
}
|
110
|
+
end
|
56
111
|
end
|
57
112
|
end
|
58
113
|
|
@@ -93,7 +148,8 @@ module Karafka
|
|
93
148
|
Tracking::Consumers::Listeners::Statistics.new,
|
94
149
|
Tracking::Consumers::Listeners::Pausing.new,
|
95
150
|
Tracking::Consumers::Listeners::Processing.new,
|
96
|
-
Tracking::Consumers::Listeners::Tags.new
|
151
|
+
Tracking::Consumers::Listeners::Tags.new,
|
152
|
+
Tracking::Consumers::Listeners::Transactions.new
|
97
153
|
]
|
98
154
|
end
|
99
155
|
|
@@ -150,10 +206,13 @@ module Karafka
|
|
150
206
|
setting :secret, default: SecureRandom.hex(32)
|
151
207
|
end
|
152
208
|
|
153
|
-
#
|
154
|
-
setting :cache, default: Ui::Lib::
|
209
|
+
# Process cache with invalidation only
|
210
|
+
setting :cache, default: Ui::Lib::Cache.new(
|
155
211
|
# Use the TTL for internal cache in prod but invalidate quickly in other environments,
|
156
|
-
# as for example in development things may change frequently
|
212
|
+
# as for example in development things may change frequently. In dev also the cache
|
213
|
+
# is less needed since local clusters are usually smaller than prod.
|
214
|
+
# It is set to 5 minutes by default because in prod the cluster chances are not frequent
|
215
|
+
# and anyhow we refresh on certain web ui actions so this is as fail-safe
|
157
216
|
Karafka.env.production? ? 60_000 * 5 : 5_000
|
158
217
|
)
|
159
218
|
|
@@ -186,6 +245,18 @@ module Karafka
|
|
186
245
|
# default will not be displayed not to hang the browser. 512KB of serialized data is a lot.
|
187
246
|
setting :max_visible_payload_size, default: 524_288
|
188
247
|
|
248
|
+
setting :custom do
|
249
|
+
# Path to a custom CSS, string with the CSS or false if not used
|
250
|
+
setting :css, default: false
|
251
|
+
|
252
|
+
# Path to a custom JS, string with the JS or false if not used
|
253
|
+
setting :js, default: false
|
254
|
+
|
255
|
+
# ERB template (path or string) for injecting extra navigation items below the default
|
256
|
+
# menu. Useful for adding "Back to app" links or other quick access actions.
|
257
|
+
setting :nav_erb, default: false
|
258
|
+
end
|
259
|
+
|
189
260
|
# Specific kafka settings that are tuned to operate within the Web UI interface.
|
190
261
|
#
|
191
262
|
# Please do not change them unless you know what you are doing as their misconfiguration
|
@@ -15,12 +15,46 @@ module Karafka
|
|
15
15
|
required(:group_id) { |val| val.is_a?(String) && TOPIC_REGEXP.match?(val) }
|
16
16
|
|
17
17
|
nested(:topics) do
|
18
|
-
|
18
|
+
nested(:errors) do
|
19
|
+
required(:name) { |val| val.is_a?(String) && TOPIC_REGEXP.match?(val) }
|
20
|
+
|
21
|
+
required(:config) do |val|
|
22
|
+
val.is_a?(Hash) && !val.empty? && val.keys.all? { |key| key.is_a?(Symbol) }
|
23
|
+
end
|
24
|
+
end
|
19
25
|
|
20
26
|
nested(:consumers) do
|
21
|
-
|
22
|
-
|
23
|
-
|
27
|
+
nested(:reports) do
|
28
|
+
required(:name) { |val| val.is_a?(String) && TOPIC_REGEXP.match?(val) }
|
29
|
+
|
30
|
+
required(:config) do |val|
|
31
|
+
val.is_a?(Hash) && !val.empty? && val.keys.all? { |key| key.is_a?(Symbol) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
nested(:states) do
|
36
|
+
required(:name) { |val| val.is_a?(String) && TOPIC_REGEXP.match?(val) }
|
37
|
+
|
38
|
+
required(:config) do |val|
|
39
|
+
val.is_a?(Hash) && !val.empty? && val.keys.all? { |key| key.is_a?(Symbol) }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
nested(:metrics) do
|
44
|
+
required(:name) { |val| val.is_a?(String) && TOPIC_REGEXP.match?(val) }
|
45
|
+
|
46
|
+
required(:config) do |val|
|
47
|
+
val.is_a?(Hash) && !val.empty? && val.keys.all? { |key| key.is_a?(Symbol) }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
nested(:commands) do
|
52
|
+
required(:name) { |val| val.is_a?(String) && TOPIC_REGEXP.match?(val) }
|
53
|
+
|
54
|
+
required(:config) do |val|
|
55
|
+
val.is_a?(Hash) && !val.empty? && val.keys.all? { |key| key.is_a?(Symbol) }
|
56
|
+
end
|
57
|
+
end
|
24
58
|
end
|
25
59
|
end
|
26
60
|
|
@@ -60,11 +94,16 @@ module Karafka
|
|
60
94
|
required(:secret) { |val| val.is_a?(String) && val.length >= 64 }
|
61
95
|
end
|
62
96
|
|
63
|
-
required(:cache) { |val| !val.nil? }
|
64
97
|
required(:per_page) { |val| val.is_a?(Integer) && val >= 1 && val <= 100 }
|
65
98
|
required(:max_visible_payload_size) { |val| val.is_a?(Integer) && val >= 1 }
|
66
99
|
required(:kafka) { |val| val.is_a?(Hash) }
|
67
100
|
|
101
|
+
nested(:custom) do
|
102
|
+
required(:css) { |val| val == false || (val.is_a?(String) && !val.empty?) }
|
103
|
+
required(:js) { |val| val == false || (val.is_a?(String) && !val.empty?) }
|
104
|
+
required(:nav_erb) { |val| val == false || (val.is_a?(String) && !val.empty?) }
|
105
|
+
end
|
106
|
+
|
68
107
|
required(:dlq_patterns) do |val|
|
69
108
|
val.is_a?(Array) &&
|
70
109
|
val.all? { |attr| attr.is_a?(String) || attr.is_a?(Regexp) }
|
data/lib/karafka/web/errors.rb
CHANGED
@@ -20,6 +20,11 @@ module Karafka
|
|
20
20
|
# configures Karafka
|
21
21
|
KarafkaNotInitializedError = Class.new(BaseError)
|
22
22
|
|
23
|
+
# Raised when you try to configure Web UI after it was enabled. It is not allowed because
|
24
|
+
# Karafka Web UI uses the setup values during the enablement and their later change may not
|
25
|
+
# be fully reflected. Always run `#setup` before `#enable!`.
|
26
|
+
LateSetupError = Class.new(BaseError)
|
27
|
+
|
23
28
|
# Errors specific to management
|
24
29
|
module Management
|
25
30
|
# Similar to processing error with the same name, it is raised when a critical
|
@@ -74,6 +79,11 @@ module Karafka
|
|
74
79
|
|
75
80
|
# Raised when we want to stop the flow and render 403
|
76
81
|
ForbiddenError = Class.new(BaseError)
|
82
|
+
|
83
|
+
# Raised when trying to get info about a consumer that has incompatible schema in its
|
84
|
+
# report. It usually means you are running different version of the Web UI in the consumer
|
85
|
+
# and in the Web server
|
86
|
+
IncompatibleSchemaError = Class.new(BaseError)
|
77
87
|
end
|
78
88
|
end
|
79
89
|
end
|
@@ -20,25 +20,25 @@ module Karafka
|
|
20
20
|
|
21
21
|
# Creates the initial states for the Web-UI if needed (if they don't exist)
|
22
22
|
def call
|
23
|
-
if exists?(Karafka::Web.config.topics.consumers.states)
|
23
|
+
if exists?(Karafka::Web.config.topics.consumers.states.name)
|
24
24
|
exists('consumers state')
|
25
25
|
else
|
26
26
|
creating('consumers state')
|
27
27
|
::Karafka::Web.producer.produce_sync(
|
28
|
-
topic: Karafka::Web.config.topics.consumers.states,
|
29
|
-
key: Karafka::Web.config.topics.consumers.states,
|
28
|
+
topic: Karafka::Web.config.topics.consumers.states.name,
|
29
|
+
key: Karafka::Web.config.topics.consumers.states.name,
|
30
30
|
payload: DEFAULT_STATE.to_json
|
31
31
|
)
|
32
32
|
created('consumers state')
|
33
33
|
end
|
34
34
|
|
35
|
-
if exists?(Karafka::Web.config.topics.consumers.metrics)
|
35
|
+
if exists?(Karafka::Web.config.topics.consumers.metrics.name)
|
36
36
|
exists('consumers metrics')
|
37
37
|
else
|
38
38
|
creating('consumers metrics')
|
39
39
|
::Karafka::Web.producer.produce_sync(
|
40
|
-
topic: Karafka::Web.config.topics.consumers.metrics,
|
41
|
-
key: Karafka::Web.config.topics.consumers.metrics,
|
40
|
+
topic: Karafka::Web.config.topics.consumers.metrics.name,
|
41
|
+
key: Karafka::Web.config.topics.consumers.metrics.name,
|
42
42
|
payload: DEFAULT_METRICS.to_json
|
43
43
|
)
|
44
44
|
created('consumers metrics')
|
@@ -23,114 +23,80 @@ module Karafka
|
|
23
23
|
consumers_commands_topic = ::Karafka::Web.config.topics.consumers.commands
|
24
24
|
errors_topic = ::Karafka::Web.config.topics.errors
|
25
25
|
|
26
|
-
if existing_topics_names.include?(errors_topic)
|
27
|
-
exists(errors_topic)
|
26
|
+
if existing_topics_names.include?(errors_topic.name)
|
27
|
+
exists(errors_topic.name)
|
28
28
|
else
|
29
|
-
creating(errors_topic)
|
29
|
+
creating(errors_topic.name)
|
30
30
|
# All the errors will be dispatched here
|
31
31
|
# This topic can have multiple partitions but we go with one by default. A single
|
32
32
|
# Ruby process should not crash that often and if there is an expectation of a higher
|
33
33
|
# volume of errors, this can be changed by the end user
|
34
34
|
::Karafka::Admin.create_topic(
|
35
|
-
errors_topic,
|
35
|
+
errors_topic.name,
|
36
36
|
1,
|
37
37
|
replication_factor,
|
38
|
-
|
39
|
-
{
|
40
|
-
'cleanup.policy': 'delete',
|
41
|
-
'retention.ms': 3 * 31 * 24 * 60 * 60 * 1_000 # 3 months
|
42
|
-
}
|
38
|
+
errors_topic.config
|
43
39
|
)
|
44
|
-
created(errors_topic)
|
40
|
+
created(errors_topic.name)
|
45
41
|
end
|
46
42
|
|
47
|
-
if existing_topics_names.include?(consumers_reports_topic)
|
48
|
-
exists(consumers_reports_topic)
|
43
|
+
if existing_topics_names.include?(consumers_reports_topic.name)
|
44
|
+
exists(consumers_reports_topic.name)
|
49
45
|
else
|
50
|
-
creating(consumers_reports_topic)
|
46
|
+
creating(consumers_reports_topic.name)
|
51
47
|
# This topic needs to have one partition
|
52
48
|
::Karafka::Admin.create_topic(
|
53
|
-
consumers_reports_topic,
|
49
|
+
consumers_reports_topic.name,
|
54
50
|
1,
|
55
51
|
replication_factor,
|
56
|
-
|
57
|
-
# used to materialize the end states
|
58
|
-
# On the other hand we do not want to have it really short-living because in case
|
59
|
-
# of a consumer crash, we may want to use this info to catch up and backfill the
|
60
|
-
# state.
|
61
|
-
#
|
62
|
-
# In case its not consumed because no processes are running, it also usually means
|
63
|
-
# there's no data to consume because no karafka servers report
|
64
|
-
{
|
65
|
-
'cleanup.policy': 'delete',
|
66
|
-
'retention.ms': 24 * 60 * 60 * 1_000 # 1 day
|
67
|
-
}
|
52
|
+
consumers_reports_topic.config
|
68
53
|
)
|
69
|
-
created(consumers_reports_topic)
|
54
|
+
created(consumers_reports_topic.name)
|
70
55
|
end
|
71
56
|
|
72
|
-
if existing_topics_names.include?(consumers_metrics_topic)
|
73
|
-
exists(consumers_metrics_topic)
|
57
|
+
if existing_topics_names.include?(consumers_metrics_topic.name)
|
58
|
+
exists(consumers_metrics_topic.name)
|
74
59
|
else
|
75
|
-
creating(consumers_metrics_topic)
|
60
|
+
creating(consumers_metrics_topic.name)
|
76
61
|
# This topic needs to have one partition
|
77
62
|
# Same as states - only most recent is relevant as it is a materialized state
|
78
63
|
::Karafka::Admin.create_topic(
|
79
|
-
consumers_metrics_topic,
|
64
|
+
consumers_metrics_topic.name,
|
80
65
|
1,
|
81
66
|
replication_factor,
|
82
|
-
|
83
|
-
'cleanup.policy': 'compact',
|
84
|
-
'retention.ms': 24 * 60 * 60 * 1_000, # 1 day
|
85
|
-
'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
|
86
|
-
'segment.bytes': 104_857_600 # 100MB
|
87
|
-
}
|
67
|
+
consumers_metrics_topic.config
|
88
68
|
)
|
89
|
-
created(consumers_metrics_topic)
|
69
|
+
created(consumers_metrics_topic.name)
|
90
70
|
end
|
91
71
|
|
92
|
-
if existing_topics_names.include?(consumers_commands_topic)
|
93
|
-
exists(consumers_commands_topic)
|
72
|
+
if existing_topics_names.include?(consumers_commands_topic.name)
|
73
|
+
exists(consumers_commands_topic.name)
|
94
74
|
else
|
95
|
-
creating(consumers_commands_topic)
|
75
|
+
creating(consumers_commands_topic.name)
|
96
76
|
# Commands are suppose to live short and be used for controlling processes and some
|
97
77
|
# debug. Their data can be removed safely fast.
|
98
78
|
::Karafka::Admin.create_topic(
|
99
|
-
consumers_commands_topic,
|
79
|
+
consumers_commands_topic.name,
|
100
80
|
1,
|
101
81
|
replication_factor,
|
102
|
-
|
103
|
-
'cleanup.policy': 'delete',
|
104
|
-
'retention.ms': 7 * 24 * 60 * 60 * 1_000, # 7 days
|
105
|
-
'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
|
106
|
-
'segment.bytes': 104_857_600 # 100MB
|
107
|
-
}
|
82
|
+
consumers_commands_topic.config
|
108
83
|
)
|
109
|
-
created(consumers_commands_topic)
|
84
|
+
created(consumers_commands_topic.name)
|
110
85
|
end
|
111
86
|
|
112
87
|
# Create only if needed
|
113
|
-
if existing_topics_names.include?(consumers_states_topic)
|
114
|
-
exists(consumers_states_topic)
|
88
|
+
if existing_topics_names.include?(consumers_states_topic.name)
|
89
|
+
exists(consumers_states_topic.name)
|
115
90
|
else
|
116
|
-
creating(consumers_states_topic)
|
91
|
+
creating(consumers_states_topic.name)
|
117
92
|
# This topic needs to have one partition
|
118
93
|
::Karafka::Admin.create_topic(
|
119
|
-
consumers_states_topic,
|
94
|
+
consumers_states_topic.name,
|
120
95
|
1,
|
121
96
|
replication_factor,
|
122
|
-
|
123
|
-
# easily compact after one minute. We do not use this beyond the most recent
|
124
|
-
# collective state, hence it all can easily go away. We also limit the segment
|
125
|
-
# size to at most 100MB not to use more space ever.
|
126
|
-
{
|
127
|
-
'cleanup.policy': 'compact',
|
128
|
-
'retention.ms': 60 * 60 * 1_000,
|
129
|
-
'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
|
130
|
-
'segment.bytes': 104_857_600 # 100MB
|
131
|
-
}
|
97
|
+
consumers_states_topic.config
|
132
98
|
)
|
133
|
-
created(consumers_states_topic)
|
99
|
+
created(consumers_states_topic.name)
|
134
100
|
end
|
135
101
|
end
|
136
102
|
|
@@ -9,11 +9,11 @@ module Karafka
|
|
9
9
|
# Removes the Web-UI topics
|
10
10
|
def call
|
11
11
|
[
|
12
|
-
::Karafka::Web.config.topics.consumers.states,
|
13
|
-
::Karafka::Web.config.topics.consumers.reports,
|
14
|
-
::Karafka::Web.config.topics.consumers.metrics,
|
15
|
-
::Karafka::Web.config.topics.consumers.commands,
|
16
|
-
::Karafka::Web.config.topics.errors
|
12
|
+
::Karafka::Web.config.topics.consumers.states.name,
|
13
|
+
::Karafka::Web.config.topics.consumers.reports.name,
|
14
|
+
::Karafka::Web.config.topics.consumers.metrics.name,
|
15
|
+
::Karafka::Web.config.topics.consumers.commands.name,
|
16
|
+
::Karafka::Web.config.topics.errors.name
|
17
17
|
].each do |topic_name|
|
18
18
|
if existing_topics_names.include?(topic_name.to_s)
|
19
19
|
puts "Removing #{topic_name}..."
|
@@ -55,7 +55,7 @@ module Karafka
|
|
55
55
|
|
56
56
|
consumer_group ::Karafka::Web.config.group_id do
|
57
57
|
# Topic we listen on to materialize the states
|
58
|
-
topic ::Karafka::Web.config.topics.consumers.reports do
|
58
|
+
topic ::Karafka::Web.config.topics.consumers.reports.name do
|
59
59
|
config(active: false)
|
60
60
|
active ::Karafka::Web.config.processing.active
|
61
61
|
# Since we materialize state in intervals, we can poll for half of this time
|
@@ -80,25 +80,25 @@ module Karafka
|
|
80
80
|
|
81
81
|
# We define those three here without consumption, so Web understands how to
|
82
82
|
# deserialize them when used / viewed
|
83
|
-
topic ::Karafka::Web.config.topics.consumers.states do
|
83
|
+
topic ::Karafka::Web.config.topics.consumers.states.name do
|
84
84
|
config(active: false)
|
85
85
|
active false
|
86
86
|
deserializers(payload: payload_deserializer)
|
87
87
|
end
|
88
88
|
|
89
|
-
topic ::Karafka::Web.config.topics.consumers.metrics do
|
89
|
+
topic ::Karafka::Web.config.topics.consumers.metrics.name do
|
90
90
|
config(active: false)
|
91
91
|
active false
|
92
92
|
deserializers(payload: payload_deserializer)
|
93
93
|
end
|
94
94
|
|
95
|
-
topic ::Karafka::Web.config.topics.consumers.commands do
|
95
|
+
topic ::Karafka::Web.config.topics.consumers.commands.name do
|
96
96
|
config(active: false)
|
97
97
|
active false
|
98
98
|
deserializers(payload: payload_deserializer)
|
99
99
|
end
|
100
100
|
|
101
|
-
topic ::Karafka::Web.config.topics.errors do
|
101
|
+
topic ::Karafka::Web.config.topics.errors.name do
|
102
102
|
config(active: false)
|
103
103
|
active false
|
104
104
|
deserializers(payload: payload_deserializer)
|
@@ -1,15 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# This
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# All of the commercial components are present in the lib/karafka/pro directory of this
|
7
|
-
# repository and their usage requires commercial license agreement.
|
8
|
-
#
|
9
|
-
# Karafka has also commercial-friendly license, commercial support and commercial components.
|
10
|
-
#
|
11
|
-
# By sending a pull request to the pro components, you are agreeing to transfer the copyright of
|
12
|
-
# your code to Maciej Mensfeld.
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
13
5
|
|
14
6
|
module Karafka
|
15
7
|
module Web
|
@@ -19,11 +11,38 @@ module Karafka
|
|
19
11
|
module Commands
|
20
12
|
# Base for all the commands
|
21
13
|
class Base
|
14
|
+
class << self
|
15
|
+
attr_accessor :name
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [Hash]
|
19
|
+
attr_reader :command
|
20
|
+
|
21
|
+
# @param command [Command] command details (if any). Some commands may require extra
|
22
|
+
# details to work. They can be obtained from here.
|
23
|
+
def initialize(command)
|
24
|
+
@command = command
|
25
|
+
end
|
26
|
+
|
27
|
+
# Executes the command after receiving it.
|
28
|
+
def call
|
29
|
+
raise NotImlementedError, 'Please implement in a subclass'
|
30
|
+
end
|
31
|
+
|
22
32
|
private
|
23
33
|
|
24
|
-
#
|
25
|
-
|
26
|
-
|
34
|
+
# Dispatches the acceptance message back to Kafka as a confirmation
|
35
|
+
#
|
36
|
+
# @param params [Hash] hash with the acceptance message details
|
37
|
+
def acceptance(params)
|
38
|
+
Dispatcher.acceptance(self.class.name, process_id, params)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Dispatches the result message back to Kafka with execution details
|
42
|
+
#
|
43
|
+
# @param params [Hash] hash with the result message details
|
44
|
+
def result(params)
|
45
|
+
Dispatcher.result(self.class.name, process_id, params)
|
27
46
|
end
|
28
47
|
|
29
48
|
# @return [Boolean] Is given process to which a command was sent operating in an
|
@@ -33,6 +52,11 @@ module Karafka
|
|
33
52
|
def standalone?
|
34
53
|
Karafka::Server.execution_mode == :standalone
|
35
54
|
end
|
55
|
+
|
56
|
+
# @return [String] id of the current consumer process
|
57
|
+
def process_id
|
58
|
+
::Karafka::Web.config.tracking.consumers.sampler.process_id
|
59
|
+
end
|
36
60
|
end
|
37
61
|
end
|
38
62
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
5
|
+
|
6
|
+
module Karafka
|
7
|
+
module Web
|
8
|
+
module Pro
|
9
|
+
module Commanding
|
10
|
+
# Namespace for commands the process can react to
|
11
|
+
module Commands
|
12
|
+
# Namespace for commands related to consumers themselves
|
13
|
+
module Consumers
|
14
|
+
# Sends a signal to quiet the consumer
|
15
|
+
# @note Does not work in an embedded mode because we do not own the Ruby process.
|
16
|
+
class Quiet < Base
|
17
|
+
self.name = 'consumers.quiet'
|
18
|
+
|
19
|
+
# Performs the command if not in embedded mode
|
20
|
+
def call
|
21
|
+
return unless standalone?
|
22
|
+
|
23
|
+
::Process.kill('TSTP', ::Process.pid)
|
24
|
+
|
25
|
+
result(status: 'applied')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
5
|
+
|
6
|
+
module Karafka
|
7
|
+
module Web
|
8
|
+
module Pro
|
9
|
+
module Commanding
|
10
|
+
# Namespace for commands the process can react to
|
11
|
+
module Commands
|
12
|
+
module Consumers
|
13
|
+
# Sends a signal to stop the process
|
14
|
+
# @note Does not work in an embedded mode because we do not own the Ruby process.
|
15
|
+
class Stop < Base
|
16
|
+
self.name = 'consumers.stop'
|
17
|
+
|
18
|
+
# Performs the command if not in embedded mode
|
19
|
+
def call
|
20
|
+
return unless standalone?
|
21
|
+
|
22
|
+
::Process.kill('QUIT', ::Process.pid)
|
23
|
+
|
24
|
+
result(status: 'applied')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
5
|
+
|
6
|
+
module Karafka
|
7
|
+
module Web
|
8
|
+
module Pro
|
9
|
+
module Commanding
|
10
|
+
# Namespace for commands the process can react to
|
11
|
+
module Commands
|
12
|
+
module Consumers
|
13
|
+
# Collects all backtraces from the available Ruby threads and publishes their details
|
14
|
+
# back to Kafka for debug.
|
15
|
+
class Trace < Base
|
16
|
+
self.name = 'consumers.trace'
|
17
|
+
|
18
|
+
# Runs tracing and publishes result back to Kafka
|
19
|
+
def call
|
20
|
+
threads = {}
|
21
|
+
|
22
|
+
Thread.list.each do |thread|
|
23
|
+
tid = (thread.object_id ^ ::Process.pid).to_s(36)
|
24
|
+
t_d = threads[tid] = {}
|
25
|
+
t_d[:label] = "Thread TID-#{tid} #{thread.name}"
|
26
|
+
t_d[:backtrace] = (thread.backtrace || ['<no backtrace available>']).join("\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
result(threads)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This code is part of Karafka Pro, a commercial component not licensed under LGPL.
|
4
|
+
# See LICENSE for details.
|
5
|
+
|
6
|
+
module Karafka
|
7
|
+
module Web
|
8
|
+
module Pro
|
9
|
+
module Commanding
|
10
|
+
module Commands
|
11
|
+
# Namespace for post-fetch command execution
|
12
|
+
module Partitions
|
13
|
+
# Delegates the pause request into the partition changes tracker and dispatches the
|
14
|
+
# acceptance message back to Kafka
|
15
|
+
class Pause < Base
|
16
|
+
self.name = 'partitions.pause'
|
17
|
+
|
18
|
+
# Delegates the pause request to async handling
|
19
|
+
def call
|
20
|
+
Handlers::Partitions::Tracker.instance << command
|
21
|
+
|
22
|
+
acceptance(command.to_h)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|