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
|
@@ -66,21 +66,21 @@ module Karafka
|
|
|
66
66
|
def current_search
|
|
67
67
|
return @current_search if @current_search
|
|
68
68
|
|
|
69
|
-
search = @request_params[
|
|
69
|
+
search = @request_params["search"]
|
|
70
70
|
|
|
71
71
|
@current_search = search.is_a?(Hash) ? search : {}
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
# @return [String] sort query value
|
|
75
75
|
def current_sort
|
|
76
|
-
@current_sort ||= @request_params[
|
|
76
|
+
@current_sort ||= @request_params["sort"].to_s.downcase
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
# @return [Integer] current page for paginated views
|
|
80
80
|
# @note It does basic sanitization
|
|
81
81
|
def current_page
|
|
82
82
|
@current_page ||= begin
|
|
83
|
-
page = @request_params[
|
|
83
|
+
page = @request_params["page"].to_i
|
|
84
84
|
|
|
85
85
|
page.positive? ? page : 1
|
|
86
86
|
end
|
|
@@ -88,7 +88,7 @@ module Karafka
|
|
|
88
88
|
|
|
89
89
|
# @return [String] Range type for charts we want to fetch
|
|
90
90
|
def current_range
|
|
91
|
-
candidate = @request_params.fetch(
|
|
91
|
+
candidate = @request_params.fetch("range", "seconds")
|
|
92
92
|
candidate = ALLOWED_RANGES.first unless ALLOWED_RANGES.include?(candidate)
|
|
93
93
|
candidate.to_sym
|
|
94
94
|
end
|
|
@@ -98,14 +98,14 @@ module Karafka
|
|
|
98
98
|
# is provided, we go with the high offset first page approach
|
|
99
99
|
def current_offset
|
|
100
100
|
@current_offset ||= begin
|
|
101
|
-
offset = @request_params.fetch(
|
|
101
|
+
offset = @request_params.fetch("offset", -1).to_i
|
|
102
102
|
[offset, -1].max
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
# @return [Integer] currently selected partition or -1 if nothing provided
|
|
107
107
|
def current_partition
|
|
108
|
-
@current_partition ||= @request_params.fetch(
|
|
108
|
+
@current_partition ||= @request_params.fetch("partition", -1).to_i
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
111
|
end
|
|
@@ -11,22 +11,22 @@ module Karafka
|
|
|
11
11
|
# Default attribute names mapped from the attributes themselves
|
|
12
12
|
# It makes it easier as we do not have to declare those all the time
|
|
13
13
|
SORT_NAMES = {
|
|
14
|
-
id:
|
|
15
|
-
partition_id:
|
|
16
|
-
memory_usage:
|
|
17
|
-
started_at:
|
|
18
|
-
committed_offset:
|
|
19
|
-
last_offset:
|
|
20
|
-
first_offset:
|
|
21
|
-
lo_offset:
|
|
22
|
-
hi_offset:
|
|
23
|
-
ls_offset:
|
|
24
|
-
lag_hybrid:
|
|
25
|
-
lag_stored:
|
|
26
|
-
stored_offset:
|
|
27
|
-
fetch_state:
|
|
28
|
-
poll_state:
|
|
29
|
-
lso_risk_state:
|
|
14
|
+
id: "ID",
|
|
15
|
+
partition_id: "Partition",
|
|
16
|
+
memory_usage: "RSS",
|
|
17
|
+
started_at: "Started",
|
|
18
|
+
committed_offset: "Committed",
|
|
19
|
+
last_offset: "Last",
|
|
20
|
+
first_offset: "First",
|
|
21
|
+
lo_offset: "Low",
|
|
22
|
+
hi_offset: "High",
|
|
23
|
+
ls_offset: "LSO",
|
|
24
|
+
lag_hybrid: "Lag",
|
|
25
|
+
lag_stored: "Stored",
|
|
26
|
+
stored_offset: "Stored",
|
|
27
|
+
fetch_state: "Fetch",
|
|
28
|
+
poll_state: "Poll",
|
|
29
|
+
lso_risk_state: "LSO"
|
|
30
30
|
}.freeze
|
|
31
31
|
|
|
32
32
|
private_constant :SORT_NAMES
|
|
@@ -36,8 +36,8 @@ module Karafka
|
|
|
36
36
|
def nav_class(location)
|
|
37
37
|
comparator, value = location.to_a.first
|
|
38
38
|
|
|
39
|
-
local_location = request.path.gsub(env.fetch(
|
|
40
|
-
local_location.public_send(:"#{comparator}?", value) ?
|
|
39
|
+
local_location = request.path.gsub(env.fetch("SCRIPT_NAME"), "")
|
|
40
|
+
local_location.public_send(:"#{comparator}?", value) ? "active" : ""
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
# Converts object into a string and for objects that would anyhow return their
|
|
@@ -47,7 +47,7 @@ module Karafka
|
|
|
47
47
|
# @param object [Object]
|
|
48
48
|
# @return [String]
|
|
49
49
|
def object_value_to_s(object)
|
|
50
|
-
object.to_s.include?(
|
|
50
|
+
object.to_s.include?("#<") ? object.class.to_s : object.to_s
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
# Takes a status and recommends background style color
|
|
@@ -56,14 +56,14 @@ module Karafka
|
|
|
56
56
|
# @return [String] background style
|
|
57
57
|
def status_badge(status)
|
|
58
58
|
case status
|
|
59
|
-
when
|
|
60
|
-
when
|
|
61
|
-
when
|
|
62
|
-
when
|
|
63
|
-
when
|
|
64
|
-
when
|
|
65
|
-
when
|
|
66
|
-
when
|
|
59
|
+
when "initialized" then "badge-success"
|
|
60
|
+
when "supervising" then "badge-success"
|
|
61
|
+
when "running" then "badge-success"
|
|
62
|
+
when "quieting" then "badge-warning"
|
|
63
|
+
when "quiet" then "badge-warning"
|
|
64
|
+
when "stopping" then "badge-warning"
|
|
65
|
+
when "stopped" then "badge-error"
|
|
66
|
+
when "terminated" then "badge-error"
|
|
67
67
|
else
|
|
68
68
|
raise ::Karafka::Errors::UnsupportedCaseError, status
|
|
69
69
|
end
|
|
@@ -74,9 +74,9 @@ module Karafka
|
|
|
74
74
|
# @param trend [Numeric] lag trend
|
|
75
75
|
# @return [String] bg classes
|
|
76
76
|
def lag_trend_badge(trend)
|
|
77
|
-
bg =
|
|
78
|
-
bg ||=
|
|
79
|
-
bg ||=
|
|
77
|
+
bg = "badge-success" if trend.negative?
|
|
78
|
+
bg ||= "badge-warning" if trend.positive?
|
|
79
|
+
bg ||= "badge-secondary"
|
|
80
80
|
bg
|
|
81
81
|
end
|
|
82
82
|
|
|
@@ -87,7 +87,7 @@ module Karafka
|
|
|
87
87
|
def tags(tags_array)
|
|
88
88
|
tags_array
|
|
89
89
|
.map { |tag| %(<span class="badge badge-info">#{tag}</span>) }
|
|
90
|
-
.join(
|
|
90
|
+
.join(" ")
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
# Takes a kafka report state and recommends background style color
|
|
@@ -95,18 +95,18 @@ module Karafka
|
|
|
95
95
|
# @return [String] background style
|
|
96
96
|
def kafka_state_badge(state)
|
|
97
97
|
case state
|
|
98
|
-
when
|
|
99
|
-
when
|
|
100
|
-
when
|
|
98
|
+
when "up" then "badge-success"
|
|
99
|
+
when "active" then "badge-success"
|
|
100
|
+
when "steady" then "badge-success"
|
|
101
101
|
else
|
|
102
|
-
|
|
102
|
+
"badge-warning"
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
# @param mem_kb [Integer] memory used in KB
|
|
107
107
|
# @return [String] formatted memory usage
|
|
108
108
|
def format_memory(mem_kb)
|
|
109
|
-
return
|
|
109
|
+
return "0" if !mem_kb || mem_kb.zero?
|
|
110
110
|
|
|
111
111
|
if mem_kb < 10_240
|
|
112
112
|
"#{number_with_delimiter(mem_kb.round(4))} KB"
|
|
@@ -121,12 +121,12 @@ module Karafka
|
|
|
121
121
|
# @param number [Numeric]
|
|
122
122
|
# @param delimiter [String] delimiter (comma by default)
|
|
123
123
|
# @return [String] number with delimiter
|
|
124
|
-
def number_with_delimiter(number, delimiter =
|
|
125
|
-
return
|
|
124
|
+
def number_with_delimiter(number, delimiter = ",")
|
|
125
|
+
return "" unless number
|
|
126
126
|
|
|
127
|
-
parts = number.to_s.to_str.split(
|
|
127
|
+
parts = number.to_s.to_str.split(".")
|
|
128
128
|
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
|
|
129
|
-
parts.join(
|
|
129
|
+
parts.join(".")
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
# @param lag [Integer] lag
|
|
@@ -134,7 +134,7 @@ module Karafka
|
|
|
134
134
|
# @see #offset_with_label
|
|
135
135
|
def lag_with_label(lag)
|
|
136
136
|
if lag.negative?
|
|
137
|
-
title =
|
|
137
|
+
title = "Not available until first offset commit"
|
|
138
138
|
%(<span class="badge badge-secondary" title="#{title}">N/A</span>)
|
|
139
139
|
else
|
|
140
140
|
lag.to_s
|
|
@@ -150,7 +150,7 @@ module Karafka
|
|
|
150
150
|
# yet committed and there is no value we know of
|
|
151
151
|
def offset_with_label(topic_name, partition_id, offset, explore: false)
|
|
152
152
|
if offset.negative?
|
|
153
|
-
title =
|
|
153
|
+
title = "Not available until first offset commit"
|
|
154
154
|
%(<span class="badge badge-secondary" title="#{title}">N/A</span>)
|
|
155
155
|
elsif explore
|
|
156
156
|
path = explorer_topics_path(topic_name, partition_id, offset)
|
|
@@ -166,7 +166,7 @@ module Karafka
|
|
|
166
166
|
# @param value [Integer]
|
|
167
167
|
# @return [String] input value if not negative or N/A
|
|
168
168
|
def normalized_metric(value)
|
|
169
|
-
value.negative? ?
|
|
169
|
+
value.negative? ? "N/A" : value.to_s
|
|
170
170
|
end
|
|
171
171
|
|
|
172
172
|
# @param details [::Karafka::Web::Ui::Models::Partition] partition information with
|
|
@@ -175,11 +175,11 @@ module Karafka
|
|
|
175
175
|
def lso_risk_state_bg(details)
|
|
176
176
|
case details.lso_risk_state
|
|
177
177
|
when :active
|
|
178
|
-
|
|
178
|
+
""
|
|
179
179
|
when :at_risk
|
|
180
|
-
|
|
180
|
+
"bg-warning bg-opacity-25"
|
|
181
181
|
when :stopped
|
|
182
|
-
|
|
182
|
+
"bg-error bg-opacity-25"
|
|
183
183
|
else
|
|
184
184
|
raise ::Karafka::Errors::UnsupportedCaseError
|
|
185
185
|
end
|
|
@@ -191,11 +191,11 @@ module Karafka
|
|
|
191
191
|
def lso_risk_state_badge(details)
|
|
192
192
|
case details.lso_risk_state
|
|
193
193
|
when :active
|
|
194
|
-
|
|
194
|
+
""
|
|
195
195
|
when :at_risk
|
|
196
|
-
|
|
196
|
+
"badge-warning"
|
|
197
197
|
when :stopped
|
|
198
|
-
|
|
198
|
+
"badge-error"
|
|
199
199
|
else
|
|
200
200
|
raise ::Karafka::Errors::UnsupportedCaseError
|
|
201
201
|
end
|
|
@@ -245,15 +245,15 @@ module Karafka
|
|
|
245
245
|
if SORT_NAMES[attribute]
|
|
246
246
|
name = SORT_NAMES[attribute]
|
|
247
247
|
else
|
|
248
|
-
name = attribute.to_s.tr(
|
|
248
|
+
name = attribute.to_s.tr("_", " ").tr("?", "")
|
|
249
249
|
# Always capitalize the name
|
|
250
|
-
name = name.split.map(&:capitalize).join(
|
|
250
|
+
name = name.split.map(&:capitalize).join(" ")
|
|
251
251
|
end
|
|
252
252
|
end
|
|
253
253
|
|
|
254
|
-
arrow_both =
|
|
255
|
-
arrow_down =
|
|
256
|
-
arrow_up =
|
|
254
|
+
arrow_both = "⇕"
|
|
255
|
+
arrow_down = "▾"
|
|
256
|
+
arrow_up = "▴"
|
|
257
257
|
|
|
258
258
|
desc = "#{attribute} desc"
|
|
259
259
|
asc = "#{attribute} asc"
|
|
@@ -286,7 +286,7 @@ module Karafka
|
|
|
286
286
|
# @param omission [String] truncation omission
|
|
287
287
|
# @param strategy [Symbol] `:default` or `:middle` how should we truncate
|
|
288
288
|
# @return [String] HTML span tag with truncated content and full content title
|
|
289
|
-
def truncate(string, length: 50, omission:
|
|
289
|
+
def truncate(string, length: 50, omission: "...", strategy: :default)
|
|
290
290
|
return string if string.length <= length
|
|
291
291
|
|
|
292
292
|
case strategy
|
|
@@ -321,10 +321,10 @@ module Karafka
|
|
|
321
321
|
tv = merged_hash[k]
|
|
322
322
|
|
|
323
323
|
merged_hash[k] = if tv.is_a?(Hash) && v.is_a?(Hash)
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
324
|
+
deep_merge(tv, v)
|
|
325
|
+
else
|
|
326
|
+
v
|
|
327
|
+
end
|
|
328
328
|
end
|
|
329
329
|
|
|
330
330
|
merged_hash
|
|
@@ -48,7 +48,7 @@ module Karafka
|
|
|
48
48
|
# mounted in a sub-path and we need to make sure our all paths are relative to "our"
|
|
49
49
|
# root, not the root of the app in which it was mounted.
|
|
50
50
|
def root_path(*args)
|
|
51
|
-
"#{env.fetch(
|
|
51
|
+
"#{env.fetch("SCRIPT_NAME")}/#{args.join("/")}"
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
# Generates a full path to any asset with our web-ui version. We ship all assets with
|
|
@@ -66,7 +66,7 @@ module Karafka
|
|
|
66
66
|
# @param args [Array<String>] sub-paths
|
|
67
67
|
# @return [String] path to the expected location
|
|
68
68
|
def explorer_path(*args)
|
|
69
|
-
root_path(*[
|
|
69
|
+
root_path(*["explorer", args.compact].flatten)
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
# Generates routes for explorer topics paths
|
|
@@ -74,7 +74,7 @@ module Karafka
|
|
|
74
74
|
# @param args [Array<String>] sub-paths
|
|
75
75
|
# @return explorer topics path
|
|
76
76
|
def explorer_topics_path(*args)
|
|
77
|
-
explorer_path(*[
|
|
77
|
+
explorer_path(*["topics", args.compact].flatten)
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
# Generates routes for explorer messages paths
|
|
@@ -82,21 +82,21 @@ module Karafka
|
|
|
82
82
|
# @param args [Array<String>] sub-paths
|
|
83
83
|
# @return [String] explorer messages path
|
|
84
84
|
def explorer_messages_path(*args)
|
|
85
|
-
explorer_path(*[
|
|
85
|
+
explorer_path(*["messages", args.compact].flatten)
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
# Helps build topics paths
|
|
89
89
|
#
|
|
90
90
|
# @return [String] topics scope path
|
|
91
91
|
def topics_path(*)
|
|
92
|
-
root_path(
|
|
92
|
+
root_path("topics", *)
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
# Helps build consumers paths
|
|
96
96
|
#
|
|
97
97
|
# @return [String] consumers scope path
|
|
98
98
|
def consumers_path(*)
|
|
99
|
-
root_path(
|
|
99
|
+
root_path("consumers", *)
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
# Helps build per-consumer scope paths
|
|
@@ -121,7 +121,15 @@ module Karafka
|
|
|
121
121
|
action = nil
|
|
122
122
|
)
|
|
123
123
|
root_path(
|
|
124
|
-
*[
|
|
124
|
+
*[
|
|
125
|
+
"scheduled_messages",
|
|
126
|
+
"explorer",
|
|
127
|
+
"topics",
|
|
128
|
+
topic_name,
|
|
129
|
+
partition_id,
|
|
130
|
+
offset,
|
|
131
|
+
action
|
|
132
|
+
].compact
|
|
125
133
|
)
|
|
126
134
|
end
|
|
127
135
|
end
|
|
@@ -26,7 +26,7 @@ module Karafka
|
|
|
26
26
|
# @param content [String] badge content
|
|
27
27
|
# @param classes [String] extra css classes
|
|
28
28
|
# @return [String] badge html
|
|
29
|
-
def badge(content, classes:
|
|
29
|
+
def badge(content, classes: "")
|
|
30
30
|
%(<span class="badge #{classes}">#{content}</span>)
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -36,26 +36,26 @@ module Karafka
|
|
|
36
36
|
# @param classes [String] extra css classes
|
|
37
37
|
# @param title [String, nil] title (if any)
|
|
38
38
|
# @return [String] button link html
|
|
39
|
-
def link_button(name, path, classes:
|
|
39
|
+
def link_button(name, path, classes: "", title: nil)
|
|
40
40
|
%(<a href="#{path}" class="btn #{classes}" title="#{title}">#{name}</a>)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
# Defines various methods for badges and links that simplify defining them without
|
|
44
44
|
# having to provide whole classes scopes always.
|
|
45
45
|
TYPES.each do |type|
|
|
46
|
-
define_method :"badge_#{type}" do |content, classes:
|
|
46
|
+
define_method :"badge_#{type}" do |content, classes: ""|
|
|
47
47
|
badge(content, classes: "#{classes} badge-#{type}")
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
define_method :"badge_#{type}_sm" do |content, classes:
|
|
50
|
+
define_method :"badge_#{type}_sm" do |content, classes: ""|
|
|
51
51
|
badge(content, classes: "#{classes} badge-#{type} badge-sm")
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
define_method :"link_button_#{type}" do |name, path, classes:
|
|
54
|
+
define_method :"link_button_#{type}" do |name, path, classes: ""|
|
|
55
55
|
link_button(name, path, classes: "#{classes} btn-#{type}")
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
define_method :"link_button_#{type}_sm" do |name, path, classes:
|
|
58
|
+
define_method :"link_button_#{type}_sm" do |name, path, classes: "", title: nil|
|
|
59
59
|
link_button(name, path, classes: "#{classes} btn-#{type} btn-sm", title: title)
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -59,9 +59,9 @@ module Karafka
|
|
|
59
59
|
# Apply limit if specified and partitions exceed it
|
|
60
60
|
elsif limit && sorted_partitions.size > limit
|
|
61
61
|
displayed_partitions = sorted_partitions.first(limit)
|
|
62
|
-
"#{topic}-[#{displayed_partitions.join(
|
|
62
|
+
"#{topic}-[#{displayed_partitions.join(",")}...]"
|
|
63
63
|
else
|
|
64
|
-
"#{topic}-[#{sorted_partitions.join(
|
|
64
|
+
"#{topic}-[#{sorted_partitions.join(",")}]"
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
end
|
|
@@ -97,9 +97,9 @@ module Karafka
|
|
|
97
97
|
elsif sorted_partitions.size > limit
|
|
98
98
|
displayed = sorted_partitions.first(limit)
|
|
99
99
|
remaining = sorted_partitions.size - limit
|
|
100
|
-
"#{topic}-[#{displayed.join(
|
|
100
|
+
"#{topic}-[#{displayed.join(",")}] (+#{remaining} more)"
|
|
101
101
|
else
|
|
102
|
-
"#{topic}-[#{sorted_partitions.join(
|
|
102
|
+
"#{topic}-[#{sorted_partitions.join(",")}]"
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
|
|
@@ -24,8 +24,8 @@ module Karafka
|
|
|
24
24
|
# @param name [String, Symbol] topic name
|
|
25
25
|
# @param partition [Integer] partition
|
|
26
26
|
# @param count [Integer] how many messages we want to get at most
|
|
27
|
-
# @param start_offset [Integer, Time] offset from which we should start. If -1 is
|
|
28
|
-
# (default) we will start from the latest offset. If time is provided, the
|
|
27
|
+
# @param start_offset [Integer, Time] offset from which we should start. If -1 is
|
|
28
|
+
# provided (default) we will start from the latest offset. If time is provided, the
|
|
29
29
|
# offset will be resolved. If negative beyond -1 is provided, we move backwards more.
|
|
30
30
|
# @param settings [Hash] kafka extra settings (optional)
|
|
31
31
|
#
|
|
@@ -17,41 +17,41 @@ module Karafka
|
|
|
17
17
|
|
|
18
18
|
# @return [Boolean] Should we show pagination at all
|
|
19
19
|
def paginate?
|
|
20
|
-
raise NotImplementedError,
|
|
20
|
+
raise NotImplementedError, "Implement in a subclass"
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# @return [Boolean] Should first offset link be active. If false, the first offset link
|
|
24
24
|
# will be disabled
|
|
25
25
|
def first_offset?
|
|
26
|
-
raise NotImplementedError,
|
|
26
|
+
raise NotImplementedError, "Implement in a subclass"
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# @return [String] first offset url value
|
|
30
30
|
def first_offset
|
|
31
|
-
raise NotImplementedError,
|
|
31
|
+
raise NotImplementedError, "Implement in a subclass"
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
# @return [Boolean] Should previous offset link be active. If false, the previous
|
|
35
35
|
# offset link will be disabled
|
|
36
36
|
def previous_offset?
|
|
37
|
-
raise NotImplementedError,
|
|
37
|
+
raise NotImplementedError, "Implement in a subclass"
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
# @return [Boolean] Should we show current offset. If false, the current offset link
|
|
41
41
|
# will not be visible at all. Useful for non-linear pagination.
|
|
42
42
|
def current_offset?
|
|
43
|
-
raise NotImplementedError,
|
|
43
|
+
raise NotImplementedError, "Implement in a subclass"
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
# @return [Boolean] Should we show next offset pagination. If false, next offset link
|
|
47
47
|
# will be disabled.
|
|
48
48
|
def next_offset?
|
|
49
|
-
raise NotImplementedError,
|
|
49
|
+
raise NotImplementedError, "Implement in a subclass"
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
# @return [String] the url offset key
|
|
53
53
|
def offset_key
|
|
54
|
-
raise NotImplementedError,
|
|
54
|
+
raise NotImplementedError, "Implement in a subclass"
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
end
|
|
@@ -80,12 +80,12 @@ module Karafka
|
|
|
80
80
|
def current_label
|
|
81
81
|
first = @visible_offsets.first
|
|
82
82
|
last = @visible_offsets.last
|
|
83
|
-
[first, last].compact.uniq.join(
|
|
83
|
+
[first, last].compact.uniq.join(" - ").to_s
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
# @return [String] for offset based pagination we use the offset param name
|
|
87
87
|
def offset_key
|
|
88
|
-
|
|
88
|
+
"offset"
|
|
89
89
|
end
|
|
90
90
|
end
|
|
91
91
|
end
|
|
@@ -13,9 +13,9 @@ module Karafka
|
|
|
13
13
|
class << self
|
|
14
14
|
# @param array [Array] array we want to paginate
|
|
15
15
|
# @param current_page [Integer] page we want to be on
|
|
16
|
-
# @return [Array<Array, Boolean>] Array with two elements: first is the array
|
|
17
|
-
# data of the given page and second is a boolean flag with info if the
|
|
18
|
-
# are from the last page
|
|
16
|
+
# @return [Array<Array, Boolean>] Array with two elements: first is the array
|
|
17
|
+
# with data of the given page and second is a boolean flag with info if the
|
|
18
|
+
# elements we got are from the last page
|
|
19
19
|
def call(array, current_page)
|
|
20
20
|
slices = array.each_slice(per_page).to_a
|
|
21
21
|
current_data = slices[current_page - 1] || []
|
|
@@ -30,7 +30,7 @@ module Karafka
|
|
|
30
30
|
# Normalize the key since we do not operate on capitalized values
|
|
31
31
|
@field = field.to_s.downcase
|
|
32
32
|
|
|
33
|
-
@field =
|
|
33
|
+
@field = "" unless allowed_attributes.include?(@field)
|
|
34
34
|
|
|
35
35
|
# Things we have already seen and sorted. Prevents crashing on the circular
|
|
36
36
|
# dependencies sorting when same resources are present in different parts of the tree
|
|
@@ -135,7 +135,7 @@ module Karafka
|
|
|
135
135
|
|
|
136
136
|
# @return [Boolean] true if we sort in desc, otherwise false
|
|
137
137
|
def desc?
|
|
138
|
-
@order ==
|
|
138
|
+
@order == "desc"
|
|
139
139
|
end
|
|
140
140
|
|
|
141
141
|
# Extracts the attribute based on which we should sort (if present)
|
|
@@ -42,7 +42,7 @@ module Karafka
|
|
|
42
42
|
# Most of the users use one or few error partitions at most, so this is fairly
|
|
43
43
|
# efficient and not problematic
|
|
44
44
|
rescue Rdkafka::RdkafkaError => e
|
|
45
|
-
e.code == :unknown_partition ? break : raise
|
|
45
|
+
(e.code == :unknown_partition) ? break : raise
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
estimated += offsets.last - offsets.first
|
|
@@ -66,6 +66,7 @@ module Karafka
|
|
|
66
66
|
stats[cg_id][:topics][t_name][:partitions][pt_id] = partition
|
|
67
67
|
stats[cg_id][:topics][t_name][:partitions][pt_id][:process] = process
|
|
68
68
|
stats[cg_id][:topics][t_name][:partitions][pt_id][:subscription_group_id] = sg_id
|
|
69
|
+
stats[cg_id][:topics][t_name][:partitions][pt_id][:instance_id] = subscription_group.instance_id
|
|
69
70
|
end
|
|
70
71
|
end
|
|
71
72
|
|
|
@@ -21,12 +21,12 @@ module Karafka
|
|
|
21
21
|
|
|
22
22
|
# @return [Jobs] running jobs
|
|
23
23
|
def running
|
|
24
|
-
select { |job| job.status ==
|
|
24
|
+
select { |job| job.status == "running" }
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# @return [Jobs] pending jobs
|
|
28
28
|
def pending
|
|
29
|
-
select { |job| job.status ==
|
|
29
|
+
select { |job| job.status == "pending" }
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# Creates a new Jobs object with selected jobs
|
|
@@ -39,14 +39,14 @@ module Karafka
|
|
|
39
39
|
# requested offset is within the range and if so, it means it has been cleaned or
|
|
40
40
|
# is a system entry. In such cases we do display user an info message.
|
|
41
41
|
return nil if watermark_offsets &&
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
offset >= watermark_offsets.low &&
|
|
43
|
+
offset < watermark_offsets.high
|
|
44
44
|
|
|
45
45
|
# If beyond the watermark offsets, we raise 404 as user should not reach such
|
|
46
46
|
# non-existent messages as we cannot reason about them
|
|
47
47
|
raise(
|
|
48
48
|
::Karafka::Web::Errors::Ui::NotFoundError,
|
|
49
|
-
[topic_id, partition_id, offset].join(
|
|
49
|
+
[topic_id, partition_id, offset].join(", ")
|
|
50
50
|
)
|
|
51
51
|
end
|
|
52
52
|
|
|
@@ -111,7 +111,7 @@ module Karafka
|
|
|
111
111
|
# We do not reset the offset here because we are not interested in seeking from
|
|
112
112
|
# any offset. We are interested in the indication, that there is no offset of a
|
|
113
113
|
# given value so we can try with a more recent one
|
|
114
|
-
|
|
114
|
+
"auto.offset.reset": "error"
|
|
115
115
|
)
|
|
116
116
|
|
|
117
117
|
next unless messages
|
|
@@ -126,11 +126,11 @@ module Karafka
|
|
|
126
126
|
previous_offset
|
|
127
127
|
end
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
]
|
|
129
|
+
filled = fill_compacted(
|
|
130
|
+
messages, partition_id, context_offset, context_count, high_offset
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
return [previous_offset, filled.reverse, next_offset]
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
no_data_result
|