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
@@ -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
|
@@ -70,26 +62,46 @@ module Karafka
|
|
70
62
|
@listener.each do |message|
|
71
63
|
next unless @matcher.matches?(message)
|
72
64
|
|
73
|
-
control(
|
65
|
+
control(
|
66
|
+
Request.new(message.payload[:command])
|
67
|
+
)
|
74
68
|
end
|
69
|
+
# This should not happen, if this is happening, please report this as a bug
|
70
|
+
rescue StandardError => e
|
71
|
+
::Karafka.monitor.instrument(
|
72
|
+
'error.occurred',
|
73
|
+
error: e,
|
74
|
+
caller: self,
|
75
|
+
type: 'web.commanding.manager.error'
|
76
|
+
)
|
77
|
+
|
78
|
+
raise e
|
75
79
|
end
|
76
80
|
|
77
81
|
# Runs the expected command
|
78
82
|
#
|
79
|
-
# @param command [
|
83
|
+
# @param command [Request] command request
|
80
84
|
def control(command)
|
81
|
-
case command
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
85
|
+
action = case command.name
|
86
|
+
when Commands::Consumers::Trace.name
|
87
|
+
Commands::Consumers::Trace
|
88
|
+
when Commands::Consumers::Stop.name
|
89
|
+
Commands::Consumers::Stop
|
90
|
+
when Commands::Consumers::Quiet.name
|
91
|
+
Commands::Consumers::Quiet
|
92
|
+
when Commands::Partitions::Seek.name
|
93
|
+
Commands::Partitions::Seek
|
94
|
+
when Commands::Partitions::Resume.name
|
95
|
+
Commands::Partitions::Resume
|
96
|
+
when Commands::Partitions::Pause.name
|
97
|
+
Commands::Partitions::Pause
|
98
|
+
else
|
99
|
+
# We raise it and will be rescued, reported and ignored. We raise it as
|
100
|
+
# this should not happen unless there are version conflicts
|
101
|
+
raise ::Karafka::Errors::UnsupportedCaseError, command.name
|
102
|
+
end
|
103
|
+
|
104
|
+
action.new(command).call
|
93
105
|
end
|
94
106
|
end
|
95
107
|
end
|
@@ -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
|
@@ -24,17 +16,15 @@ module Karafka
|
|
24
16
|
# @param message [Karafka::Messages::Message] message with command
|
25
17
|
# @return [Boolean] is this message dedicated to current process and is actionable
|
26
18
|
def matches?(message)
|
27
|
-
|
28
|
-
|
19
|
+
# We operate only on commands. Result and other messages should be ignored
|
20
|
+
return false unless message.headers['type'] == 'request'
|
29
21
|
# We want to work only with commands that target all processes or our current
|
30
|
-
|
31
|
-
# We operate only on commands. Result messages should be ignored
|
32
|
-
matches = false unless message.payload[:type] == 'command'
|
22
|
+
return false unless message.key == '*' || message.key == process_id
|
33
23
|
# Ignore messages that have different schema. This can happen in the middle of
|
34
24
|
# upgrades of the framework. We ignore this not to risk compatibility issues
|
35
|
-
|
25
|
+
return false unless message.payload[:schema_version] == Dispatcher::SCHEMA_VERSION
|
36
26
|
|
37
|
-
|
27
|
+
true
|
38
28
|
end
|
39
29
|
|
40
30
|
private
|
@@ -0,0 +1,39 @@
|
|
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
|
+
# Encapsulates the command request details not to use a raw hash
|
11
|
+
class Request
|
12
|
+
# @param details [Hash] raw request details
|
13
|
+
def initialize(details)
|
14
|
+
@details = details
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [String] name of the request
|
18
|
+
def name
|
19
|
+
self[:name]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Fetches the underlying details value and raises key error when not available
|
23
|
+
#
|
24
|
+
# @param key [Symbol]
|
25
|
+
# @return [Object]
|
26
|
+
# @raise [KeyError]
|
27
|
+
def [](key)
|
28
|
+
@details.fetch(key)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Hash] raw details
|
32
|
+
def to_h
|
33
|
+
@details
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -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
|
@@ -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
|
@@ -50,6 +42,13 @@ module Karafka
|
|
50
42
|
setting(:branding, default: Ui::Lib::Branding::Config.config)
|
51
43
|
setting(:policies, default: Ui::Lib::Policies::Config.config)
|
52
44
|
setting(:search, default: Ui::Lib::Search::Config.config)
|
45
|
+
|
46
|
+
setting :topics do
|
47
|
+
setting :management do
|
48
|
+
# Should we allow users to manage topics (edit config, resize, etc) from the UI
|
49
|
+
setting(:active, default: true)
|
50
|
+
end
|
51
|
+
end
|
53
52
|
end
|
54
53
|
end
|
55
54
|
|
@@ -61,6 +60,10 @@ module Karafka
|
|
61
60
|
Ui::Lib::Branding.post_setup(config)
|
62
61
|
Ui::Lib::Policies.post_setup(config)
|
63
62
|
Ui::Lib::Search.post_setup(config)
|
63
|
+
|
64
|
+
config.commanding.listeners.each do |listener|
|
65
|
+
::Karafka::App.monitor.subscribe(listener)
|
66
|
+
end
|
64
67
|
end
|
65
68
|
end
|
66
69
|
end
|
@@ -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
|
@@ -45,391 +37,40 @@ module Karafka
|
|
45
37
|
raise(Errors::Ui::ForbiddenError)
|
46
38
|
end
|
47
39
|
|
40
|
+
# Sub-routes for given pieces of the Web UI
|
41
|
+
SUB_ROUTES = [
|
42
|
+
# Asset handling is exactly the same in both cases
|
43
|
+
::Karafka::Web::Ui::Routes::Assets,
|
44
|
+
Routes::Dashboard,
|
45
|
+
Routes::Consumers,
|
46
|
+
Routes::Jobs,
|
47
|
+
Routes::Routing,
|
48
|
+
Routes::Explorer,
|
49
|
+
Routes::RecurringTasks,
|
50
|
+
Routes::ScheduledMessages,
|
51
|
+
Routes::Health,
|
52
|
+
Routes::Cluster,
|
53
|
+
Routes::Topics,
|
54
|
+
Routes::Errors,
|
55
|
+
Routes::Dlq,
|
56
|
+
Routes::Status,
|
57
|
+
Routes::Support,
|
58
|
+
Routes::Ux
|
59
|
+
].freeze
|
60
|
+
|
61
|
+
private_constant :SUB_ROUTES
|
62
|
+
|
48
63
|
route do |r|
|
49
64
|
r.root { r.redirect root_path('dashboard') }
|
50
65
|
|
51
|
-
|
52
|
-
# after upgrade
|
53
|
-
r.on 'assets', Karafka::Web::VERSION do
|
54
|
-
r.public
|
55
|
-
end
|
56
|
-
|
57
|
-
r.get 'dashboard' do
|
58
|
-
@breadcrumbs = false
|
59
|
-
controller = Controllers::DashboardController.new(params)
|
60
|
-
controller.index
|
61
|
-
end
|
62
|
-
|
63
|
-
r.on 'consumers' do
|
64
|
-
controller = Controllers::ConsumersController.new(params)
|
65
|
-
|
66
|
-
r.get 'overview' do
|
67
|
-
controller.index
|
68
|
-
end
|
69
|
-
|
70
|
-
r.get 'performance' do
|
71
|
-
controller.performance
|
72
|
-
end
|
73
|
-
|
74
|
-
r.get 'controls' do
|
75
|
-
controller.controls
|
76
|
-
end
|
77
|
-
|
78
|
-
r.on String, 'jobs' do |process_id|
|
79
|
-
r.get 'running' do
|
80
|
-
controller.running_jobs(process_id)
|
81
|
-
end
|
82
|
-
|
83
|
-
r.get 'pending' do
|
84
|
-
controller.pending_jobs(process_id)
|
85
|
-
end
|
86
|
-
|
87
|
-
r.redirect root_path("consumers/#{process_id}/jobs/running")
|
88
|
-
end
|
89
|
-
|
90
|
-
r.get String, 'subscriptions' do |process_id|
|
91
|
-
controller.subscriptions(process_id)
|
92
|
-
end
|
93
|
-
|
94
|
-
r.get String, 'details' do |process_id|
|
95
|
-
controller.details(process_id)
|
96
|
-
end
|
97
|
-
|
98
|
-
r.redirect root_path('consumers/overview')
|
99
|
-
end
|
100
|
-
|
101
|
-
r.on 'commands' do
|
102
|
-
controller = Controllers::CommandsController.new(params)
|
103
|
-
|
104
|
-
r.on Integer do |offset_id|
|
105
|
-
controller.show(offset_id)
|
106
|
-
end
|
107
|
-
|
108
|
-
r.get 'recent' do
|
109
|
-
controller.recent
|
110
|
-
end
|
111
|
-
|
112
|
-
r.get do
|
113
|
-
controller.index
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
r.on 'commanding' do
|
118
|
-
controller = Controllers::CommandingController.new(params)
|
119
|
-
|
120
|
-
r.post 'quiet_all' do
|
121
|
-
controller.quiet_all
|
122
|
-
end
|
123
|
-
|
124
|
-
r.post 'stop_all' do
|
125
|
-
controller.stop_all
|
126
|
-
end
|
127
|
-
|
128
|
-
r.on String do |process_id|
|
129
|
-
r.post 'trace' do
|
130
|
-
controller.trace(process_id)
|
131
|
-
end
|
132
|
-
|
133
|
-
r.post 'quiet' do
|
134
|
-
controller.quiet(process_id)
|
135
|
-
end
|
136
|
-
|
137
|
-
r.post 'stop' do
|
138
|
-
controller.stop(process_id)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
r.on 'jobs' do
|
144
|
-
controller = Controllers::JobsController.new(params)
|
145
|
-
|
146
|
-
r.get 'running' do
|
147
|
-
controller.running
|
148
|
-
end
|
149
|
-
|
150
|
-
r.get 'pending' do
|
151
|
-
controller.pending
|
152
|
-
end
|
153
|
-
|
154
|
-
r.redirect root_path('jobs/running')
|
155
|
-
end
|
156
|
-
|
157
|
-
r.on 'routing' do
|
158
|
-
controller = Controllers::RoutingController.new(params)
|
159
|
-
|
160
|
-
r.get String do |topic_id|
|
161
|
-
controller.show(topic_id)
|
162
|
-
end
|
163
|
-
|
164
|
-
r.get do
|
165
|
-
controller.index
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
r.on 'explorer' do
|
170
|
-
r.get String, 'search' do |topic_id|
|
171
|
-
# Search has it's own controller but we want to have this in the explorer routing
|
172
|
-
# namespace because topic search is conceptually part of the explorer
|
173
|
-
controller = Controllers::SearchController.new(params)
|
174
|
-
controller.index(topic_id)
|
175
|
-
end
|
176
|
-
|
177
|
-
controller = Controllers::ExplorerController.new(params)
|
178
|
-
|
179
|
-
r.get String, Integer, 'recent' do |topic_id, partition_id|
|
180
|
-
controller.recent(topic_id, partition_id)
|
181
|
-
end
|
182
|
-
|
183
|
-
r.get String, Integer, Integer, 'surrounding' do |topic_id, partition_id, offset|
|
184
|
-
controller.surrounding(topic_id, partition_id, offset)
|
185
|
-
end
|
186
|
-
|
187
|
-
r.get String, 'recent' do |topic_id|
|
188
|
-
controller.recent(topic_id, nil)
|
189
|
-
end
|
190
|
-
|
191
|
-
# Jumps to offset matching the expected time
|
192
|
-
r.get String, Integer, Time do |topic_id, partition_id, time|
|
193
|
-
controller.closest(topic_id, partition_id, time)
|
194
|
-
end
|
195
|
-
|
196
|
-
r.get String, Integer, Integer do |topic_id, partition_id, offset|
|
197
|
-
# If when viewing given message we get an offset of different message, we should
|
198
|
-
# redirect there. This allows us to support pagination with the current engine
|
199
|
-
if params.current_offset != -1
|
200
|
-
r.redirect explorer_path(topic_id, partition_id, params.current_offset)
|
201
|
-
else
|
202
|
-
controller.show(topic_id, partition_id, offset)
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
r.get String, Integer do |topic_id, partition_id|
|
207
|
-
controller.partition(topic_id, partition_id)
|
208
|
-
end
|
209
|
-
|
210
|
-
r.get String do |topic_id|
|
211
|
-
controller.topic(topic_id)
|
212
|
-
end
|
213
|
-
|
214
|
-
r.get do
|
215
|
-
controller.index
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
r.on 'messages' do
|
220
|
-
controller = Controllers::MessagesController.new(params)
|
221
|
-
|
222
|
-
r.post String, Integer, Integer, 'republish' do |topic_id, partition_id, offset|
|
223
|
-
controller.republish(topic_id, partition_id, offset)
|
224
|
-
end
|
225
|
-
|
226
|
-
r.get String, Integer, Integer, 'download' do |topic_id, partition_id, offset|
|
227
|
-
controller.download(topic_id, partition_id, offset)
|
228
|
-
end
|
229
|
-
|
230
|
-
r.get String, Integer, Integer, 'export' do |topic_id, partition_id, offset|
|
231
|
-
controller.export(topic_id, partition_id, offset)
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
r.on 'recurring_tasks' do
|
236
|
-
controller = Controllers::RecurringTasksController.new(params)
|
66
|
+
SUB_ROUTES.each { |sub_route| sub_route.bind(self, r) }
|
237
67
|
|
238
|
-
|
239
|
-
|
240
|
-
end
|
241
|
-
|
242
|
-
r.get 'logs' do
|
243
|
-
controller.logs
|
244
|
-
end
|
245
|
-
|
246
|
-
r.post 'trigger_all' do
|
247
|
-
controller.trigger_all
|
248
|
-
end
|
249
|
-
|
250
|
-
r.post 'enable_all' do
|
251
|
-
controller.enable_all
|
252
|
-
end
|
253
|
-
|
254
|
-
r.post 'disable_all' do
|
255
|
-
controller.disable_all
|
256
|
-
end
|
257
|
-
|
258
|
-
r.post String, 'trigger' do |task_id|
|
259
|
-
controller.trigger(task_id)
|
260
|
-
end
|
261
|
-
|
262
|
-
r.post String, 'enable' do |task_id|
|
263
|
-
controller.enable(task_id)
|
264
|
-
end
|
265
|
-
|
266
|
-
r.post String, 'disable' do |task_id|
|
267
|
-
controller.disable(task_id)
|
268
|
-
end
|
269
|
-
|
270
|
-
r.get do
|
271
|
-
r.redirect root_path('recurring_tasks/schedule')
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
r.on 'scheduled_messages' do
|
276
|
-
r.on 'schedules' do
|
277
|
-
controller = Controllers::ScheduledMessages::SchedulesController.new(params)
|
278
|
-
|
279
|
-
r.get String do |topic_id|
|
280
|
-
controller.show(topic_id)
|
281
|
-
end
|
282
|
-
|
283
|
-
r.get do
|
284
|
-
controller.index
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
r.on 'explorer' do
|
289
|
-
controller = Controllers::ScheduledMessages::ExplorerController.new(params)
|
290
|
-
|
291
|
-
r.get String do |topic_id|
|
292
|
-
controller.topic(topic_id)
|
293
|
-
end
|
294
|
-
|
295
|
-
r.get String, Integer do |topic_id, partition_id|
|
296
|
-
controller.partition(topic_id, partition_id)
|
297
|
-
end
|
298
|
-
|
299
|
-
# Jumps to offset matching the expected time
|
300
|
-
r.get String, Integer, Time do |topic_id, partition_id, time|
|
301
|
-
controller.closest(topic_id, partition_id, time)
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
r.on 'messages' do
|
306
|
-
controller = Controllers::ScheduledMessages::MessagesController.new(params)
|
307
|
-
|
308
|
-
r.post(
|
309
|
-
String, Integer, Integer, 'cancel'
|
310
|
-
) do |topic_id, partition_id, message_offset|
|
311
|
-
controller.cancel(topic_id, partition_id, message_offset)
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
r.get do
|
316
|
-
r.redirect root_path('scheduled_messages/schedules')
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
r.on 'health' do
|
321
|
-
controller = Controllers::HealthController.new(params)
|
322
|
-
|
323
|
-
r.get 'lags' do
|
324
|
-
controller.lags
|
325
|
-
end
|
326
|
-
|
327
|
-
r.get 'cluster_lags' do
|
328
|
-
controller.cluster_lags
|
329
|
-
end
|
330
|
-
|
331
|
-
r.get 'offsets' do
|
332
|
-
controller.offsets
|
333
|
-
end
|
334
|
-
|
335
|
-
r.get 'overview' do
|
336
|
-
controller.overview
|
337
|
-
end
|
338
|
-
|
339
|
-
r.get 'changes' do
|
340
|
-
controller.changes
|
341
|
-
end
|
342
|
-
|
343
|
-
r.get do
|
344
|
-
r.redirect root_path('health/overview')
|
345
|
-
end
|
346
|
-
end
|
347
|
-
|
348
|
-
r.on 'cluster' do
|
349
|
-
controller = Controllers::ClusterController.new(params)
|
350
|
-
|
351
|
-
r.get 'replication' do
|
352
|
-
# We use the non-pro controller here because this action is the same
|
353
|
-
controller = Ui::Controllers::ClusterController.new(params)
|
354
|
-
controller.replication
|
355
|
-
end
|
356
|
-
|
357
|
-
r.get String do |broker_id|
|
358
|
-
controller.show(broker_id)
|
359
|
-
end
|
360
|
-
|
361
|
-
r.get do
|
362
|
-
controller.index
|
363
|
-
end
|
364
|
-
end
|
365
|
-
|
366
|
-
r.on 'topics' do
|
367
|
-
controller = Controllers::TopicsController.new(params)
|
368
|
-
|
369
|
-
r.get String, 'config' do |topic_id|
|
370
|
-
controller.config(topic_id)
|
371
|
-
end
|
372
|
-
|
373
|
-
r.get String, 'replication' do |topic_id|
|
374
|
-
controller.replication(topic_id)
|
375
|
-
end
|
376
|
-
|
377
|
-
r.get String, 'distribution' do |topic_id|
|
378
|
-
controller.distribution(topic_id)
|
379
|
-
end
|
380
|
-
|
381
|
-
r.get String, 'offsets' do |topic_id|
|
382
|
-
controller.offsets(topic_id)
|
383
|
-
end
|
384
|
-
|
385
|
-
r.get String do |topic_id|
|
386
|
-
r.redirect root_path('topics', topic_id, 'config')
|
387
|
-
end
|
388
|
-
|
389
|
-
r.get do
|
390
|
-
controller.index
|
391
|
-
end
|
392
|
-
end
|
393
|
-
|
394
|
-
r.on 'errors' do
|
395
|
-
controller = Controllers::ErrorsController.new(params)
|
396
|
-
|
397
|
-
r.get Integer, Integer do |partition_id, offset|
|
398
|
-
if params.current_offset != -1
|
399
|
-
r.redirect root_path('errors', partition_id, params.current_offset)
|
400
|
-
else
|
401
|
-
controller.show(partition_id, offset)
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
r.get Integer do |partition_id|
|
406
|
-
controller.partition(partition_id)
|
407
|
-
end
|
408
|
-
|
409
|
-
r.get do
|
410
|
-
controller.index
|
411
|
-
end
|
412
|
-
end
|
413
|
-
|
414
|
-
r.get 'dlq' do
|
415
|
-
controller = Controllers::DlqController.new(params)
|
416
|
-
controller.index
|
417
|
-
end
|
418
|
-
|
419
|
-
r.get 'status' do
|
420
|
-
controller = Controllers::StatusController.new(params)
|
421
|
-
controller.show
|
422
|
-
end
|
423
|
-
|
424
|
-
r.get 'ux' do
|
425
|
-
controller = Controllers::UxController.new(params)
|
426
|
-
controller.show
|
427
|
-
end
|
68
|
+
nil
|
69
|
+
end
|
428
70
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
end
|
71
|
+
# @return [Karafka::Web::Pro::Ui::Lib::Features] features fetcher
|
72
|
+
def features
|
73
|
+
Lib::Features
|
433
74
|
end
|
434
75
|
end
|
435
76
|
end
|
@@ -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,6 +11,12 @@ module Karafka
|
|
19
11
|
module Controllers
|
20
12
|
# Base Pro controller
|
21
13
|
class BaseController < Web::Ui::Controllers::BaseController
|
14
|
+
private
|
15
|
+
|
16
|
+
# @return [Karafka::Web::Pro::Ui::Lib::Features] features fetcher
|
17
|
+
def features
|
18
|
+
Lib::Features
|
19
|
+
end
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|