karafka-web 0.11.6 → 1.0.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
- data/CHANGELOG.md +19 -0
- data/Gemfile +3 -2
- data/Gemfile.lint +2 -2
- data/Gemfile.lint.lock +10 -25
- data/Gemfile.lock +64 -87
- data/Rakefile +26 -0
- data/bin/{balance_specs → balance_tests} +27 -27
- data/bin/check_coverage +5 -5
- data/bin/collect_timings +33 -37
- data/bin/integrations +5 -5
- data/bin/rspecs +5 -8
- data/bin/{rspecs_parallel → tests_parallel} +32 -19
- data/bin/verify_kafka_warnings +2 -0
- data/docker-compose.yml +1 -1
- data/gulpfile.js +14 -11
- data/karafka-web.gemspec +4 -4
- data/lib/karafka/web/config.rb +1 -2
- data/lib/karafka/web/management/actions/enable.rb +1 -2
- data/lib/karafka/web/management/migrations/consumers_reports/1772128000_add_poll_interval_to_subscription_groups.rb +48 -0
- data/lib/karafka/web/pro/commanding/commands/base.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/topics/pause.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/topics/resume.rb +8 -0
- data/lib/karafka/web/pro/commanding/config.rb +8 -0
- data/lib/karafka/web/pro/commanding/contracts/config.rb +8 -0
- data/lib/karafka/web/pro/commanding/dispatcher.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/base.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/pause.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/resume.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/executor.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/listener.rb +8 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/tracker.rb +8 -0
- data/lib/karafka/web/pro/commanding/listener.rb +8 -0
- data/lib/karafka/web/pro/commanding/manager.rb +8 -0
- data/lib/karafka/web/pro/commanding/matcher.rb +8 -0
- data/lib/karafka/web/pro/commanding/matchers/base.rb +8 -0
- data/lib/karafka/web/pro/commanding/matchers/consumer_group_id.rb +8 -0
- data/lib/karafka/web/pro/commanding/matchers/message_type.rb +8 -0
- data/lib/karafka/web/pro/commanding/matchers/partition_id.rb +8 -0
- data/lib/karafka/web/pro/commanding/matchers/process_id.rb +8 -0
- data/lib/karafka/web/pro/commanding/matchers/schema_version.rb +8 -0
- data/lib/karafka/web/pro/commanding/matchers/topic.rb +8 -0
- data/lib/karafka/web/pro/commanding/request.rb +8 -0
- data/lib/karafka/web/pro/commanding.rb +8 -0
- data/lib/karafka/web/pro/loader.rb +8 -0
- data/lib/karafka/web/pro/ui/app.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/base_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/cluster_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/base_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/commanding_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/commands_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/consumers_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/consumers/topics/pauses_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +11 -0
- data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +16 -1
- data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/health_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/status_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/support_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +11 -1
- data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/branding/config.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/branding.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/features.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/policies/config.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/policies/messages.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/policies/requests.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/policies.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/safe_runner.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/config.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +8 -0
- data/lib/karafka/web/pro/ui/lib/search/runner.rb +9 -2
- data/lib/karafka/web/pro/ui/lib/search.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/base.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/cluster.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/consumers.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/dashboard.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/dlq.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/errors.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/explorer.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/health.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/jobs.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/routing.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/status.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/support.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/topics.rb +8 -0
- data/lib/karafka/web/pro/ui/routes/ux.rb +8 -0
- data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +6 -0
- data/lib/karafka/web/pro/ui/views/cluster/_config.erb +6 -0
- data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/cluster/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/cluster/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_backtrace.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_command.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_command.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_schema.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_table.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_acceptance.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_request.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_result.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_request.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_response.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_command_name_badge.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_request.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_response.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +6 -3
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_metrics.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_stopped.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_subscription_group.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_tabs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/performance.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +6 -4
- data/lib/karafka/web/pro/ui/views/consumers/controls/index.erb +6 -2
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_job.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_no_jobs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/jobs/pending.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/jobs/running.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +6 -1
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +6 -1
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +6 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_partition_info.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_adjusting_warning.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_edit_form.erb +6 -1
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_lrj_not_manageable.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_new_form.erb +6 -2
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_not_running.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_topic_info.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/edit.erb +6 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/new.erb +6 -0
- data/lib/karafka/web/pro/ui/views/dashboard/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +6 -0
- data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +6 -0
- data/lib/karafka/web/pro/ui/views/dlq/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/_error.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/_selector.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/_table.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/errors/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_failed_deserialization.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_filtered.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_message.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_partition_option.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_selector.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_metadata.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_payload.erb +15 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_resources_utilization.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_too_big_to_be_displayed.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_detail.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_key.erb +6 -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/explorer/partition/_messages.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/show.erb +7 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_actions.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_limited.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +6 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_metadata.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_no_search_criteria.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_search_criteria.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_search_modal.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +6 -0
- data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_no_data.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_no_partition_data.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_partitions_with_fallback.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_tabs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/_topic_edit_options.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/changes.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/lags.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/offsets.erb +6 -0
- data/lib/karafka/web/pro/ui/views/health/overview.erb +6 -0
- data/lib/karafka/web/pro/ui/views/jobs/_job.erb +6 -0
- data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/jobs/pending.erb +6 -0
- data/lib/karafka/web/pro/ui/views/jobs/running.erb +6 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +6 -3
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +6 -3
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +6 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +6 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +6 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +6 -0
- data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +6 -0
- data/lib/karafka/web/pro/ui/views/routing/_detail.erb +6 -0
- data/lib/karafka/web/pro/ui/views/routing/_topic.erb +6 -0
- data/lib/karafka/web/pro/ui/views/routing/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/routing/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_cancel.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_compacted.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_schedule.erb +6 -1
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_tombstone.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_unknown.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +6 -0
- data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +6 -0
- data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +6 -0
- data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +6 -1
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/configs/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_badges.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_chart.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +6 -1
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +9 -1
- data/lib/karafka/web/pro/ui/views/topics/distributions/_limited.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/distributions/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/offsets/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_metric_box.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_partition.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_replication_info.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_resilience_success.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_low_durability.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_no_redundancy.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_zero_fault_tolerance.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/show.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +6 -1
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +6 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_tabs.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +6 -0
- data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +6 -0
- data/lib/karafka/web/processing/time_series_tracker.rb +1 -2
- data/lib/karafka/web/producer.rb +2 -1
- data/lib/karafka/web/tracking/consumers/contracts/report.rb +1 -1
- data/lib/karafka/web/tracking/consumers/contracts/subscription_group.rb +1 -0
- data/lib/karafka/web/tracking/consumers/listeners/connections.rb +6 -1
- data/lib/karafka/web/tracking/consumers/listeners/tags.rb +1 -2
- data/lib/karafka/web/tracking/consumers/sampler/enrichers/consumer_groups.rb +1 -0
- data/lib/karafka/web/tracking/consumers/sampler/metrics/jobs.rb +14 -5
- data/lib/karafka/web/tracking/consumers/sampler/metrics/os.rb +1 -2
- data/lib/karafka/web/tracking/consumers/sampler/metrics/server.rb +2 -1
- data/lib/karafka/web/tracking/consumers/sampler.rb +10 -4
- data/lib/karafka/web/ui/base.rb +6 -3
- data/lib/karafka/web/ui/lib/admin.rb +2 -1
- data/lib/karafka/web/ui/lib/hash_proxy.rb +1 -2
- data/lib/karafka/web/ui/models/counters.rb +23 -25
- data/lib/karafka/web/ui/models/message.rb +1 -2
- data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +1 -2
- data/lib/karafka/web/ui/models/status/checks/base.rb +1 -2
- data/lib/karafka/web/ui/models/status/context.rb +12 -0
- data/lib/karafka/web/ui/models/topic.rb +3 -1
- data/lib/karafka/web/ui/public/javascripts/application.min.js +6 -7
- 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/stylesheets/application.min.css +183 -211
- 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/views/consumers/_assignments_badges.erb +0 -1
- data/lib/karafka/web/ui/views/ux/_data_table.erb +5 -5
- data/lib/karafka/web/ui/views/ux/_pagination.erb +4 -4
- data/lib/karafka/web/ui/views/ux/_tabs.erb +3 -3
- data/lib/karafka/web/ui/views/ux/_topic_tiles.erb +4 -4
- data/lib/karafka/web/version.rb +1 -1
- data/lib/karafka/web.rb +0 -1
- data/package-lock.json +748 -697
- data/package.json +2 -3
- data/renovate.json +25 -3
- metadata +19 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 27e32327bc795732ee58f5dc757bd1fbe1dbc24198a8561f67cffbb48c5a4eb3
|
|
4
|
+
data.tar.gz: 81bb5e628233f6acf7d9cf0527ed07517271cc87f4b19cef925dd2e4e3887ef0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 935b6515910e2eaf6871c5cb00920cda705935d06449de61410e941dfdb185c7437a2e7fa388244997dcb338efd0221ad7cf9c9e207d0b2fa4237fd9f63166e0
|
|
7
|
+
data.tar.gz: 9d3fe3b1c638b6a72b729464a2dc5178202fe9158f88aa3d5c692498d82eda3e65760141d5233e43e7bfd083ecd68bbaf2881f97db6a828825498e1771b4bdcf
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Karafka Web Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.0 (Unreleased)
|
|
4
|
+
- [Fix] Add `initialize` to `Status::Context` that defines all instance variables upfront in a consistent order, giving every instance the same Ruby object shape and eliminating the `:performance` shape-variation warning.
|
|
5
|
+
- [Enhancement] Add `Warning.process` block to the test helper to turn Ruby warnings originating from the project code into test failures.
|
|
6
|
+
- [Enhancement] Enable all opt-in Ruby warning categories in the test helper via `Warning.categories` (available since Ruby 3.4), so any new categories added in future Ruby versions are automatically enabled without code changes.
|
|
7
|
+
- [Enhancement] Replace sequential per-partition `query_watermark_offsets` consumer calls in `Counters#estimate_errors_count` with a single targeted `topic_info` metadata call followed by a batch `read_watermark_offsets` admin call. This eliminates the consumer connection overhead and reduces Kafka roundtrips from up to N+1 sequential calls to 3 regardless of partition count.
|
|
8
|
+
- [Enhancement] Allow for zero value in number of workers to support dynamic scaling of Karafka workers.
|
|
9
|
+
- [Enhancement] Align concurrency tracking with dynamic thread pool scaling. Workers count is now read from `Karafka::Server.workers.size` instead of the static `Karafka::App.config.concurrency`, so the Web UI accurately reflects runtime thread pool changes.
|
|
10
|
+
- [Enhancement] Track `poll_interval` (max.poll.interval.ms) per subscription group alongside `poll_age` to help users monitor how close they are to the polling timeout limit. Consumer schema version bumped to 1.7.0.
|
|
11
|
+
- [Enhancement] Replace token-based CSRF protection (`route_csrf` plugin) with header-based protection using `Sec-Fetch-Site` header (`sec_fetch_site_csrf` plugin). This eliminates the need for CSRF tokens by leveraging browser-enforced headers that cannot be forged from cross-origin requests. Modern browsers automatically include this header, providing simpler and more robust CSRF protection.
|
|
12
|
+
- [Enhancement] Include a short spec file hash in generated test topic names for traceability. Topic names now follow the `it-{hash}-{uuid}` format, making it easy to identify which test file created a given topic in Kafka logs.
|
|
13
|
+
- [Change] Require Roda `>= 3.100` (previously `~> 3.69`).
|
|
14
|
+
- [Fix] Accept (and ignore) a block in `Karafka::Web::Producer#__getobj__` to silence Ruby 3.4's `strict_unused_block` warning emitted via `SimpleDelegator#method_missing` on every delegated producer call.
|
|
15
|
+
- [Fix] Remove `cgi` as no longer needed.
|
|
16
|
+
- [Fix] Exclude `test/` directory from gem releases to reduce package size.
|
|
17
|
+
- [Fix] Update LinksValidator regexes to match the new `it-{hash}-{uuid}` test topic naming format, fixing test-order dependent failures in explorer controller specs.
|
|
18
|
+
- [Fix] Fix alerts formatting for the distribution view.
|
|
19
|
+
- [Fix] Fix 500 error in the Pro Explorer when a message payload parses as valid JSON but contains strings with invalid UTF-8 byte sequences. `JSON.pretty_generate` would raise `JSON::GeneratorError` outside of any error boundary and propagate as an unhandled 500. The pretty-print step is now wrapped in a dedicated `@safe_pretty_payload` SafeRunner; on failure the raw bytes are displayed alongside a deserialization warning.
|
|
20
|
+
- [Fix] Fix 500 error in the Pro Explorer message JSON export when a payload deserializes correctly but cannot be serialized back to JSON (for example when it contains strings with invalid UTF-8 byte sequences). The export endpoint now responds with 404 in such cases and the export action button is no longer rendered for such messages.
|
|
21
|
+
|
|
3
22
|
## 0.11.6 (2026-02-01)
|
|
4
23
|
- **[Feature]** Provide ability to pause/resume all partitions of a topic at once across all consumer processes via the Health Overview page (Pro). Topic-level commands are broadcast to all processes, and each process applies the command to partitions it owns within the specified consumer group. This simplifies bulk operations compared to pausing/resuming individual partitions one by one.
|
|
5
24
|
- [Enhancement] Optimize partition command tracker to use index-based lookup instead of iterating over 10,000 partitions during rebalance events. The tracker now maintains a partition index for O(n) lookups where n is the number of partitions with pending commands.
|
data/Gemfile
CHANGED
|
@@ -6,12 +6,13 @@ gemspec
|
|
|
6
6
|
|
|
7
7
|
group :test do
|
|
8
8
|
gem "byebug"
|
|
9
|
-
gem "factory_bot"
|
|
10
9
|
gem "fugit"
|
|
10
|
+
gem "mocha"
|
|
11
11
|
# Needed for links extraction for visits verification
|
|
12
12
|
gem "nokogiri"
|
|
13
13
|
gem "ostruct"
|
|
14
14
|
gem "rack-test"
|
|
15
|
-
gem "
|
|
15
|
+
gem "minitest"
|
|
16
16
|
gem "simplecov"
|
|
17
|
+
gem "warning"
|
|
17
18
|
end
|
data/Gemfile.lint
CHANGED
data/Gemfile.lint.lock
CHANGED
|
@@ -27,23 +27,14 @@ GEM
|
|
|
27
27
|
rubocop-ast (1.49.0)
|
|
28
28
|
parser (>= 3.3.7.2)
|
|
29
29
|
prism (~> 1.7)
|
|
30
|
-
rubocop-
|
|
30
|
+
rubocop-minitest (0.39.1)
|
|
31
31
|
lint_roller (~> 1.1)
|
|
32
|
-
rubocop (
|
|
33
|
-
|
|
34
|
-
lint_roller (~> 1.1)
|
|
35
|
-
rubocop (~> 1.72, >= 1.72.1)
|
|
32
|
+
rubocop (>= 1.75.0, < 2.0)
|
|
33
|
+
rubocop-ast (>= 1.38.0, < 2.0)
|
|
36
34
|
rubocop-performance (1.26.1)
|
|
37
35
|
lint_roller (~> 1.1)
|
|
38
36
|
rubocop (>= 1.75.0, < 2.0)
|
|
39
37
|
rubocop-ast (>= 1.47.1, < 2.0)
|
|
40
|
-
rubocop-rspec (3.9.0)
|
|
41
|
-
lint_roller (~> 1.1)
|
|
42
|
-
rubocop (~> 1.81)
|
|
43
|
-
rubocop-rspec_rails (2.32.0)
|
|
44
|
-
lint_roller (~> 1.1)
|
|
45
|
-
rubocop (~> 1.72, >= 1.72.1)
|
|
46
|
-
rubocop-rspec (~> 3.5)
|
|
47
38
|
rubocop-thread_safety (0.7.3)
|
|
48
39
|
lint_roller (~> 1.1)
|
|
49
40
|
rubocop (~> 1.72, >= 1.72.1)
|
|
@@ -58,15 +49,12 @@ GEM
|
|
|
58
49
|
standard-custom (1.0.2)
|
|
59
50
|
lint_roller (~> 1.0)
|
|
60
51
|
rubocop (~> 1.50)
|
|
52
|
+
standard-minitest (1.0.0)
|
|
53
|
+
lint_roller (~> 1.0)
|
|
54
|
+
rubocop-minitest
|
|
61
55
|
standard-performance (1.9.0)
|
|
62
56
|
lint_roller (~> 1.1)
|
|
63
57
|
rubocop-performance (~> 1.26.0)
|
|
64
|
-
standard-rspec (0.3.1)
|
|
65
|
-
lint_roller (>= 1.0)
|
|
66
|
-
rubocop-capybara (~> 2.22)
|
|
67
|
-
rubocop-factory_bot (~> 2.27)
|
|
68
|
-
rubocop-rspec (~> 3.5)
|
|
69
|
-
rubocop-rspec_rails (~> 2.31)
|
|
70
58
|
unicode-display_width (3.2.0)
|
|
71
59
|
unicode-emoji (~> 4.1)
|
|
72
60
|
unicode-emoji (4.2.0)
|
|
@@ -81,12 +69,12 @@ PLATFORMS
|
|
|
81
69
|
x86_64-linux
|
|
82
70
|
|
|
83
71
|
DEPENDENCIES
|
|
72
|
+
rubocop-minitest
|
|
84
73
|
rubocop-performance
|
|
85
|
-
rubocop-rspec
|
|
86
74
|
rubocop-thread_safety
|
|
87
75
|
standard
|
|
76
|
+
standard-minitest
|
|
88
77
|
standard-performance
|
|
89
|
-
standard-rspec
|
|
90
78
|
yard-lint
|
|
91
79
|
|
|
92
80
|
CHECKSUMS
|
|
@@ -102,17 +90,14 @@ CHECKSUMS
|
|
|
102
90
|
regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
|
|
103
91
|
rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
|
|
104
92
|
rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
|
|
105
|
-
rubocop-
|
|
106
|
-
rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
|
|
93
|
+
rubocop-minitest (0.39.1) sha256=998398d6da4026d297f0f9bf709a1eac5f2b6947c24431f94af08138510cf7ed
|
|
107
94
|
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
|
|
108
|
-
rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
|
|
109
|
-
rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100
|
|
110
95
|
rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431
|
|
111
96
|
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
|
|
112
97
|
standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c
|
|
113
98
|
standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
|
|
99
|
+
standard-minitest (1.0.0) sha256=450caa86a64a6e6f6f186cc88601dbb49b6cfaa3b0dce77a73b50ba8cdc15b2a
|
|
114
100
|
standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
|
|
115
|
-
standard-rspec (0.3.1) sha256=67bc957281cacf24f0d88235ca1bf28a8995265b1a60eb519cd0451858b56a22
|
|
116
101
|
unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
|
|
117
102
|
unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
|
|
118
103
|
yard (0.9.38) sha256=721fb82afb10532aa49860655f6cc2eaa7130889df291b052e1e6b268283010f
|
data/Gemfile.lock
CHANGED
|
@@ -1,95 +1,79 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
karafka-web (0.
|
|
4
|
+
karafka-web (1.0.0.beta1)
|
|
5
5
|
erubi (~> 1.4)
|
|
6
|
-
karafka (>= 2.5.
|
|
7
|
-
karafka-core (>= 2.5.0, < 2.
|
|
8
|
-
roda (
|
|
6
|
+
karafka (>= 2.5.10.rc1, < 2.7.0)
|
|
7
|
+
karafka-core (>= 2.5.0, < 2.7.0)
|
|
8
|
+
roda (>= 3.100, < 4.0)
|
|
9
9
|
tilt (~> 2.0)
|
|
10
10
|
|
|
11
11
|
GEM
|
|
12
12
|
remote: https://rubygems.org/
|
|
13
13
|
specs:
|
|
14
|
-
activesupport (8.1.1)
|
|
15
|
-
base64
|
|
16
|
-
bigdecimal
|
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.3.1)
|
|
18
|
-
connection_pool (>= 2.2.5)
|
|
19
|
-
drb
|
|
20
|
-
i18n (>= 1.6, < 2)
|
|
21
|
-
json
|
|
22
|
-
logger (>= 1.4.2)
|
|
23
|
-
minitest (>= 5.1)
|
|
24
|
-
securerandom (>= 0.3)
|
|
25
|
-
tzinfo (~> 2.0, >= 2.0.5)
|
|
26
|
-
uri (>= 0.13.1)
|
|
27
|
-
base64 (0.3.0)
|
|
28
|
-
bigdecimal (3.3.1)
|
|
29
14
|
byebug (13.0.0)
|
|
30
15
|
reline (>= 0.6.0)
|
|
31
|
-
concurrent-ruby (1.3.
|
|
32
|
-
connection_pool (2.5.4)
|
|
33
|
-
diff-lcs (1.6.2)
|
|
16
|
+
concurrent-ruby (1.3.6)
|
|
34
17
|
docile (1.4.1)
|
|
35
18
|
drb (2.2.3)
|
|
36
19
|
erubi (1.13.1)
|
|
37
20
|
et-orbi (1.4.0)
|
|
38
21
|
tzinfo
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
ffi (1.17.
|
|
42
|
-
ffi (1.17.
|
|
43
|
-
ffi (1.17.
|
|
44
|
-
ffi (1.17.
|
|
45
|
-
ffi (1.17.
|
|
46
|
-
ffi (1.17.
|
|
47
|
-
ffi (1.17.
|
|
48
|
-
ffi (1.17.
|
|
49
|
-
ffi (1.17.
|
|
50
|
-
|
|
51
|
-
ffi (1.17.2-x86_64-linux-musl)
|
|
52
|
-
fugit (1.12.1)
|
|
22
|
+
ffi (1.17.4)
|
|
23
|
+
ffi (1.17.4-aarch64-linux-gnu)
|
|
24
|
+
ffi (1.17.4-aarch64-linux-musl)
|
|
25
|
+
ffi (1.17.4-arm-linux-gnu)
|
|
26
|
+
ffi (1.17.4-arm-linux-musl)
|
|
27
|
+
ffi (1.17.4-arm64-darwin)
|
|
28
|
+
ffi (1.17.4-x86-linux-gnu)
|
|
29
|
+
ffi (1.17.4-x86-linux-musl)
|
|
30
|
+
ffi (1.17.4-x86_64-darwin)
|
|
31
|
+
ffi (1.17.4-x86_64-linux-gnu)
|
|
32
|
+
ffi (1.17.4-x86_64-linux-musl)
|
|
33
|
+
fugit (1.12.2)
|
|
53
34
|
et-orbi (~> 1.4)
|
|
54
35
|
raabro (~> 1.4)
|
|
55
|
-
i18n (1.14.7)
|
|
56
|
-
concurrent-ruby (~> 1.0)
|
|
57
36
|
io-console (0.8.2)
|
|
58
|
-
json (2.
|
|
59
|
-
karafka (2.5.
|
|
60
|
-
|
|
61
|
-
karafka-
|
|
62
|
-
|
|
63
|
-
waterdrop (>= 2.8.9, < 3.0.0)
|
|
37
|
+
json (2.19.7)
|
|
38
|
+
karafka (2.5.10.rc1)
|
|
39
|
+
karafka-core (>= 2.5.13, < 2.6.0)
|
|
40
|
+
karafka-rdkafka (>= 0.26.1)
|
|
41
|
+
waterdrop (>= 2.8.14, < 3.0.0)
|
|
64
42
|
zeitwerk (~> 2.3)
|
|
65
|
-
karafka-core (2.5.
|
|
43
|
+
karafka-core (2.5.13)
|
|
66
44
|
karafka-rdkafka (>= 0.20.0)
|
|
67
45
|
logger (>= 1.6.0)
|
|
68
|
-
karafka-rdkafka (0.
|
|
46
|
+
karafka-rdkafka (0.27.2)
|
|
69
47
|
ffi (~> 1.17.1)
|
|
70
48
|
json (> 2.0)
|
|
71
49
|
logger
|
|
72
50
|
mini_portile2 (~> 2.6)
|
|
73
51
|
rake (> 12)
|
|
74
|
-
karafka-rdkafka (0.
|
|
52
|
+
karafka-rdkafka (0.27.2-aarch64-linux-gnu)
|
|
75
53
|
ffi (~> 1.17.1)
|
|
76
54
|
json (> 2.0)
|
|
77
55
|
logger
|
|
78
56
|
mini_portile2 (~> 2.6)
|
|
79
57
|
rake (> 12)
|
|
80
|
-
karafka-rdkafka (0.
|
|
58
|
+
karafka-rdkafka (0.27.2-aarch64-linux-musl)
|
|
81
59
|
ffi (~> 1.17.1)
|
|
82
60
|
json (> 2.0)
|
|
83
61
|
logger
|
|
84
62
|
mini_portile2 (~> 2.6)
|
|
85
63
|
rake (> 12)
|
|
86
|
-
karafka-rdkafka (0.
|
|
64
|
+
karafka-rdkafka (0.27.2-arm64-darwin)
|
|
87
65
|
ffi (~> 1.17.1)
|
|
88
66
|
json (> 2.0)
|
|
89
67
|
logger
|
|
90
68
|
mini_portile2 (~> 2.6)
|
|
91
69
|
rake (> 12)
|
|
92
|
-
karafka-rdkafka (0.
|
|
70
|
+
karafka-rdkafka (0.27.2-x86_64-linux-gnu)
|
|
71
|
+
ffi (~> 1.17.1)
|
|
72
|
+
json (> 2.0)
|
|
73
|
+
logger
|
|
74
|
+
mini_portile2 (~> 2.6)
|
|
75
|
+
rake (> 12)
|
|
76
|
+
karafka-rdkafka (0.27.2-x86_64-linux-musl)
|
|
93
77
|
ffi (~> 1.17.1)
|
|
94
78
|
json (> 2.0)
|
|
95
79
|
logger
|
|
@@ -97,70 +81,62 @@ GEM
|
|
|
97
81
|
rake (> 12)
|
|
98
82
|
logger (1.7.0)
|
|
99
83
|
mini_portile2 (2.8.9)
|
|
100
|
-
minitest (
|
|
101
|
-
|
|
84
|
+
minitest (6.0.6)
|
|
85
|
+
drb (~> 2.0)
|
|
86
|
+
prism (~> 1.5)
|
|
87
|
+
mocha (3.1.0)
|
|
88
|
+
ruby2_keywords (>= 0.0.5)
|
|
89
|
+
nokogiri (1.19.3)
|
|
102
90
|
mini_portile2 (~> 2.8.2)
|
|
103
91
|
racc (~> 1.4)
|
|
104
|
-
nokogiri (1.19.
|
|
92
|
+
nokogiri (1.19.3-aarch64-linux-gnu)
|
|
105
93
|
racc (~> 1.4)
|
|
106
|
-
nokogiri (1.19.
|
|
94
|
+
nokogiri (1.19.3-aarch64-linux-musl)
|
|
107
95
|
racc (~> 1.4)
|
|
108
|
-
nokogiri (1.19.
|
|
96
|
+
nokogiri (1.19.3-arm-linux-gnu)
|
|
109
97
|
racc (~> 1.4)
|
|
110
|
-
nokogiri (1.19.
|
|
98
|
+
nokogiri (1.19.3-arm-linux-musl)
|
|
111
99
|
racc (~> 1.4)
|
|
112
|
-
nokogiri (1.19.
|
|
100
|
+
nokogiri (1.19.3-arm64-darwin)
|
|
113
101
|
racc (~> 1.4)
|
|
114
|
-
nokogiri (1.19.
|
|
102
|
+
nokogiri (1.19.3-x86_64-darwin)
|
|
115
103
|
racc (~> 1.4)
|
|
116
|
-
nokogiri (1.19.
|
|
104
|
+
nokogiri (1.19.3-x86_64-linux-gnu)
|
|
117
105
|
racc (~> 1.4)
|
|
118
|
-
nokogiri (1.19.
|
|
106
|
+
nokogiri (1.19.3-x86_64-linux-musl)
|
|
119
107
|
racc (~> 1.4)
|
|
120
108
|
ostruct (0.6.3)
|
|
109
|
+
prism (1.9.0)
|
|
121
110
|
raabro (1.4.0)
|
|
122
111
|
racc (1.8.1)
|
|
123
|
-
rack (3.2.
|
|
112
|
+
rack (3.2.6)
|
|
124
113
|
rack-test (2.2.0)
|
|
125
114
|
rack (>= 1.3)
|
|
126
115
|
rackup (0.2.3)
|
|
127
116
|
rack (>= 3.0.0.beta1)
|
|
128
117
|
webrick
|
|
129
|
-
rake (13.
|
|
118
|
+
rake (13.4.2)
|
|
130
119
|
reline (0.6.3)
|
|
131
120
|
io-console (~> 0.5)
|
|
132
|
-
roda (3.
|
|
121
|
+
roda (3.104.0)
|
|
133
122
|
rack
|
|
134
|
-
|
|
135
|
-
rspec-core (~> 3.13.0)
|
|
136
|
-
rspec-expectations (~> 3.13.0)
|
|
137
|
-
rspec-mocks (~> 3.13.0)
|
|
138
|
-
rspec-core (3.13.6)
|
|
139
|
-
rspec-support (~> 3.13.0)
|
|
140
|
-
rspec-expectations (3.13.5)
|
|
141
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
142
|
-
rspec-support (~> 3.13.0)
|
|
143
|
-
rspec-mocks (3.13.7)
|
|
144
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
145
|
-
rspec-support (~> 3.13.0)
|
|
146
|
-
rspec-support (3.13.6)
|
|
147
|
-
securerandom (0.4.1)
|
|
123
|
+
ruby2_keywords (0.0.5)
|
|
148
124
|
simplecov (0.22.0)
|
|
149
125
|
docile (~> 1.1)
|
|
150
126
|
simplecov-html (~> 0.11)
|
|
151
127
|
simplecov_json_formatter (~> 0.1)
|
|
152
128
|
simplecov-html (0.13.2)
|
|
153
129
|
simplecov_json_formatter (0.1.4)
|
|
154
|
-
tilt (2.
|
|
130
|
+
tilt (2.7.0)
|
|
155
131
|
tzinfo (2.0.6)
|
|
156
132
|
concurrent-ruby (~> 1.0)
|
|
157
|
-
|
|
158
|
-
waterdrop (2.
|
|
159
|
-
karafka-core (>= 2.
|
|
160
|
-
karafka-rdkafka (>= 0.
|
|
133
|
+
warning (1.6.0)
|
|
134
|
+
waterdrop (2.10.1)
|
|
135
|
+
karafka-core (>= 2.5.12, < 3.0.0)
|
|
136
|
+
karafka-rdkafka (>= 0.24.0)
|
|
161
137
|
zeitwerk (~> 2.3)
|
|
162
|
-
webrick (1.9.
|
|
163
|
-
zeitwerk (2.
|
|
138
|
+
webrick (1.9.2)
|
|
139
|
+
zeitwerk (2.8.2)
|
|
164
140
|
|
|
165
141
|
PLATFORMS
|
|
166
142
|
aarch64-linux-gnu
|
|
@@ -177,15 +153,16 @@ PLATFORMS
|
|
|
177
153
|
|
|
178
154
|
DEPENDENCIES
|
|
179
155
|
byebug
|
|
180
|
-
factory_bot
|
|
181
156
|
fugit
|
|
182
157
|
karafka-web!
|
|
158
|
+
minitest
|
|
159
|
+
mocha
|
|
183
160
|
nokogiri
|
|
184
161
|
ostruct
|
|
185
162
|
rack-test
|
|
186
163
|
rackup (~> 0.2)
|
|
187
|
-
rspec
|
|
188
164
|
simplecov
|
|
165
|
+
warning
|
|
189
166
|
|
|
190
167
|
BUNDLED WITH
|
|
191
|
-
|
|
168
|
+
4.0.12
|
data/Rakefile
CHANGED
|
@@ -2,3 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
require "bundler/setup"
|
|
4
4
|
require "bundler/gem_tasks"
|
|
5
|
+
require "minitest/test_task"
|
|
6
|
+
|
|
7
|
+
specs_type = ENV.fetch("SPECS_TYPE", "regular")
|
|
8
|
+
|
|
9
|
+
Minitest::TestTask.create(:test) do |t|
|
|
10
|
+
t.libs << "test"
|
|
11
|
+
t.libs << "lib"
|
|
12
|
+
t.test_prelude = 'require "test_helper"; require "minitest/autorun"'
|
|
13
|
+
|
|
14
|
+
t.test_globs = if specs_type == "pro"
|
|
15
|
+
["test/lib/karafka/web/pro/**/*_test.rb"]
|
|
16
|
+
else
|
|
17
|
+
# Exclude pro tests from regular test runs
|
|
18
|
+
[
|
|
19
|
+
"test/lib/karafka/web/*_test.rb",
|
|
20
|
+
"test/lib/karafka/web/cli/**/*_test.rb",
|
|
21
|
+
"test/lib/karafka/web/contracts/**/*_test.rb",
|
|
22
|
+
"test/lib/karafka/web/management/**/*_test.rb",
|
|
23
|
+
"test/lib/karafka/web/processing/**/*_test.rb",
|
|
24
|
+
"test/lib/karafka/web/tracking/**/*_test.rb",
|
|
25
|
+
"test/lib/karafka/web/ui/**/*_test.rb"
|
|
26
|
+
]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
task default: :test
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
-
# Balances
|
|
4
|
+
# Balances test files across N workers using timing data
|
|
5
5
|
# Uses greedy bin-packing: assign each file to worker with lowest total time
|
|
6
6
|
#
|
|
7
|
-
# Usage: bin/
|
|
7
|
+
# Usage: bin/balance_tests <regular|pro> <num_workers>
|
|
8
8
|
#
|
|
9
|
-
# Output: JSON array of arrays where each inner array contains the
|
|
9
|
+
# Output: JSON array of arrays where each inner array contains the test files
|
|
10
10
|
# assigned to that worker
|
|
11
11
|
#
|
|
12
12
|
# Example:
|
|
13
|
-
# bin/
|
|
14
|
-
# [["
|
|
13
|
+
# bin/balance_tests regular 4
|
|
14
|
+
# [["test/a.rb","test/d.rb"],["test/b.rb"],["test/c.rb"],["test/e.rb"]]
|
|
15
15
|
|
|
16
16
|
require 'json'
|
|
17
17
|
|
|
18
|
-
TIMINGS_DIR = File.expand_path('../
|
|
18
|
+
TIMINGS_DIR = File.expand_path('../test/timings', __dir__)
|
|
19
19
|
DEFAULT_TIME = 1.0 # Default time for files not in timing data
|
|
20
20
|
|
|
21
|
-
# Loads timing data from a JSON file for the given
|
|
21
|
+
# Loads timing data from a JSON file for the given test type
|
|
22
22
|
#
|
|
23
|
-
# @param
|
|
23
|
+
# @param tests_type [String] the type of tests ('regular' or 'pro')
|
|
24
24
|
# @return [Hash<String, Float>] hash mapping file paths to execution times in seconds
|
|
25
|
-
def load_timings(
|
|
26
|
-
file_path = File.join(TIMINGS_DIR, "#{
|
|
25
|
+
def load_timings(tests_type)
|
|
26
|
+
file_path = File.join(TIMINGS_DIR, "#{tests_type}.json")
|
|
27
27
|
|
|
28
28
|
if File.exist?(file_path)
|
|
29
29
|
JSON.parse(File.read(file_path))
|
|
@@ -32,37 +32,37 @@ def load_timings(specs_type)
|
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
# Returns a sorted list of
|
|
35
|
+
# Returns a sorted list of test files for the given test type
|
|
36
36
|
#
|
|
37
|
-
# @param
|
|
38
|
-
# @return [Array<String>] sorted array of
|
|
39
|
-
def
|
|
40
|
-
|
|
37
|
+
# @param tests_type [String] the type of tests ('regular' or 'pro')
|
|
38
|
+
# @return [Array<String>] sorted array of test file paths
|
|
39
|
+
def get_test_files(tests_type)
|
|
40
|
+
all_tests = Dir.glob('test/lib/karafka/web/**/*_test.rb').sort
|
|
41
41
|
|
|
42
|
-
case
|
|
42
|
+
case tests_type
|
|
43
43
|
when 'pro'
|
|
44
|
-
|
|
44
|
+
all_tests.select { |f| f.include?('/pro/') }
|
|
45
45
|
when 'regular'
|
|
46
|
-
|
|
46
|
+
all_tests.reject { |f| f.include?('/pro/') }
|
|
47
47
|
else
|
|
48
|
-
warn "Unknown
|
|
48
|
+
warn "Unknown tests type: #{tests_type}"
|
|
49
49
|
exit 1
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
# Balances
|
|
53
|
+
# Balances test files across workers using greedy bin-packing algorithm
|
|
54
54
|
#
|
|
55
55
|
# Files are sorted by execution time (descending) and each file is assigned
|
|
56
56
|
# to the worker with the lowest total time. This minimizes the imbalance
|
|
57
57
|
# between the slowest and fastest workers.
|
|
58
58
|
#
|
|
59
|
-
# @param files [Array<String>] list of
|
|
59
|
+
# @param files [Array<String>] list of test file paths to balance
|
|
60
60
|
# @param timings [Hash<String, Float>] hash mapping file paths to execution times
|
|
61
61
|
# @param num_workers [Integer] number of workers to distribute files across
|
|
62
62
|
# @return [Array<Hash>] array of worker hashes, each with :files and :total_time keys
|
|
63
63
|
def balance_files(files, timings, num_workers)
|
|
64
64
|
# Get timing for each file, using default if not found
|
|
65
|
-
# Handle both "./
|
|
65
|
+
# Handle both "./test/..." and "test/..." path formats
|
|
66
66
|
files_with_times = files.map do |file|
|
|
67
67
|
time = timings[file] || timings["./#{file}"] || DEFAULT_TIME
|
|
68
68
|
[file, time]
|
|
@@ -101,16 +101,16 @@ def print_balance_info(workers)
|
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
# Main
|
|
104
|
-
|
|
104
|
+
tests_type = ARGV[0]
|
|
105
105
|
num_workers = (ARGV[1] || '4').to_i
|
|
106
106
|
|
|
107
|
-
unless
|
|
108
|
-
warn "Usage: bin/
|
|
107
|
+
unless tests_type
|
|
108
|
+
warn "Usage: bin/balance_tests <regular|pro> <num_workers>"
|
|
109
109
|
exit 1
|
|
110
110
|
end
|
|
111
111
|
|
|
112
|
-
timings = load_timings(
|
|
113
|
-
files =
|
|
112
|
+
timings = load_timings(tests_type)
|
|
113
|
+
files = get_test_files(tests_type)
|
|
114
114
|
workers = balance_files(files, timings, num_workers)
|
|
115
115
|
|
|
116
116
|
# Print balance info to stderr
|
data/bin/check_coverage
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
|
|
3
|
-
# Collates SimpleCov results from parallel
|
|
3
|
+
# Collates SimpleCov results from parallel test runs and checks minimum coverage
|
|
4
4
|
#
|
|
5
|
-
# This script should be run after bin/
|
|
5
|
+
# This script should be run after bin/tests_parallel to verify
|
|
6
6
|
# code coverage meets the minimum threshold.
|
|
7
7
|
#
|
|
8
|
-
# Coverage thresholds are defined in
|
|
8
|
+
# Coverage thresholds are defined in test/support/coverage_config.rb
|
|
9
9
|
|
|
10
10
|
set -e
|
|
11
11
|
|
|
@@ -13,10 +13,10 @@ echo "Collating SimpleCov coverage results..."
|
|
|
13
13
|
|
|
14
14
|
bundle exec ruby -e "
|
|
15
15
|
require 'simplecov'
|
|
16
|
-
require_relative '
|
|
16
|
+
require_relative 'test/support/coverage_config'
|
|
17
17
|
|
|
18
18
|
SimpleCov.collate Dir['coverage/.resultset.json'], 'rails' do
|
|
19
|
-
add_filter '/
|
|
19
|
+
add_filter '/test/'
|
|
20
20
|
add_filter '/vendor/'
|
|
21
21
|
add_filter '/gems/'
|
|
22
22
|
add_filter '/.bundle/'
|