karafka-web 0.10.3 → 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 +64 -176
- data/Gemfile +4 -0
- data/Gemfile.lock +88 -44
- 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 +3 -5
- data/lib/karafka/web/config.rb +86 -10
- data/lib/karafka/web/contracts/config.rb +45 -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 +32 -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/errors.rb +38 -9
- 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 +2 -9
- 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 +15 -6
- 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/btn_toggle_manager.js +17 -7
- 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 +5123 -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 +9 -1
- data/package-lock.json +799 -1226
- 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 +233 -109
- 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,21 +1,25 @@
|
|
1
|
-
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
2
3
|
|
3
|
-
|
4
|
+
<% view_title "#{@topic.topic_name} Data Distribution" %>
|
5
|
+
|
6
|
+
<%== partial 'topics/topics/tabs' %>
|
7
|
+
<%== partial 'topics/distributions/add_partitions_button' %>
|
4
8
|
|
5
9
|
<% if @limited %>
|
6
|
-
<%== partial 'topics/
|
10
|
+
<%== partial 'topics/distributions/limited' %>
|
7
11
|
<% end %>
|
8
12
|
|
9
13
|
<% if @aggregated.sum.zero? %>
|
10
|
-
<%== partial 'topics/
|
14
|
+
<%== partial 'topics/distributions/empty_partitions' %>
|
11
15
|
<% else %>
|
12
16
|
<div class="col-span-12 mb-3">
|
13
17
|
<% if @active_partitions.size >= 2 %>
|
14
|
-
<%== partial 'topics/
|
18
|
+
<%== partial 'topics/distributions/chart' %>
|
15
19
|
<% end %>
|
16
20
|
|
17
21
|
<div id="refreshable" class="mt-4">
|
18
|
-
<%== partial 'topics/
|
22
|
+
<%== partial 'topics/distributions/badges' %>
|
19
23
|
|
20
24
|
<div class="data-table-wrapper">
|
21
25
|
<table class="data-table">
|
@@ -31,7 +35,7 @@
|
|
31
35
|
<%==
|
32
36
|
each_partial(
|
33
37
|
@distribution,
|
34
|
-
'topics/
|
38
|
+
'topics/distributions/partition'
|
35
39
|
)
|
36
40
|
%>
|
37
41
|
</tbody>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<li>
|
5
|
+
<a href="<%= topics_path %>">
|
6
|
+
Topics
|
7
|
+
</a>
|
8
|
+
</li>
|
9
|
+
|
10
|
+
<li>
|
11
|
+
<a href="<%= topics_path(@topic.topic_name, 'config') %>">
|
12
|
+
<%= @topic.topic_name %>
|
13
|
+
</a>
|
14
|
+
</li>
|
15
|
+
|
16
|
+
<li>
|
17
|
+
<a href="<%= topics_path(@topic.topic_name, 'offsets') %>">
|
18
|
+
Offsets
|
19
|
+
</a>
|
20
|
+
</li>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<tr>
|
5
|
+
<td>
|
6
|
+
<a href="<%= explorer_topics_path(@topic[:topic_name], partition[:partition_id]) %>">
|
7
|
+
<%= partition[:partition_id] %>
|
8
|
+
</a>
|
9
|
+
</td>
|
10
|
+
<td><%= partition[:low] %></td>
|
11
|
+
<td><%= partition[:high] %></td>
|
12
|
+
<td><%= partition[:diff] %></td>
|
13
|
+
</tr>
|
@@ -1,6 +1,9 @@
|
|
1
|
-
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
2
3
|
|
3
|
-
|
4
|
+
<% view_title "#{@topic.topic_name} Offsets" %>
|
5
|
+
|
6
|
+
<%== partial 'topics/topics/tabs' %>
|
4
7
|
|
5
8
|
<div class="data-table-wrapper">
|
6
9
|
<table class="data-table">
|
@@ -16,7 +19,7 @@
|
|
16
19
|
<%==
|
17
20
|
each_partial(
|
18
21
|
@offsets,
|
19
|
-
'topics/
|
22
|
+
'topics/offsets/partition'
|
20
23
|
)
|
21
24
|
%>
|
22
25
|
</tbody>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<li>
|
5
|
+
<a href="<%= topics_path %>">
|
6
|
+
Topics
|
7
|
+
</a>
|
8
|
+
</li>
|
9
|
+
|
10
|
+
<li>
|
11
|
+
<a href="<%= topics_path(@topic.topic_name, 'config') %>">
|
12
|
+
<%= @topic.topic_name %>
|
13
|
+
</a>
|
14
|
+
</li>
|
15
|
+
|
16
|
+
<li>
|
17
|
+
<a href="<%= topics_path(@topic.topic_name, 'replication') %>">
|
18
|
+
Replication
|
19
|
+
</a>
|
20
|
+
</li>
|
@@ -1,6 +1,9 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
1
4
|
<tr>
|
2
5
|
<td>
|
3
|
-
<a href="<%=
|
6
|
+
<a href="<%= explorer_topics_path(@topic[:topic_name], partition[:partition_id]) %>">
|
4
7
|
<%= partition[:partition_id] %>
|
5
8
|
</a>
|
6
9
|
</td>
|
@@ -1,6 +1,9 @@
|
|
1
|
-
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
2
3
|
|
3
|
-
|
4
|
+
<% view_title "#{@topic.topic_name} Replication" %>
|
5
|
+
|
6
|
+
<%== partial 'topics/topics/tabs' %>
|
4
7
|
|
5
8
|
<div class="data-table-wrapper">
|
6
9
|
<table class="data-table">
|
@@ -16,7 +19,7 @@
|
|
16
19
|
<%==
|
17
20
|
each_partial(
|
18
21
|
@partitions,
|
19
|
-
'topics/partition'
|
22
|
+
'topics/replications/partition'
|
20
23
|
)
|
21
24
|
%>
|
22
25
|
</tbody>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<li>
|
5
|
+
<a href="<%= topics_path %>">
|
6
|
+
Topics
|
7
|
+
</a>
|
8
|
+
</li>
|
9
|
+
|
10
|
+
<% if action?(:new, :create) %>
|
11
|
+
<li>
|
12
|
+
<a href="<%= topics_path('new') %>">
|
13
|
+
Creating New Topic
|
14
|
+
</a>
|
15
|
+
</li>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<% if @topic %>
|
19
|
+
<li>
|
20
|
+
<a href="<%= topics_path(@topic.topic_name, 'config') %>">
|
21
|
+
<%= @topic.topic_name %>
|
22
|
+
</a>
|
23
|
+
</li>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<% if action?(:edit) %>
|
27
|
+
<li>
|
28
|
+
<a href="<%= topics_path(@topic.topic_name, 'delete') %>">
|
29
|
+
Removal Confirmation
|
30
|
+
</a>
|
31
|
+
</li>
|
32
|
+
<% end %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<div class="col-span-12 flex justify-end space-x-2 mb-6">
|
5
|
+
<a
|
6
|
+
class="btn btn-primary btn-sm <%= 'btn-disabled' unless features.topics_management? %>"
|
7
|
+
href="<%= topics_path('new') %>"
|
8
|
+
title="Create new topic"
|
9
|
+
>
|
10
|
+
<%== icon(:plus) %>
|
11
|
+
Create Topic
|
12
|
+
</a>
|
13
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<% alert_box_info('Topic Creation Settings') do %>
|
5
|
+
<p>
|
6
|
+
You are about to create a new Kafka topic. Please note:
|
7
|
+
</p>
|
8
|
+
<ul class="list-disc ml-6 mt-2">
|
9
|
+
<li>Topic name cannot be changed after creation</li>
|
10
|
+
<li>Number of partitions can only be increased, never decreased</li>
|
11
|
+
<li>Additional settings can be configured from the topic configuration page</li>
|
12
|
+
<li>It may take Kafka up to few minutes to fully synchronize the new topic</li>
|
13
|
+
<li>Consumers may require additional time to discover the topic, depending on their metadata refresh frequency</li>
|
14
|
+
</ul>
|
15
|
+
<% end %>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<div class="card bg-base-100">
|
5
|
+
<div class="card-body">
|
6
|
+
<div class="alert alert-error">
|
7
|
+
<div class="flex items-center gap-4">
|
8
|
+
<%== icon(:trash) %>
|
9
|
+
<span>
|
10
|
+
You are about to delete topic:
|
11
|
+
<span class="font-bold ml-1"><%= @topic.topic_name %></span>
|
12
|
+
with
|
13
|
+
<span class="font-bold ml-1"><%= @topic.partition_count %></span>
|
14
|
+
partitions
|
15
|
+
</span>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<% path = topics_path(@topic.topic_name) %>
|
20
|
+
<form action="<%= path %>" method="post" class="mt-6" data-turbo="false">
|
21
|
+
<%== csrf_tag(path, 'DELETE') %>
|
22
|
+
<input type="hidden" name="_method" value="delete">
|
23
|
+
|
24
|
+
<div class="flex justify-end gap-4">
|
25
|
+
<a href="<%= topics_path(@topic.topic_name, 'config') %>" class="btn btn-ghost">
|
26
|
+
Cancel
|
27
|
+
</a>
|
28
|
+
|
29
|
+
<button type="submit" class="btn btn-error gap-2 btn-lockable confirm-action">
|
30
|
+
<%== icon(:trash) %>
|
31
|
+
Delete Topic
|
32
|
+
</button>
|
33
|
+
</div>
|
34
|
+
</form>
|
35
|
+
</div>
|
36
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<div class="alert">
|
5
|
+
<div class="space-y-2">
|
6
|
+
<p>Before proceeding, ensure that:</p>
|
7
|
+
|
8
|
+
<ul class="list-disc ml-6">
|
9
|
+
<li>All applications consuming from this topic have been properly shut down</li>
|
10
|
+
<li>All producers to this topic have been stopped</li>
|
11
|
+
<li>You have backed up any critical data if needed</li>
|
12
|
+
<li>You have notified relevant team members about this deletion</li>
|
13
|
+
</ul>
|
14
|
+
</div>
|
15
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<% alert_box_warning('Topic Removal Warning') do %>
|
5
|
+
<div class="space-y-4">
|
6
|
+
<ul class="list-disc ml-6">
|
7
|
+
<li>All data in this topic will be permanently deleted and cannot be recovered</li>
|
8
|
+
<li>All consumers and producers for this topic will stop functioning</li>
|
9
|
+
<li>Applications dependent on this topic may experience errors or disruptions</li>
|
10
|
+
<li>Consumer group offsets associated with this topic will be lost</li>
|
11
|
+
</ul>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
@@ -0,0 +1,80 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<div class="card bg-base-100 mt-4">
|
5
|
+
<div class="card-body border-error">
|
6
|
+
<form class="space-y-4 w-full" method="post" action="<%= topics_path %>" data-turbo="false">
|
7
|
+
<%== csrf_tag(topics_path) %>
|
8
|
+
|
9
|
+
<div class="flex items-center w-full mb-8">
|
10
|
+
<label class="w-1/4 text-gray-700">Topic Name:</label>
|
11
|
+
<div class="w-3/4">
|
12
|
+
<input
|
13
|
+
type="text"
|
14
|
+
name="topic_name"
|
15
|
+
class="block input input-bordered w-full"
|
16
|
+
placeholder="Enter topic name"
|
17
|
+
pattern="[A-Za-z0-9\-_.]+"
|
18
|
+
minlength="1"
|
19
|
+
maxlength="249"
|
20
|
+
value="<%= params.fetch(:topic_name, '') %>"
|
21
|
+
required
|
22
|
+
/>
|
23
|
+
<div class="text-sm text-gray-500 mt-1">
|
24
|
+
Only alphanumeric characters, dots, underscores, and hyphens are allowed
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class="flex items-center w-full mb-8">
|
30
|
+
<label class="w-1/4 text-gray-700">Number of Partitions:</label>
|
31
|
+
<div class="w-3/4">
|
32
|
+
<input
|
33
|
+
type="number"
|
34
|
+
min="1"
|
35
|
+
max="10000"
|
36
|
+
name="partitions_count"
|
37
|
+
class="block input input-bordered w-full"
|
38
|
+
placeholder="Enter number of partitions"
|
39
|
+
value="<%= params.fetch(:partitions_count, 5) %>"
|
40
|
+
required
|
41
|
+
/>
|
42
|
+
<div class="text-sm text-gray-500 mt-1">
|
43
|
+
Minimum 1 partition, cannot be decreased after creation
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<div class="flex items-center w-full">
|
49
|
+
<label class="w-1/4 text-gray-700">Replication Factor:</label>
|
50
|
+
<div class="w-3/4">
|
51
|
+
<input
|
52
|
+
type="number"
|
53
|
+
min="1"
|
54
|
+
max="100"
|
55
|
+
name="replication_factor"
|
56
|
+
class="block input input-bordered w-full"
|
57
|
+
placeholder="Enter replication factor"
|
58
|
+
value="<%= params.fetch(:replication_factor, 1) %>"
|
59
|
+
required
|
60
|
+
/>
|
61
|
+
<div class="text-sm text-gray-500 mt-1">
|
62
|
+
Number of replicas for each partition (minimum 1, recommended 3 for production)
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
|
67
|
+
<div class="fieldset text-center mt-6">
|
68
|
+
<div class="flex gap-4 justify-end">
|
69
|
+
<a href="<%= topics_path %>" class="btn btn-ghost">
|
70
|
+
Cancel
|
71
|
+
</a>
|
72
|
+
<button type="submit" class="btn btn-primary gap-2 btn-lockable">
|
73
|
+
<%== icon(:plus) %>
|
74
|
+
Create Topic
|
75
|
+
</button>
|
76
|
+
</div>
|
77
|
+
</div>
|
78
|
+
</form>
|
79
|
+
</div>
|
80
|
+
</div>
|
@@ -1,28 +1,31 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
1
4
|
<div class="tab-container-wrapper">
|
2
5
|
<div class="tab-container">
|
3
6
|
<a
|
4
|
-
href="<%=
|
7
|
+
href="<%= topics_path(@topic.topic_name, 'config') %>"
|
5
8
|
class="custom-tab <%= nav_class(end_with: 'config') %>"
|
6
9
|
>
|
7
10
|
Configuration
|
8
11
|
</a>
|
9
12
|
|
10
13
|
<a
|
11
|
-
href="<%=
|
14
|
+
href="<%= topics_path(@topic.topic_name, 'replication') %>"
|
12
15
|
class="custom-tab <%= nav_class(end_with: 'replication') %>"
|
13
16
|
>
|
14
17
|
Replication
|
15
18
|
</a>
|
16
19
|
|
17
20
|
<a
|
18
|
-
href="<%=
|
21
|
+
href="<%= topics_path(@topic.topic_name, 'distribution') %>"
|
19
22
|
class="custom-tab <%= nav_class(end_with: 'distribution') %>"
|
20
23
|
>
|
21
24
|
Distribution
|
22
25
|
</a>
|
23
26
|
|
24
27
|
<a
|
25
|
-
href="<%=
|
28
|
+
href="<%= topics_path(@topic.topic_name, 'offsets') %>"
|
26
29
|
class="custom-tab <%= nav_class(end_with: 'offsets') %>"
|
27
30
|
>
|
28
31
|
Offsets
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<div class="topic-tile">
|
5
|
+
<div class="topic-tile-body">
|
6
|
+
<p class="topic-tile-text">
|
7
|
+
<a href="<%= topics_path(topic.topic_name, 'config') %>" class="topic-tile-link">
|
8
|
+
<%= topic.topic_name %> / <%= topic.partition_count %>
|
9
|
+
</a>
|
10
|
+
</p>
|
11
|
+
</div>
|
12
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<% view_title "Topic #{@topic.topic_name} Removal Confirmation" %>
|
5
|
+
|
6
|
+
<div class="space-y-4">
|
7
|
+
<%== partial 'topics/topics/delete_warning' %>
|
8
|
+
<%== partial 'topics/topics/delete_hints' %>
|
9
|
+
<%== partial 'topics/topics/delete_form' %>
|
10
|
+
</div>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<% view_title 'Topics' %>
|
5
|
+
|
6
|
+
<%== partial 'topics/topics/create_button' %>
|
7
|
+
|
8
|
+
<% if @topics.empty? %>
|
9
|
+
<%== partial 'explorer/explorer/no_topics' %>
|
10
|
+
<% else %>
|
11
|
+
<div class="topic-tiles">
|
12
|
+
<%==
|
13
|
+
each_partial(
|
14
|
+
@topics,
|
15
|
+
'topics/topics/topic'
|
16
|
+
)
|
17
|
+
%>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
|
2
|
+
<%# See LICENSE for details. %>
|
3
|
+
|
4
|
+
<% view_title "Creating New Topic" %>
|
5
|
+
|
6
|
+
<% if @form_error %>
|
7
|
+
<%== partial 'shared/rdkafka_form_error_alert_box' %>
|
8
|
+
<% else %>
|
9
|
+
<%== partial 'topics/topics/create_hints' %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%== partial 'topics/topics/new_form' %>
|
@@ -12,7 +12,7 @@ module Karafka
|
|
12
12
|
# @return [Hash] latest (current) aggregated metrics state
|
13
13
|
def current!
|
14
14
|
metrics_message = ::Karafka::Admin.read_topic(
|
15
|
-
Karafka::Web.config.topics.consumers.metrics,
|
15
|
+
Karafka::Web.config.topics.consumers.metrics.name,
|
16
16
|
0,
|
17
17
|
# We need to take more in case there would be transactions running.
|
18
18
|
# In theory we could take two but this compensates for any involuntary
|
@@ -12,7 +12,7 @@ module Karafka
|
|
12
12
|
# @return [Hash] last (current) aggregated processes state
|
13
13
|
def current!
|
14
14
|
state_message = ::Karafka::Admin.read_topic(
|
15
|
-
Karafka::Web.config.topics.consumers.states,
|
15
|
+
Karafka::Web.config.topics.consumers.states.name,
|
16
16
|
0,
|
17
17
|
# We need to take more in case there would be transactions running.
|
18
18
|
# In theory we could take two but this compensates for any involuntary
|
@@ -36,17 +36,17 @@ module Karafka
|
|
36
36
|
def prepare_data(consumers_state, consumers_metrics)
|
37
37
|
[
|
38
38
|
{
|
39
|
-
topic: Karafka::Web.config.topics.consumers.states,
|
39
|
+
topic: Karafka::Web.config.topics.consumers.states.name,
|
40
40
|
payload: Zlib::Deflate.deflate(consumers_state.to_json),
|
41
41
|
# This will ensure that the consumer states are compacted
|
42
|
-
key: Karafka::Web.config.topics.consumers.states,
|
42
|
+
key: Karafka::Web.config.topics.consumers.states.name,
|
43
43
|
partition: 0,
|
44
44
|
headers: { 'zlib' => 'true' }
|
45
45
|
},
|
46
46
|
{
|
47
|
-
topic: Karafka::Web.config.topics.consumers.metrics,
|
47
|
+
topic: Karafka::Web.config.topics.consumers.metrics.name,
|
48
48
|
payload: Zlib::Deflate.deflate(consumers_metrics.to_json),
|
49
|
-
key: Karafka::Web.config.topics.consumers.metrics,
|
49
|
+
key: Karafka::Web.config.topics.consumers.metrics.name,
|
50
50
|
partition: 0,
|
51
51
|
headers: { 'zlib' => 'true' }
|
52
52
|
}
|
@@ -28,6 +28,7 @@ module Karafka
|
|
28
28
|
required(:ls_offset) { |val| val.is_a?(Integer) }
|
29
29
|
required(:ls_offset_d) { |val| val.is_a?(Integer) }
|
30
30
|
required(:ls_offset_fd) { |val| val.is_a?(Integer) && val >= 0 }
|
31
|
+
required(:transactional) { |val| [true, false].include?(val) }
|
31
32
|
end
|
32
33
|
end
|
33
34
|
end
|
@@ -18,17 +18,24 @@ module Karafka
|
|
18
18
|
#
|
19
19
|
# @param event [Karafka::Core::Monitoring::Event]
|
20
20
|
def on_error_occurred(event)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
caller_ref = event[:caller]
|
22
|
+
|
23
|
+
# Collect extra info if it was a consumer related error.
|
24
|
+
# Those come from user code
|
25
|
+
details = case caller_ref
|
26
|
+
when Karafka::BaseConsumer
|
27
|
+
extract_consumer_info(caller_ref)
|
28
|
+
when Karafka::Connection::Client
|
29
|
+
extract_client_info(caller_ref)
|
30
|
+
when Karafka::Connection::Listener
|
31
|
+
extract_listener_info(caller_ref)
|
32
|
+
else
|
33
|
+
{}
|
34
|
+
end
|
29
35
|
|
30
|
-
|
36
|
+
error_class, error_message, backtrace = extract_error_info(event[:error])
|
31
37
|
|
38
|
+
track do |sampler|
|
32
39
|
sampler.errors << {
|
33
40
|
schema_version: SCHEMA_VERSION,
|
34
41
|
type: event[:type],
|
@@ -70,6 +77,7 @@ module Karafka
|
|
70
77
|
{
|
71
78
|
topic: consumer.topic.name,
|
72
79
|
consumer_group: consumer.topic.consumer_group.id,
|
80
|
+
subscription_group: consumer.topic.subscription_group.id,
|
73
81
|
partition: consumer.partition,
|
74
82
|
first_offset: consumer.messages.metadata.first_offset,
|
75
83
|
last_offset: consumer.messages.metadata.last_offset,
|
@@ -80,6 +88,27 @@ module Karafka
|
|
80
88
|
tags: consumer.tags
|
81
89
|
}
|
82
90
|
end
|
91
|
+
|
92
|
+
# @param client [::Karafka::Connection::Client]
|
93
|
+
# @return [Hash] hash with client specific info for details of error
|
94
|
+
def extract_client_info(client)
|
95
|
+
{
|
96
|
+
consumer_group: client.subscription_group.consumer_group.id,
|
97
|
+
subscription_group: client.subscription_group.id,
|
98
|
+
name: client.name,
|
99
|
+
id: client.id
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
# @param listener [::Karafka::Connection::Listener]
|
104
|
+
# @return [Hash] hash with listener specific info for details of error
|
105
|
+
def extract_listener_info(listener)
|
106
|
+
{
|
107
|
+
consumer_group: listener.subscription_group.consumer_group.id,
|
108
|
+
subscription_group: listener.subscription_group.id,
|
109
|
+
id: listener.id
|
110
|
+
}
|
111
|
+
end
|
83
112
|
end
|
84
113
|
end
|
85
114
|
end
|
@@ -8,10 +8,10 @@ module Karafka
|
|
8
8
|
# Tracks pausing and un-pausing of topics partitions for both user requested and
|
9
9
|
# automatic events.
|
10
10
|
class Pausing < Base
|
11
|
-
#
|
11
|
+
# Tracks the pause start
|
12
12
|
#
|
13
13
|
# @param event [Karafka::Core::Monitoring::Event]
|
14
|
-
def
|
14
|
+
def on_client_pause(event)
|
15
15
|
track do |sampler|
|
16
16
|
sampler.pauses[pause_id(event)] = {
|
17
17
|
timeout: event[:timeout],
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Karafka
|
4
|
+
module Web
|
5
|
+
module Tracking
|
6
|
+
module Consumers
|
7
|
+
module Listeners
|
8
|
+
# Tracks data related to transactions
|
9
|
+
# seek offsets are needed because when consumer offsets are committed in transactions,
|
10
|
+
# librdkafka does not publish the lags in a regular way (they are set to -1) and we need
|
11
|
+
# to compute them via enrichment of information.
|
12
|
+
class Transactions < Base
|
13
|
+
# Tracking of things needed to support transactional consumers post successful
|
14
|
+
# transaction.
|
15
|
+
#
|
16
|
+
# @param event [Karafka::Core::Monitoring::Event]
|
17
|
+
def on_consumer_consuming_transaction(event)
|
18
|
+
consumer = event[:caller]
|
19
|
+
sg_id = consumer.topic.subscription_group.id
|
20
|
+
topic_name = consumer.topic.name
|
21
|
+
# We store it as a string because librdkafka also does that and its easier to align
|
22
|
+
# without casting it later
|
23
|
+
partition_id = consumer.partition
|
24
|
+
|
25
|
+
track do |sampler|
|
26
|
+
break unless sampler.subscription_groups.key?(sg_id)
|
27
|
+
|
28
|
+
seek_offset = consumer.coordinator.seek_offset
|
29
|
+
|
30
|
+
break if seek_offset.nil?
|
31
|
+
|
32
|
+
topics_scope = sampler.subscription_groups[sg_id][:topics]
|
33
|
+
p_scope = topics_scope[topic_name][partition_id]
|
34
|
+
|
35
|
+
p_scope[:transactional] = true
|
36
|
+
p_scope[:seek_offset] = seek_offset
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|