karafka-web 0.11.5 → 0.11.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/Gemfile +9 -10
- data/Gemfile.lint +14 -0
- data/Gemfile.lint.lock +123 -0
- data/Gemfile.lock +15 -16
- data/README.md +15 -15
- data/Rakefile +2 -2
- data/bin/balance_specs +120 -0
- data/bin/check_coverage +31 -0
- data/bin/collect_timings +83 -0
- data/bin/rspecs +10 -0
- data/bin/rspecs_parallel +111 -0
- data/docker-compose.yml +1 -1
- data/karafka-web.gemspec +35 -35
- data/lib/karafka/web/cli/base.rb +2 -2
- data/lib/karafka/web/cli/help.rb +2 -2
- data/lib/karafka/web/cli/install.rb +3 -3
- data/lib/karafka/web/cli/migrate.rb +3 -3
- data/lib/karafka/web/cli/reset.rb +3 -3
- data/lib/karafka/web/cli/uninstall.rb +1 -1
- data/lib/karafka/web/config.rb +40 -32
- data/lib/karafka/web/contracts/base.rb +2 -2
- data/lib/karafka/web/deserializer.rb +5 -5
- data/lib/karafka/web/installer.rb +14 -14
- data/lib/karafka/web/management/actions/base.rb +5 -5
- data/lib/karafka/web/management/actions/clean_boot_file.rb +3 -3
- data/lib/karafka/web/management/actions/create_initial_states.rb +8 -8
- data/lib/karafka/web/management/actions/enable.rb +3 -3
- data/lib/karafka/web/management/actions/extend_boot_file.rb +3 -3
- data/lib/karafka/web/management/migrations/base.rb +3 -3
- data/lib/karafka/web/management/migrations/consumers_metrics/0_set_initial.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1699543515_fill_missing_received_and_sent_bytes.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_introduce_waiting.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_remove_processing.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1704722380_split_listeners_into_active_and_paused.rb +7 -7
- data/lib/karafka/web/management/migrations/consumers_metrics/1706607960_introduce_lag_total.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1706611396_rename_lag_total_to_lag_hybrid.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1716218393_populate_jobs_metrics.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_reports/1761645571_rename_process_name_to_id.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_reports/1765657887_add_group_instance_id_to_subscription_groups.rb +42 -0
- data/lib/karafka/web/management/migrations/consumers_states/0_set_initial.rb +2 -2
- data/lib/karafka/web/management/migrations/consumers_states/1699543515_fill_missing_received_and_sent_bytes.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1700234522_introduce_waiting.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1700234522_remove_processing.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1704722380_split_listeners_into_active_and_paused.rb +7 -7
- data/lib/karafka/web/management/migrations/consumers_states/1706607960_introduce_lag_total.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1706611396_rename_lag_total_to_lag_hybrid.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1716218393_add_jobs_counter.rb +1 -1
- data/lib/karafka/web/management/migrator.rb +2 -2
- data/lib/karafka/web/pro/commanding/commands/base.rb +20 -4
- data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +22 -5
- data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +22 -5
- data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +21 -4
- data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +20 -3
- data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +20 -3
- data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +20 -3
- data/lib/karafka/web/pro/commanding/commands/topics/pause.rb +48 -0
- data/lib/karafka/web/pro/commanding/commands/topics/resume.rb +49 -0
- data/lib/karafka/web/pro/commanding/config.rb +23 -5
- data/lib/karafka/web/pro/commanding/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/commanding/dispatcher.rb +61 -26
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +20 -3
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +21 -4
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +20 -3
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +24 -7
- data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +36 -12
- data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +47 -8
- data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +62 -13
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/base.rb +109 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/pause.rb +76 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/resume.rb +56 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/executor.rb +75 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/listener.rb +82 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/tracker.rb +81 -0
- data/lib/karafka/web/pro/commanding/listener.rb +23 -6
- data/lib/karafka/web/pro/commanding/manager.rb +44 -23
- data/lib/karafka/web/pro/commanding/matcher.rb +46 -18
- data/lib/karafka/web/pro/commanding/matchers/base.rb +87 -0
- data/lib/karafka/web/pro/commanding/matchers/consumer_group_id.rb +58 -0
- data/lib/karafka/web/pro/commanding/matchers/message_type.rb +49 -0
- data/lib/karafka/web/pro/commanding/matchers/partition_id.rb +61 -0
- data/lib/karafka/web/pro/commanding/matchers/process_id.rb +58 -0
- data/lib/karafka/web/pro/commanding/matchers/schema_version.rb +44 -0
- data/lib/karafka/web/pro/commanding/matchers/topic.rb +58 -0
- data/lib/karafka/web/pro/commanding/request.rb +19 -2
- data/lib/karafka/web/pro/commanding.rb +19 -2
- data/lib/karafka/web/pro/loader.rb +20 -3
- data/lib/karafka/web/pro/ui/app.rb +25 -8
- data/lib/karafka/web/pro/ui/controllers/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/cluster_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/commanding_controller.rb +37 -15
- data/lib/karafka/web/pro/ui/controllers/consumers/commands_controller.rb +23 -6
- data/lib/karafka/web/pro/ui/controllers/consumers/consumers_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +43 -42
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +36 -17
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +59 -33
- data/lib/karafka/web/pro/ui/controllers/consumers/topics/pauses_controller.rb +164 -0
- data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +26 -9
- data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +25 -9
- data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +22 -5
- data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +26 -9
- data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +23 -6
- data/lib/karafka/web/pro/ui/controllers/health_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +22 -5
- data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +25 -8
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +21 -4
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +26 -9
- data/lib/karafka/web/pro/ui/controllers/status_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/support_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +20 -3
- data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +20 -3
- data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +41 -2
- data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +24 -7
- data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/branding/config.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/branding.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/features.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/policies/config.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/policies/messages.rb +20 -3
- data/lib/karafka/web/pro/ui/lib/policies/requests.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/policies.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/safe_runner.rb +20 -3
- data/lib/karafka/web/pro/ui/lib/search/config.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +24 -6
- data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +20 -3
- data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +26 -9
- data/lib/karafka/web/pro/ui/lib/search/runner.rb +33 -16
- data/lib/karafka/web/pro/ui/lib/search.rb +19 -2
- data/lib/karafka/web/pro/ui/routes/base.rb +19 -2
- data/lib/karafka/web/pro/ui/routes/cluster.rb +21 -4
- data/lib/karafka/web/pro/ui/routes/consumers.rb +83 -49
- data/lib/karafka/web/pro/ui/routes/dashboard.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/dlq.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/errors.rb +21 -4
- data/lib/karafka/web/pro/ui/routes/explorer.rb +33 -16
- data/lib/karafka/web/pro/ui/routes/health.rb +26 -9
- data/lib/karafka/web/pro/ui/routes/jobs.rb +23 -6
- data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +29 -12
- data/lib/karafka/web/pro/ui/routes/routing.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +28 -11
- data/lib/karafka/web/pro/ui/routes/status.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/support.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/topics.rb +29 -12
- data/lib/karafka/web/pro/ui/routes/ux.rb +20 -3
- data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/_config.erb +14 -3
- data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_backtrace.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_command.erb +24 -66
- data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_command.erb +19 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_schema.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_table.erb +15 -4
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_acceptance.erb +19 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_request.erb +19 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_result.erb +27 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_request.erb +52 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_response.erb +46 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_command_name_badge.erb +40 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_request.erb +47 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_response.erb +46 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +14 -15
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_metrics.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition.erb +15 -5
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +16 -5
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_stopped.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_subscription_group.erb +31 -7
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/performance.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +14 -3
- data/lib/karafka/web/pro/ui/views/consumers/controls/index.erb +35 -7
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_job.erb +14 -3
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_no_jobs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/jobs/pending.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/jobs/running.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +20 -13
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +37 -46
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +25 -14
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +17 -6
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +14 -3
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +40 -48
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +18 -8
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +22 -11
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_partition_info.erb +57 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +16 -5
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +16 -5
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_adjusting_warning.erb +38 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_breadcrumbs.erb +46 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_edit_form.erb +66 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_lrj_not_manageable.erb +30 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_new_form.erb +86 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_not_running.erb +27 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_topic_info.erb +72 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/edit.erb +29 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/new.erb +29 -0
- data/lib/karafka/web/pro/ui/views/dashboard/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/errors/_error.erb +14 -3
- data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +18 -5
- data/lib/karafka/web/pro/ui/views/errors/_selector.erb +14 -3
- data/lib/karafka/web/pro/ui/views/errors/_table.erb +14 -3
- data/lib/karafka/web/pro/ui/views/errors/index.erb +39 -26
- data/lib/karafka/web/pro/ui/views/errors/partition.erb +50 -37
- data/lib/karafka/web/pro/ui/views/errors/show.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_failed_deserialization.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_filtered.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_message.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_partition_option.erb +18 -5
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_selector.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_metadata.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_payload.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_resources_utilization.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_too_big_to_be_displayed.erb +15 -4
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_detail.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_key.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_cleaned.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_empty.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_messages.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +15 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition.erb +52 -39
- data/lib/karafka/web/pro/ui/views/explorer/explorer/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_actions.erb +39 -26
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_limited.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +28 -16
- data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_metadata.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_no_search_criteria.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_search_criteria.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/search/_search_modal.erb +27 -15
- data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_no_data.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_no_partition_data.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partition.erb +22 -6
- data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partitions_with_fallback.erb +15 -2
- data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_topic_edit_options.erb +64 -0
- data/lib/karafka/web/pro/ui/views/health/changes.erb +14 -2
- data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/lags.erb +14 -2
- data/lib/karafka/web/pro/ui/views/health/offsets.erb +14 -2
- data/lib/karafka/web/pro/ui/views/health/overview.erb +29 -5
- data/lib/karafka/web/pro/ui/views/jobs/_job.erb +14 -3
- data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/jobs/pending.erb +13 -2
- data/lib/karafka/web/pro/ui/views/jobs/running.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +14 -3
- data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +14 -3
- data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +14 -3
- data/lib/karafka/web/pro/ui/views/routing/_detail.erb +13 -2
- data/lib/karafka/web/pro/ui/views/routing/_topic.erb +14 -3
- data/lib/karafka/web/pro/ui/views/routing/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/routing/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_cancel.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_compacted.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_schedule.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_tombstone.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_unknown.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +52 -39
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +14 -3
- data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +14 -3
- data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +13 -2
- data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +13 -2
- data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +14 -3
- data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +17 -6
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +21 -10
- data/lib/karafka/web/pro/ui/views/topics/configs/index.erb +14 -3
- data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_badges.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_chart.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +18 -6
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_limited.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/offsets/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/replications/_metric_box.erb +20 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_partition.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/replications/_replication_info.erb +65 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_resilience_success.erb +24 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_low_durability.erb +67 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_no_redundancy.erb +66 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_zero_fault_tolerance.erb +67 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/show.erb +15 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +25 -11
- data/lib/karafka/web/pro/ui/views/topics/topics/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +13 -2
- data/lib/karafka/web/processing/consumer.rb +1 -1
- data/lib/karafka/web/processing/consumers/aggregators/metrics.rb +11 -11
- data/lib/karafka/web/processing/consumers/aggregators/state.rb +4 -3
- data/lib/karafka/web/processing/consumers/reports_migrator.rb +2 -2
- data/lib/karafka/web/processing/consumers/schema_manager.rb +1 -1
- data/lib/karafka/web/processing/publisher.rb +2 -2
- data/lib/karafka/web/producer.rb +61 -0
- data/lib/karafka/web/tracking/consumers/contracts/report.rb +2 -2
- data/lib/karafka/web/tracking/consumers/contracts/subscription_group.rb +1 -0
- data/lib/karafka/web/tracking/consumers/listeners/booting.rb +1 -1
- data/lib/karafka/web/tracking/consumers/listeners/connections.rb +7 -2
- data/lib/karafka/web/tracking/consumers/listeners/errors.rb +10 -10
- data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +1 -1
- data/lib/karafka/web/tracking/consumers/listeners/processing.rb +25 -25
- data/lib/karafka/web/tracking/consumers/listeners/statistics.rb +35 -35
- data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
- data/lib/karafka/web/tracking/consumers/sampler/enrichers/consumer_groups.rb +1 -0
- data/lib/karafka/web/tracking/consumers/sampler/metrics/base.rb +2 -1
- data/lib/karafka/web/tracking/consumers/sampler/metrics/container.rb +15 -15
- data/lib/karafka/web/tracking/consumers/sampler/metrics/network.rb +6 -6
- data/lib/karafka/web/tracking/consumers/sampler/metrics/os.rb +41 -37
- data/lib/karafka/web/tracking/consumers/sampler.rb +7 -7
- data/lib/karafka/web/tracking/helpers/error_info.rb +10 -10
- data/lib/karafka/web/tracking/helpers/sysconf.rb +2 -2
- data/lib/karafka/web/tracking/helpers/ttls/array.rb +1 -1
- data/lib/karafka/web/tracking/helpers/ttls/hash.rb +1 -1
- data/lib/karafka/web/tracking/helpers/ttls/stats.rb +4 -4
- data/lib/karafka/web/tracking/producers/listeners/booting.rb +1 -1
- data/lib/karafka/web/tracking/producers/listeners/errors.rb +2 -2
- data/lib/karafka/web/tracking/producers/reporter.rb +2 -2
- data/lib/karafka/web/tracking/producers/sampler.rb +1 -1
- data/lib/karafka/web/tracking/ui/errors.rb +4 -4
- data/lib/karafka/web/ui/app.rb +2 -2
- data/lib/karafka/web/ui/base.rb +30 -30
- data/lib/karafka/web/ui/controllers/base_controller.rb +24 -24
- data/lib/karafka/web/ui/controllers/cluster_controller.rb +3 -3
- data/lib/karafka/web/ui/controllers/requests/params.rb +6 -6
- data/lib/karafka/web/ui/helpers/application_helper.rb +59 -59
- data/lib/karafka/web/ui/helpers/paths_helper.rb +15 -7
- data/lib/karafka/web/ui/helpers/tailwind_helper.rb +6 -6
- data/lib/karafka/web/ui/helpers/time_helper.rb +1 -1
- data/lib/karafka/web/ui/helpers/topics_helper.rb +4 -4
- data/lib/karafka/web/ui/lib/admin.rb +2 -2
- data/lib/karafka/web/ui/lib/paginations/base.rb +7 -7
- data/lib/karafka/web/ui/lib/paginations/offset_based.rb +2 -2
- data/lib/karafka/web/ui/lib/paginations/page_based.rb +1 -1
- data/lib/karafka/web/ui/lib/paginations/paginators/arrays.rb +3 -3
- data/lib/karafka/web/ui/lib/paginations/watermark_offsets_based.rb +1 -1
- data/lib/karafka/web/ui/lib/sorter.rb +2 -2
- data/lib/karafka/web/ui/models/counters.rb +1 -1
- data/lib/karafka/web/ui/models/health.rb +1 -0
- data/lib/karafka/web/ui/models/jobs.rb +2 -2
- data/lib/karafka/web/ui/models/message.rb +9 -9
- data/lib/karafka/web/ui/models/metrics/charts/aggregated.rb +3 -3
- data/lib/karafka/web/ui/models/metrics/charts/topics.rb +3 -3
- data/lib/karafka/web/ui/models/metrics/topics.rb +8 -8
- data/lib/karafka/web/ui/models/processes.rb +3 -3
- data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +2 -2
- data/lib/karafka/web/ui/models/status/checks/base.rb +127 -0
- data/lib/karafka/web/ui/models/status/checks/commands_topic_presence.rb +52 -0
- data/lib/karafka/web/ui/models/status/checks/connection.rb +68 -0
- data/lib/karafka/web/ui/models/status/checks/consumers_reports.rb +34 -0
- data/lib/karafka/web/ui/models/status/checks/consumers_reports_schema_state.rb +32 -0
- data/lib/karafka/web/ui/models/status/checks/consumers_schemas.rb +44 -0
- data/lib/karafka/web/ui/models/status/checks/enabled.rb +39 -0
- data/lib/karafka/web/ui/models/status/checks/initial_consumers_metrics.rb +48 -0
- data/lib/karafka/web/ui/models/status/checks/initial_consumers_state.rb +48 -0
- data/lib/karafka/web/ui/models/status/checks/live_reporting.rb +31 -0
- data/lib/karafka/web/ui/models/status/checks/materializing_lag.rb +49 -0
- data/lib/karafka/web/ui/models/status/checks/partitions.rb +45 -0
- data/lib/karafka/web/ui/models/status/checks/pro_subscription.rb +29 -0
- data/lib/karafka/web/ui/models/status/checks/replication.rb +51 -0
- data/lib/karafka/web/ui/models/status/checks/routing_topics_presence.rb +53 -0
- data/lib/karafka/web/ui/models/status/checks/state_calculation.rb +39 -0
- data/lib/karafka/web/ui/models/status/checks/topics.rb +44 -0
- data/lib/karafka/web/ui/models/status/context.rb +142 -0
- data/lib/karafka/web/ui/models/status/step.rb +64 -0
- data/lib/karafka/web/ui/models/status.rb +70 -356
- data/lib/karafka/web/ui/models/topic.rb +2 -2
- data/lib/karafka/web/ui/public/javascripts/application.min.js +1 -1
- 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/live_poll.js +2 -2
- data/lib/karafka/web/ui/public/stylesheets/application.min.css +4660 -2524
- 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/tailwind.css +62 -3
- data/lib/karafka/web/ui/routes/assets.rb +7 -7
- data/lib/karafka/web/ui/routes/cluster.rb +4 -4
- data/lib/karafka/web/ui/routes/consumers.rb +2 -2
- data/lib/karafka/web/ui/routes/dashboard.rb +1 -1
- data/lib/karafka/web/ui/routes/errors.rb +2 -2
- data/lib/karafka/web/ui/routes/jobs.rb +4 -4
- data/lib/karafka/web/ui/routes/routing.rb +1 -1
- data/lib/karafka/web/ui/routes/status.rb +1 -1
- data/lib/karafka/web/ui/routes/support.rb +1 -1
- data/lib/karafka/web/ui/routes/ux.rb +1 -1
- data/lib/karafka/web/ui/views/cluster/_partition.erb +1 -0
- data/lib/karafka/web/ui/views/dashboard/_counters.erb +16 -16
- data/lib/karafka/web/ui/views/errors/_detail.erb +2 -3
- data/lib/karafka/web/ui/views/errors/_error.erb +1 -1
- data/lib/karafka/web/ui/views/errors/index.erb +1 -1
- data/lib/karafka/web/ui/views/errors/show.erb +1 -1
- data/lib/karafka/web/ui/views/jobs/_job.erb +1 -1
- data/lib/karafka/web/ui/views/layout.erb +1 -1
- data/lib/karafka/web/ui/views/routing/_consumer_group.erb +1 -1
- data/lib/karafka/web/ui/views/routing/_topic.erb +1 -1
- data/lib/karafka/web/ui/views/shared/_header.erb +5 -5
- data/lib/karafka/web/ui/views/shared/_navigation.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_error.erb +2 -2
- data/lib/karafka/web/ui/views/shared/alerts/_info.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_success.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +2 -2
- data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +3 -3
- data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +4 -4
- data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +4 -4
- data/lib/karafka/web/ui/views/shared/exceptions/unhandled_error.erb +4 -4
- data/lib/karafka/web/ui/views/status/show.erb +15 -0
- data/lib/karafka/web/ui/views/status/warnings/_commands_topic_presence.erb +14 -0
- data/lib/karafka/web/ui/views/ux/_code.erb +0 -1
- data/lib/karafka/web/ui/views/ux/_data_table.erb +79 -0
- data/lib/karafka/web/ui/views/ux/_headers.erb +1 -1
- data/lib/karafka/web/ui/views/ux/_pagination.erb +1 -1
- data/lib/karafka/web/version.rb +1 -1
- data/lib/karafka/web.rb +17 -17
- data/package-lock.json +480 -92
- data/package.json +3 -1
- data/renovate.json +12 -11
- data/tailwind.config.js +4 -7
- metadata +72 -3
- data/lib/karafka/web/pro/ui/views/consumers/commands/_metadata.erb +0 -44
data/bin/rspecs_parallel
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Runs all specs in parallel using timing-based load balancing
|
|
4
|
+
# Uses bin/balance_specs to distribute files across workers
|
|
5
|
+
#
|
|
6
|
+
# Environment variables:
|
|
7
|
+
# REGULAR_WORKERS - number of workers for regular specs (default: 4)
|
|
8
|
+
# PRO_WORKERS - number of workers for pro specs (default: 4)
|
|
9
|
+
|
|
10
|
+
set -e
|
|
11
|
+
|
|
12
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
+
|
|
14
|
+
# Number of workers per spec type
|
|
15
|
+
REGULAR_WORKERS="${REGULAR_WORKERS:-4}"
|
|
16
|
+
PRO_WORKERS="${PRO_WORKERS:-4}"
|
|
17
|
+
|
|
18
|
+
echo "Running specs in parallel mode..."
|
|
19
|
+
echo " Regular workers: $REGULAR_WORKERS"
|
|
20
|
+
echo " Pro workers: $PRO_WORKERS"
|
|
21
|
+
|
|
22
|
+
# Create temp directory for logs
|
|
23
|
+
TMPDIR=$(mktemp -d)
|
|
24
|
+
trap "rm -rf $TMPDIR" EXIT
|
|
25
|
+
|
|
26
|
+
# Get balanced file lists from the balancer (JSON output parsed with jq)
|
|
27
|
+
echo ""
|
|
28
|
+
echo "=== Balancing Regular Specs ==="
|
|
29
|
+
REGULAR_JSON=$("$SCRIPT_DIR/balance_specs" regular "$REGULAR_WORKERS")
|
|
30
|
+
readarray -t REGULAR_GROUPS < <(echo "$REGULAR_JSON" | jq -r '.[] | join(" ")')
|
|
31
|
+
|
|
32
|
+
echo ""
|
|
33
|
+
echo "=== Balancing Pro Specs ==="
|
|
34
|
+
PRO_JSON=$("$SCRIPT_DIR/balance_specs" pro "$PRO_WORKERS")
|
|
35
|
+
readarray -t PRO_GROUPS < <(echo "$PRO_JSON" | jq -r '.[] | join(" ")')
|
|
36
|
+
|
|
37
|
+
echo ""
|
|
38
|
+
echo "Starting parallel execution..."
|
|
39
|
+
|
|
40
|
+
# Launch regular spec workers
|
|
41
|
+
PIDS=()
|
|
42
|
+
for i in $(seq 0 $((REGULAR_WORKERS - 1))); do
|
|
43
|
+
if [ -n "${REGULAR_GROUPS[$i]}" ]; then
|
|
44
|
+
PARALLEL=true PARALLEL_GROUP_ID="regular_$i" SPECS_TYPE=regular \
|
|
45
|
+
bundle exec rspec ${REGULAR_GROUPS[$i]} --format progress \
|
|
46
|
+
> "$TMPDIR/regular_$i.log" 2>&1 &
|
|
47
|
+
PIDS+=($!)
|
|
48
|
+
echo " Started regular worker $((i + 1)) (PID ${PIDS[-1]}): $(echo ${REGULAR_GROUPS[$i]} | wc -w) files"
|
|
49
|
+
fi
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
# Launch pro spec workers
|
|
53
|
+
for i in $(seq 0 $((PRO_WORKERS - 1))); do
|
|
54
|
+
if [ -n "${PRO_GROUPS[$i]}" ]; then
|
|
55
|
+
PARALLEL=true PARALLEL_GROUP_ID="pro_$i" SPECS_TYPE=pro \
|
|
56
|
+
bundle exec rspec ${PRO_GROUPS[$i]} --format progress \
|
|
57
|
+
> "$TMPDIR/pro_$i.log" 2>&1 &
|
|
58
|
+
PIDS+=($!)
|
|
59
|
+
echo " Started pro worker $((i + 1)) (PID ${PIDS[-1]}): $(echo ${PRO_GROUPS[$i]} | wc -w) files"
|
|
60
|
+
fi
|
|
61
|
+
done
|
|
62
|
+
|
|
63
|
+
echo ""
|
|
64
|
+
echo "Waiting for ${#PIDS[@]} workers to complete..."
|
|
65
|
+
|
|
66
|
+
# Wait for all processes and collect exit codes
|
|
67
|
+
FAILED=0
|
|
68
|
+
for idx in "${!PIDS[@]}"; do
|
|
69
|
+
PID="${PIDS[$idx]}"
|
|
70
|
+
if ! wait "$PID"; then
|
|
71
|
+
FAILED=1
|
|
72
|
+
fi
|
|
73
|
+
done
|
|
74
|
+
|
|
75
|
+
# Show all logs
|
|
76
|
+
echo ""
|
|
77
|
+
echo "=========================================="
|
|
78
|
+
echo " RESULTS "
|
|
79
|
+
echo "=========================================="
|
|
80
|
+
|
|
81
|
+
for i in $(seq 0 $((REGULAR_WORKERS - 1))); do
|
|
82
|
+
if [ -f "$TMPDIR/regular_$i.log" ]; then
|
|
83
|
+
echo ""
|
|
84
|
+
echo "=== Regular Worker $((i + 1)) ==="
|
|
85
|
+
cat "$TMPDIR/regular_$i.log"
|
|
86
|
+
fi
|
|
87
|
+
done
|
|
88
|
+
|
|
89
|
+
for i in $(seq 0 $((PRO_WORKERS - 1))); do
|
|
90
|
+
if [ -f "$TMPDIR/pro_$i.log" ]; then
|
|
91
|
+
echo ""
|
|
92
|
+
echo "=== Pro Worker $((i + 1)) ==="
|
|
93
|
+
cat "$TMPDIR/pro_$i.log"
|
|
94
|
+
fi
|
|
95
|
+
done
|
|
96
|
+
|
|
97
|
+
if [ $FAILED -eq 1 ]; then
|
|
98
|
+
echo ""
|
|
99
|
+
echo "=========================================="
|
|
100
|
+
echo " SOME SPECS FAILED! "
|
|
101
|
+
echo "=========================================="
|
|
102
|
+
exit 1
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
echo ""
|
|
106
|
+
echo "=========================================="
|
|
107
|
+
echo " ALL SPECS PASSED! "
|
|
108
|
+
echo "=========================================="
|
|
109
|
+
|
|
110
|
+
# Run coverage check
|
|
111
|
+
"$SCRIPT_DIR/check_coverage"
|
data/docker-compose.yml
CHANGED
data/karafka-web.gemspec
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
lib = File.expand_path(
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
|
6
|
-
require
|
|
6
|
+
require "karafka/web/version"
|
|
7
7
|
|
|
8
8
|
Gem::Specification.new do |spec|
|
|
9
|
-
spec.name
|
|
10
|
-
spec.version
|
|
11
|
-
spec.platform
|
|
12
|
-
spec.authors
|
|
13
|
-
spec.email
|
|
14
|
-
spec.homepage
|
|
15
|
-
spec.summary
|
|
16
|
-
spec.description =
|
|
17
|
-
spec.licenses
|
|
18
|
-
|
|
19
|
-
spec.add_dependency
|
|
20
|
-
spec.add_dependency
|
|
21
|
-
spec.add_dependency
|
|
22
|
-
spec.add_dependency
|
|
23
|
-
spec.add_dependency
|
|
24
|
-
|
|
25
|
-
spec.add_development_dependency
|
|
26
|
-
|
|
27
|
-
spec.required_ruby_version =
|
|
28
|
-
|
|
29
|
-
spec.executables
|
|
9
|
+
spec.name = "karafka-web"
|
|
10
|
+
spec.version = ::Karafka::Web::VERSION
|
|
11
|
+
spec.platform = Gem::Platform::RUBY
|
|
12
|
+
spec.authors = ["Maciej Mensfeld"]
|
|
13
|
+
spec.email = %w[contact@karafka.io]
|
|
14
|
+
spec.homepage = "https://karafka.io"
|
|
15
|
+
spec.summary = "Karafka ecosystem Web UI interface"
|
|
16
|
+
spec.description = "Karafka ecosystem plug-and-play Web UI"
|
|
17
|
+
spec.licenses = %w[LGPL-3.0-only Commercial]
|
|
18
|
+
|
|
19
|
+
spec.add_dependency "erubi", "~> 1.4"
|
|
20
|
+
spec.add_dependency "karafka", ">= 2.5.2", "< 2.6.0"
|
|
21
|
+
spec.add_dependency "karafka-core", ">= 2.5.0", "< 2.6.0"
|
|
22
|
+
spec.add_dependency "roda", "~> 3.69", ">= 3.69"
|
|
23
|
+
spec.add_dependency "tilt", "~> 2.0"
|
|
24
|
+
|
|
25
|
+
spec.add_development_dependency "rackup", "~> 0.2"
|
|
26
|
+
|
|
27
|
+
spec.required_ruby_version = ">= 3.2.0"
|
|
28
|
+
|
|
29
|
+
spec.executables = %w[karafka-web]
|
|
30
30
|
spec.require_paths = %w[lib]
|
|
31
31
|
|
|
32
32
|
spec.files = `git ls-files -z`
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
.split("\x0")
|
|
34
|
+
.reject { |f| f.match(%r{^(spec)/}) }
|
|
35
|
+
.reject { |f| f.include?(".github") }
|
|
36
|
+
.reject { |f| f.start_with?(".") }
|
|
37
|
+
.reject { |f| f.end_with?(".map") }
|
|
38
38
|
|
|
39
39
|
spec.metadata = {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
"funding_uri" => "https://karafka.io/#become-pro",
|
|
41
|
+
"homepage_uri" => "https://karafka.io",
|
|
42
|
+
"changelog_uri" => "https://karafka.io/docs/Changelog-Karafka-Web-UI",
|
|
43
|
+
"bug_tracker_uri" => "https://github.com/karafka/karafka-web/issues",
|
|
44
|
+
"source_code_uri" => "https://github.com/karafka/karafka-web",
|
|
45
|
+
"documentation_uri" => "https://karafka.io/docs",
|
|
46
|
+
"rubygems_mfa_required" => "true"
|
|
47
47
|
}
|
|
48
48
|
end
|
data/lib/karafka/web/cli/base.rb
CHANGED
|
@@ -13,7 +13,7 @@ module Karafka
|
|
|
13
13
|
ObjectSpace
|
|
14
14
|
.each_object(Class)
|
|
15
15
|
.select { |klass| klass.superclass == Karafka::Web::Cli::Base }
|
|
16
|
-
.reject { |klass| klass.to_s.end_with?(
|
|
16
|
+
.reject { |klass| klass.to_s.end_with?("::Base") }
|
|
17
17
|
.sort_by(&:name)
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -27,7 +27,7 @@ module Karafka
|
|
|
27
27
|
# if we are supposed to compute the factor automatically
|
|
28
28
|
# @return [Integer] replication factor for Karafka Web UI topics
|
|
29
29
|
def compute_replication_factor(cli_replication_factor)
|
|
30
|
-
cli_replication_factor || (Ui::Models::ClusterInfo.fetch.brokers.size > 1 ? 2 : 1)
|
|
30
|
+
cli_replication_factor || ((Ui::Models::ClusterInfo.fetch.brokers.size > 1) ? 2 : 1)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
data/lib/karafka/web/cli/help.rb
CHANGED
|
@@ -5,14 +5,14 @@ module Karafka
|
|
|
5
5
|
class Cli
|
|
6
6
|
# Displays help
|
|
7
7
|
class Help < Base
|
|
8
|
-
desc
|
|
8
|
+
desc "Describes available commands"
|
|
9
9
|
|
|
10
10
|
# Print available commands
|
|
11
11
|
def call
|
|
12
12
|
# Find the longest command for alignment purposes
|
|
13
13
|
max_command_length = self.class.commands.map { |command| command.name.size }.max
|
|
14
14
|
|
|
15
|
-
puts
|
|
15
|
+
puts "Karafka Web UI commands:"
|
|
16
16
|
|
|
17
17
|
# Print each command formatted with its description
|
|
18
18
|
self.class.commands.each do |command|
|
|
@@ -5,13 +5,13 @@ module Karafka
|
|
|
5
5
|
class Cli
|
|
6
6
|
# Installs Web UI
|
|
7
7
|
class Install < Base
|
|
8
|
-
desc
|
|
8
|
+
desc "Installs the Web UI"
|
|
9
9
|
|
|
10
10
|
option(
|
|
11
11
|
:replication_factor,
|
|
12
|
-
|
|
12
|
+
"Replication factor for created topics",
|
|
13
13
|
Integer,
|
|
14
|
-
[
|
|
14
|
+
["--replication_factor [FACTOR]"]
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
# Installs Karafka Web. Creates all needed topics, populates the data and adds the needed
|
|
@@ -5,13 +5,13 @@ module Karafka
|
|
|
5
5
|
class Cli
|
|
6
6
|
# Migrates the Web UI topics and states if needed
|
|
7
7
|
class Migrate < Base
|
|
8
|
-
desc
|
|
8
|
+
desc "Runs necessary migrations of Web UI topics and states"
|
|
9
9
|
|
|
10
10
|
option(
|
|
11
11
|
:replication_factor,
|
|
12
|
-
|
|
12
|
+
"Replication factor for created topics",
|
|
13
13
|
Integer,
|
|
14
|
-
[
|
|
14
|
+
["--replication_factor [FACTOR]"]
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
# Creates new topics (if any) and populates missing data.
|
|
@@ -5,13 +5,13 @@ module Karafka
|
|
|
5
5
|
class Cli
|
|
6
6
|
# Resets the Web UI
|
|
7
7
|
class Reset < Base
|
|
8
|
-
desc
|
|
8
|
+
desc "Resets the Web UI by removing all the Web topics and creating them again"
|
|
9
9
|
|
|
10
10
|
option(
|
|
11
11
|
:replication_factor,
|
|
12
|
-
|
|
12
|
+
"Replication factor for created topics",
|
|
13
13
|
Integer,
|
|
14
|
-
[
|
|
14
|
+
["--replication_factor [FACTOR]"]
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
# Resets Karafka Web. Removes the topics, creates them again and populates the initial
|
data/lib/karafka/web/config.rb
CHANGED
|
@@ -15,14 +15,22 @@ module Karafka
|
|
|
15
15
|
# This is used both in the processing for eviction and in the UI
|
|
16
16
|
setting :ttl, default: 30_000
|
|
17
17
|
|
|
18
|
-
# Producer for the Web UI.
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
18
|
+
# Producer for the Web UI.
|
|
19
|
+
#
|
|
20
|
+
# By default it uses a low-intensity variant of `Karafka.producer` with reduced
|
|
21
|
+
# acknowledgment requirements (acks: 0) since Web UI reporting is not mission-critical
|
|
22
|
+
# and serves primarily analytical purposes. This minimizes overhead by using
|
|
23
|
+
# fire-and-forget semantics where occasional message loss is acceptable.
|
|
24
|
+
#
|
|
25
|
+
# For idempotent or transactional producers, the default producer is used unchanged
|
|
26
|
+
# since acks settings cannot be altered for these producer types.
|
|
27
|
+
#
|
|
28
|
+
# This setting may be overwritten if you want to use a completely separate producer
|
|
29
|
+
# instance, for example in case of heavy usage of the transactional producer as a default
|
|
30
|
+
# where Karafka may not be able to report data because it is locked in a user transaction.
|
|
23
31
|
setting(
|
|
24
32
|
:producer,
|
|
25
|
-
constructor: -> {
|
|
33
|
+
constructor: -> { Producer.new },
|
|
26
34
|
lazy: true
|
|
27
35
|
)
|
|
28
36
|
|
|
@@ -30,18 +38,18 @@ module Karafka
|
|
|
30
38
|
# Karafka Web UI uses the Admin API for many operations, but there are few
|
|
31
39
|
# (like states materialization) where a distinct consumer group is needed. In cases like that
|
|
32
40
|
# this group id will be used
|
|
33
|
-
setting :group_id, default:
|
|
41
|
+
setting :group_id, default: "karafka_web"
|
|
34
42
|
|
|
35
43
|
# Topics naming - used for processing and UI
|
|
36
44
|
setting :topics do
|
|
37
45
|
# All the errors encountered will be dispatched to this topic for inspection
|
|
38
46
|
setting :errors do
|
|
39
|
-
setting :name, default:
|
|
47
|
+
setting :name, default: "karafka_errors"
|
|
40
48
|
|
|
41
49
|
# Remove really old errors (older than 3 months just to preserve space)
|
|
42
50
|
setting :config, default: {
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
"cleanup.policy": "delete",
|
|
52
|
+
"retention.ms": 3 * 31 * 24 * 60 * 60 * 1_000 # 3 months
|
|
45
53
|
}
|
|
46
54
|
end
|
|
47
55
|
|
|
@@ -50,7 +58,7 @@ module Karafka
|
|
|
50
58
|
# information sent from each consumer process.
|
|
51
59
|
setting :reports do
|
|
52
60
|
# Name of the topic
|
|
53
|
-
setting :name, default:
|
|
61
|
+
setting :name, default: "karafka_consumers_reports"
|
|
54
62
|
|
|
55
63
|
# We do not need to to store this data for longer than 1 day as this data is only
|
|
56
64
|
# used to materialize the end states
|
|
@@ -61,36 +69,36 @@ module Karafka
|
|
|
61
69
|
# In case its not consumed because no processes are running, it also usually means
|
|
62
70
|
# there's no data to consume because no karafka servers report
|
|
63
71
|
setting :config, default: {
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
"cleanup.policy": "delete",
|
|
73
|
+
"retention.ms": 24 * 60 * 60 * 1_000 # 1 day
|
|
66
74
|
}
|
|
67
75
|
end
|
|
68
76
|
|
|
69
77
|
# Topic for storing states aggregated info
|
|
70
78
|
setting :states do
|
|
71
|
-
setting :name, default:
|
|
79
|
+
setting :name, default: "karafka_consumers_states"
|
|
72
80
|
|
|
73
81
|
# We care only about the most recent state, previous are irrelevant. So we can
|
|
74
82
|
# easily compact after one minute. We do not use this beyond the most recent
|
|
75
83
|
# collective state, hence it all can easily go away. We also limit the segment
|
|
76
84
|
# size to at most 100MB not to use more space ever.
|
|
77
85
|
setting :config, default: {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
"cleanup.policy": "compact",
|
|
87
|
+
"retention.ms": 60 * 60 * 1_000,
|
|
88
|
+
"segment.ms": 24 * 60 * 60 * 1_000, # 1 day
|
|
89
|
+
"segment.bytes": 104_857_600 # 100MB
|
|
82
90
|
}
|
|
83
91
|
end
|
|
84
92
|
|
|
85
93
|
# Topic for storing consumers historical metrics info
|
|
86
94
|
setting :metrics do
|
|
87
|
-
setting :name, default:
|
|
95
|
+
setting :name, default: "karafka_consumers_metrics"
|
|
88
96
|
|
|
89
97
|
setting :config, default: {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
"cleanup.policy": "compact",
|
|
99
|
+
"retention.ms": 24 * 60 * 60 * 1_000, # 1 day
|
|
100
|
+
"segment.ms": 24 * 60 * 60 * 1_000, # 1 day
|
|
101
|
+
"segment.bytes": 104_857_600 # 100MB
|
|
94
102
|
}
|
|
95
103
|
end
|
|
96
104
|
|
|
@@ -99,13 +107,13 @@ module Karafka
|
|
|
99
107
|
# transition from one to another is smooth. Otherwise upgrade would require changes
|
|
100
108
|
# to topics (migration) which may be more complex
|
|
101
109
|
setting :commands do
|
|
102
|
-
setting :name, default:
|
|
110
|
+
setting :name, default: "karafka_consumers_commands"
|
|
103
111
|
|
|
104
112
|
setting :config, default: {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
"cleanup.policy": "delete",
|
|
114
|
+
"retention.ms": 7 * 24 * 60 * 60 * 1_000, # 7 days
|
|
115
|
+
"segment.ms": 24 * 60 * 60 * 1_000, # 1 day
|
|
116
|
+
"segment.bytes": 104_857_600 # 100MB
|
|
109
117
|
}
|
|
110
118
|
end
|
|
111
119
|
end
|
|
@@ -199,7 +207,7 @@ module Karafka
|
|
|
199
207
|
setting :kafka, default: {
|
|
200
208
|
# We do not use at the moment the `#eofed` flag for anything, thus there is no point in
|
|
201
209
|
# having it set to true if user users it.
|
|
202
|
-
|
|
210
|
+
"enable.partition.eof": false
|
|
203
211
|
}.freeze
|
|
204
212
|
end
|
|
205
213
|
|
|
@@ -208,13 +216,13 @@ module Karafka
|
|
|
208
216
|
# Should be set per ENV.
|
|
209
217
|
setting :sessions do
|
|
210
218
|
# Cookie key name
|
|
211
|
-
setting :key, default:
|
|
219
|
+
setting :key, default: "_karafka_session"
|
|
212
220
|
|
|
213
221
|
# Rack middleware session env key. We use independent key from "rack.session" here to
|
|
214
222
|
# prevent our data from leaking to the main app (when mounted) and the other way around.
|
|
215
223
|
# This also prevents us from overloading the session object with extra data that could
|
|
216
224
|
# cause it to go beyond a cookie limit.
|
|
217
|
-
setting :env_key, default:
|
|
225
|
+
setting :env_key, default: "karafka.session"
|
|
218
226
|
|
|
219
227
|
# Secret for the session cookie
|
|
220
228
|
setting :secret, default: SecureRandom.hex(32)
|
|
@@ -299,7 +307,7 @@ module Karafka
|
|
|
299
307
|
# that might have been committed via transactional producer, we would wait for 1 second
|
|
300
308
|
# to get needed data. If you are experiencing timeouts or other issues with the Web IU
|
|
301
309
|
# interface, you can increase this.
|
|
302
|
-
|
|
310
|
+
"fetch.wait.max.ms": 100
|
|
303
311
|
}
|
|
304
312
|
end
|
|
305
313
|
end
|
|
@@ -14,8 +14,8 @@ module Karafka
|
|
|
14
14
|
|
|
15
15
|
super do |config|
|
|
16
16
|
config.error_messages = YAML.safe_load_file(
|
|
17
|
-
File.join(Karafka::Web.gem_root,
|
|
18
|
-
).fetch(
|
|
17
|
+
File.join(Karafka::Web.gem_root, "config", "locales", "errors.yml")
|
|
18
|
+
).fetch("en").fetch("validations").fetch("web")
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
end
|
|
@@ -13,11 +13,11 @@ module Karafka
|
|
|
13
13
|
# @param message [::Karafka::Messages::Message]
|
|
14
14
|
# @return [Object] deserialized data
|
|
15
15
|
def call(message)
|
|
16
|
-
raw_payload = if message.headers.key?(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
raw_payload = if message.headers.key?("zlib")
|
|
17
|
+
Zlib::Inflate.inflate(message.raw_payload)
|
|
18
|
+
else
|
|
19
|
+
message.raw_payload
|
|
20
|
+
end
|
|
21
21
|
|
|
22
22
|
::JSON.parse(
|
|
23
23
|
raw_payload,
|
|
@@ -14,20 +14,20 @@ module Karafka
|
|
|
14
14
|
def install(replication_factor: 1)
|
|
15
15
|
enable!
|
|
16
16
|
puts
|
|
17
|
-
puts
|
|
17
|
+
puts "Installing Karafka Web UI..."
|
|
18
18
|
puts
|
|
19
19
|
Management::Actions::ExtendBootFile.new.call
|
|
20
20
|
puts
|
|
21
|
-
puts
|
|
21
|
+
puts "Creating necessary topics and populating state data..."
|
|
22
22
|
puts
|
|
23
23
|
Management::Actions::CreateTopics.new.call(replication_factor)
|
|
24
24
|
wait_for_topics
|
|
25
25
|
Management::Actions::CreateInitialStates.new.call
|
|
26
26
|
puts
|
|
27
|
-
puts
|
|
27
|
+
puts "Running data migrations..."
|
|
28
28
|
Management::Actions::MigrateStatesData.new.call
|
|
29
29
|
puts
|
|
30
|
-
puts("Installation #{green(
|
|
30
|
+
puts("Installation #{green("completed")}. Have fun!")
|
|
31
31
|
puts
|
|
32
32
|
end
|
|
33
33
|
|
|
@@ -38,16 +38,16 @@ module Karafka
|
|
|
38
38
|
def migrate(replication_factor: 1)
|
|
39
39
|
enable!
|
|
40
40
|
puts
|
|
41
|
-
puts
|
|
41
|
+
puts "Creating necessary topics and populating state data..."
|
|
42
42
|
puts
|
|
43
43
|
Management::Actions::CreateTopics.new.call(replication_factor)
|
|
44
44
|
wait_for_topics
|
|
45
45
|
Management::Actions::CreateInitialStates.new.call
|
|
46
46
|
puts
|
|
47
|
-
puts
|
|
47
|
+
puts "Running data migrations..."
|
|
48
48
|
Management::Actions::MigrateStatesData.new.call
|
|
49
49
|
puts
|
|
50
|
-
puts("Migration #{green(
|
|
50
|
+
puts("Migration #{green("completed")}. Have fun!")
|
|
51
51
|
puts
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -56,7 +56,7 @@ module Karafka
|
|
|
56
56
|
def reset(replication_factor: 1)
|
|
57
57
|
enable!
|
|
58
58
|
puts
|
|
59
|
-
puts
|
|
59
|
+
puts "Resetting Karafka Web UI..."
|
|
60
60
|
puts
|
|
61
61
|
Management::Actions::DeleteTopics.new.call
|
|
62
62
|
puts
|
|
@@ -64,10 +64,10 @@ module Karafka
|
|
|
64
64
|
wait_for_topics
|
|
65
65
|
Management::Actions::CreateInitialStates.new.call
|
|
66
66
|
puts
|
|
67
|
-
puts
|
|
67
|
+
puts "Running data migrations..."
|
|
68
68
|
Management::Actions::MigrateStatesData.new.call
|
|
69
69
|
puts
|
|
70
|
-
puts("Resetting #{green(
|
|
70
|
+
puts("Resetting #{green("completed")}. Have fun!")
|
|
71
71
|
puts
|
|
72
72
|
end
|
|
73
73
|
|
|
@@ -75,12 +75,12 @@ module Karafka
|
|
|
75
75
|
def uninstall
|
|
76
76
|
enable!
|
|
77
77
|
puts
|
|
78
|
-
puts
|
|
78
|
+
puts "Uninstalling Karafka Web UI..."
|
|
79
79
|
puts
|
|
80
80
|
Management::Actions::DeleteTopics.new.call
|
|
81
81
|
Management::Actions::CleanBootFile.new.call
|
|
82
82
|
puts
|
|
83
|
-
puts("Uninstalling #{green(
|
|
83
|
+
puts("Uninstalling #{green("completed")}. Goodbye!")
|
|
84
84
|
puts
|
|
85
85
|
end
|
|
86
86
|
|
|
@@ -97,7 +97,7 @@ module Karafka
|
|
|
97
97
|
# bit of time just in case.
|
|
98
98
|
def wait_for_topics
|
|
99
99
|
puts
|
|
100
|
-
print
|
|
100
|
+
print "Waiting for the topics to synchronize in the cluster"
|
|
101
101
|
wait(5)
|
|
102
102
|
puts
|
|
103
103
|
end
|
|
@@ -107,7 +107,7 @@ module Karafka
|
|
|
107
107
|
def wait(time_in_seconds)
|
|
108
108
|
time_in_seconds.times do
|
|
109
109
|
sleep(1)
|
|
110
|
-
print
|
|
110
|
+
print "."
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
print "\n"
|
|
@@ -14,20 +14,20 @@ module Karafka
|
|
|
14
14
|
|
|
15
15
|
# @return [String] green colored word "successfully"
|
|
16
16
|
def successfully
|
|
17
|
-
green(
|
|
17
|
+
green("successfully")
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
# @return [String] green colored word "already"
|
|
21
21
|
def already
|
|
22
|
-
green(
|
|
22
|
+
green("already")
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
# @return [Array<String>] topics available in the cluster
|
|
26
26
|
def existing_topics_names
|
|
27
27
|
@existing_topics_names ||= ::Karafka::Admin
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
.cluster_info
|
|
29
|
+
.topics
|
|
30
|
+
.map { |topic| topic[:topic_name] }
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -16,14 +16,14 @@ module Karafka
|
|
|
16
16
|
karafka_rb = File.readlines(Karafka.boot_file)
|
|
17
17
|
|
|
18
18
|
if karafka_rb.any? { |line| line.include?(ENABLER_CODE) }
|
|
19
|
-
puts
|
|
19
|
+
puts "Updating the Karafka boot file..."
|
|
20
20
|
karafka_rb.delete_if { |line| line.include?(ENABLER_CODE) }
|
|
21
21
|
|
|
22
22
|
File.write(Karafka.boot_file, karafka_rb.join)
|
|
23
23
|
puts "Karafka boot file #{successfully} updated."
|
|
24
|
-
puts
|
|
24
|
+
puts "Make sure to remove configuration and other customizations as well."
|
|
25
25
|
else
|
|
26
|
-
puts
|
|
26
|
+
puts "Karafka Web UI components not found in the boot file."
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
end
|