karafka-web 0.9.1 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ci.yml +30 -0
- data/.gitignore +2 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +98 -1
- data/Gemfile +2 -0
- data/Gemfile.lock +37 -25
- data/LICENSE +1 -1
- data/bin/build_assets +51 -0
- data/bin/release +6 -0
- data/certs/cert.pem +26 -0
- data/config/locales/pro_errors.yml +18 -0
- data/docker-compose.yml +1 -1
- data/gulpfile.js +73 -0
- data/karafka-web.gemspec +3 -3
- data/lib/karafka/web/config.rb +18 -10
- data/lib/karafka/web/contracts/base.rb +2 -0
- data/lib/karafka/web/contracts/config.rb +6 -1
- data/lib/karafka/web/errors.rb +12 -0
- data/lib/karafka/web/inflector.rb +1 -1
- data/lib/karafka/web/management/actions/enable.rb +17 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/0_set_initial.rb +39 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/1699543515_fill_missing_received_and_sent_bytes.rb +28 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_introduce_waiting.rb +26 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_remove_processing.rb +26 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/1704722380_split_listeners_into_active_and_paused.rb +38 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/1706607960_introduce_lag_total.rb +40 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/1706611396_rename_lag_total_to_lag_hybrid.rb +38 -0
- data/lib/karafka/web/management/migrations/consumers_metrics/1716218393_populate_jobs_metrics.rb +26 -0
- data/lib/karafka/web/management/migrations/consumers_states/0_set_initial.rb +46 -0
- data/lib/karafka/web/management/migrations/consumers_states/1699543515_fill_missing_received_and_sent_bytes.rb +25 -0
- data/lib/karafka/web/management/migrations/consumers_states/1700234522_introduce_waiting.rb +22 -0
- data/lib/karafka/web/management/migrations/consumers_states/1700234522_remove_processing.rb +22 -0
- data/lib/karafka/web/management/migrations/consumers_states/1704722380_split_listeners_into_active_and_paused.rb +34 -0
- data/lib/karafka/web/management/migrations/consumers_states/1706607960_introduce_lag_total.rb +24 -0
- data/lib/karafka/web/management/migrations/consumers_states/1706611396_rename_lag_total_to_lag_hybrid.rb +23 -0
- data/lib/karafka/web/management/migrations/consumers_states/1716218393_add_jobs_counter.rb +24 -0
- data/lib/karafka/web/management/migrator.rb +5 -5
- data/lib/karafka/web/pro/commanding/commands/base.rb +8 -0
- data/lib/karafka/web/pro/commanding/commands/quiet.rb +4 -1
- data/lib/karafka/web/pro/commanding/commands/stop.rb +4 -1
- data/lib/karafka/web/pro/loader.rb +8 -0
- data/lib/karafka/web/pro/ui/app.rb +84 -7
- data/lib/karafka/web/pro/ui/controllers/commanding_controller.rb +4 -4
- data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +1 -1
- data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +1 -0
- data/lib/karafka/web/pro/ui/controllers/explorer_controller.rb +6 -14
- data/lib/karafka/web/pro/ui/controllers/messages_controller.rb +5 -4
- data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +131 -0
- data/lib/karafka/web/pro/ui/controllers/search_controller.rb +73 -0
- data/lib/karafka/web/pro/ui/controllers/support_controller.rb +26 -0
- data/lib/karafka/web/pro/ui/controllers/topics_controller.rb +31 -0
- data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +26 -0
- data/lib/karafka/web/pro/ui/lib/policies/config.rb +39 -0
- data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +46 -0
- data/lib/karafka/web/pro/ui/lib/policies/messages.rb +76 -0
- data/lib/karafka/web/pro/ui/lib/policies/requests.rb +36 -0
- data/lib/karafka/web/pro/ui/lib/policies.rb +34 -0
- data/lib/karafka/web/pro/ui/lib/safe_runner.rb +98 -0
- data/lib/karafka/web/pro/ui/lib/search/config.rb +53 -0
- data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +101 -0
- data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +111 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +59 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +57 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +41 -0
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +45 -0
- data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +47 -0
- data/lib/karafka/web/pro/ui/lib/search/runner.rb +230 -0
- data/lib/karafka/web/pro/ui/lib/search.rb +36 -0
- data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +4 -4
- data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +14 -24
- data/lib/karafka/web/pro/ui/views/cluster/index.erb +20 -22
- data/lib/karafka/web/pro/ui/views/cluster/show.erb +21 -25
- data/lib/karafka/web/pro/ui/views/commands/_backtrace.erb +4 -19
- data/lib/karafka/web/pro/ui/views/commands/_breadcrumbs.erb +3 -3
- data/lib/karafka/web/pro/ui/views/commands/_command.erb +6 -6
- data/lib/karafka/web/pro/ui/views/commands/_command_details.erb +1 -11
- data/lib/karafka/web/pro/ui/views/commands/_incompatible_schema.erb +3 -14
- data/lib/karafka/web/pro/ui/views/commands/_metadata.erb +33 -42
- data/lib/karafka/web/pro/ui/views/commands/_table.erb +9 -3
- data/lib/karafka/web/pro/ui/views/commands/index.erb +18 -12
- data/lib/karafka/web/pro/ui/views/commands/show.erb +24 -29
- data/lib/karafka/web/pro/ui/views/consumers/_breadcrumbs.erb +8 -8
- data/lib/karafka/web/pro/ui/views/consumers/_consumer.erb +13 -23
- data/lib/karafka/web/pro/ui/views/consumers/_consumer_controls.erb +52 -35
- data/lib/karafka/web/pro/ui/views/consumers/_consumer_performance.erb +1 -1
- data/lib/karafka/web/pro/ui/views/consumers/_tabs.erb +28 -30
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_commands.erb +68 -28
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_job.erb +1 -1
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_metrics.erb +114 -133
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_partition.erb +4 -4
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_stopped.erb +6 -9
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_subscription_group.erb +116 -126
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_tabs.erb +26 -31
- data/lib/karafka/web/pro/ui/views/consumers/controls.erb +53 -57
- data/lib/karafka/web/pro/ui/views/consumers/details.erb +4 -17
- data/lib/karafka/web/pro/ui/views/consumers/index.erb +31 -34
- data/lib/karafka/web/pro/ui/views/consumers/pending_jobs.erb +41 -46
- data/lib/karafka/web/pro/ui/views/consumers/performance.erb +43 -47
- data/lib/karafka/web/pro/ui/views/consumers/running_jobs.erb +41 -46
- data/lib/karafka/web/pro/ui/views/consumers/subscriptions.erb +14 -17
- data/lib/karafka/web/pro/ui/views/dashboard/index.erb +67 -76
- data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +1 -1
- data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +1 -7
- data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +7 -10
- data/lib/karafka/web/pro/ui/views/dlq/index.erb +8 -10
- data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +3 -3
- data/lib/karafka/web/pro/ui/views/errors/_error.erb +8 -5
- data/lib/karafka/web/pro/ui/views/errors/_selector.erb +12 -0
- data/lib/karafka/web/pro/ui/views/errors/_table.erb +5 -4
- data/lib/karafka/web/pro/ui/views/errors/index.erb +50 -15
- data/lib/karafka/web/pro/ui/views/errors/partition.erb +61 -14
- data/lib/karafka/web/pro/ui/views/errors/show.erb +28 -46
- data/lib/karafka/web/pro/ui/views/explorer/_breadcrumbs.erb +11 -3
- data/lib/karafka/web/pro/ui/views/explorer/_failed_deserialization.erb +8 -3
- data/lib/karafka/web/pro/ui/views/explorer/_message.erb +12 -6
- data/lib/karafka/web/pro/ui/views/explorer/_no_topics.erb +1 -5
- data/lib/karafka/web/pro/ui/views/explorer/_selector.erb +12 -0
- data/lib/karafka/web/pro/ui/views/explorer/_topic.erb +6 -8
- data/lib/karafka/web/pro/ui/views/explorer/index.erb +13 -15
- data/lib/karafka/web/pro/ui/views/explorer/message/_metadata.erb +68 -32
- data/lib/karafka/web/pro/ui/views/explorer/message/_payload.erb +17 -16
- data/lib/karafka/web/pro/ui/views/explorer/message/_resources_utilization.erb +127 -0
- data/lib/karafka/web/pro/ui/views/explorer/message/_too_big_to_be_displayed.erb +20 -0
- data/lib/karafka/web/pro/ui/views/explorer/messages/_detail.erb +1 -1
- data/lib/karafka/web/pro/ui/views/explorer/partition/_cleaned.erb +3 -5
- data/lib/karafka/web/pro/ui/views/explorer/partition/_empty.erb +3 -5
- data/lib/karafka/web/pro/ui/views/explorer/partition/_messages.erb +6 -3
- data/lib/karafka/web/pro/ui/views/explorer/partition.erb +67 -46
- data/lib/karafka/web/pro/ui/views/explorer/show.erb +85 -21
- data/lib/karafka/web/pro/ui/views/explorer/topic/_actions.erb +27 -0
- data/lib/karafka/web/pro/ui/views/explorer/topic/_empty.erb +3 -5
- data/lib/karafka/web/pro/ui/views/explorer/topic/_limited.erb +8 -10
- data/lib/karafka/web/pro/ui/views/explorer/topic.erb +24 -44
- data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +7 -7
- data/lib/karafka/web/pro/ui/views/health/_no_data.erb +1 -7
- data/lib/karafka/web/pro/ui/views/health/_partition.erb +3 -3
- data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +3 -3
- data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +2 -2
- data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +3 -7
- data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +8 -0
- data/lib/karafka/web/pro/ui/views/health/_tabs.erb +32 -49
- data/lib/karafka/web/pro/ui/views/health/changes.erb +51 -51
- data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +28 -41
- data/lib/karafka/web/pro/ui/views/health/lags.erb +52 -52
- data/lib/karafka/web/pro/ui/views/health/offsets.erb +55 -55
- data/lib/karafka/web/pro/ui/views/health/overview.erb +60 -60
- data/lib/karafka/web/pro/ui/views/jobs/_job.erb +1 -1
- data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +1 -7
- data/lib/karafka/web/pro/ui/views/jobs/pending.erb +36 -38
- data/lib/karafka/web/pro/ui/views/jobs/running.erb +36 -38
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +58 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +45 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +22 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +26 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +12 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +17 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +46 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +34 -0
- data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +43 -0
- data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +7 -12
- data/lib/karafka/web/pro/ui/views/routing/_topic.erb +13 -11
- data/lib/karafka/web/pro/ui/views/routing/index.erb +7 -9
- data/lib/karafka/web/pro/ui/views/routing/show.erb +41 -33
- data/lib/karafka/web/pro/ui/views/search/_fix_errors.erb +3 -0
- data/lib/karafka/web/pro/ui/views/search/_metadata.erb +71 -0
- data/lib/karafka/web/pro/ui/views/search/_no_results.erb +3 -0
- data/lib/karafka/web/pro/ui/views/search/_no_search_criteria.erb +5 -0
- data/lib/karafka/web/pro/ui/views/search/_search_criteria.erb +37 -0
- data/lib/karafka/web/pro/ui/views/search/_search_modal.erb +139 -0
- data/lib/karafka/web/pro/ui/views/search/_timeout.erb +3 -0
- data/lib/karafka/web/pro/ui/views/search/index.erb +29 -0
- data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +90 -28
- data/lib/karafka/web/pro/ui/views/topics/_breadcrumbs.erb +14 -6
- data/lib/karafka/web/pro/ui/views/topics/_partition_offsets.erb +10 -0
- data/lib/karafka/web/pro/ui/views/topics/_tabs.erb +26 -32
- data/lib/karafka/web/pro/ui/views/topics/_topic.erb +7 -10
- data/lib/karafka/web/pro/ui/views/topics/config.erb +21 -25
- data/lib/karafka/web/pro/ui/views/topics/distribution/_badges.erb +10 -5
- data/lib/karafka/web/pro/ui/views/topics/distribution/_chart.erb +3 -1
- data/lib/karafka/web/pro/ui/views/topics/distribution/_limited.erb +1 -1
- data/lib/karafka/web/pro/ui/views/topics/distribution.erb +34 -39
- data/lib/karafka/web/pro/ui/views/topics/index.erb +13 -15
- data/lib/karafka/web/pro/ui/views/topics/offsets.erb +24 -0
- data/lib/karafka/web/pro/ui/views/topics/replication.erb +20 -24
- data/lib/karafka/web/processing/consumers/aggregators/metrics.rb +1 -1
- data/lib/karafka/web/processing/consumers/aggregators/state.rb +1 -1
- data/lib/karafka/web/processing/consumers/contracts/aggregated_stats.rb +1 -0
- data/lib/karafka/web/tracking/consumers/contracts/job.rb +1 -1
- data/lib/karafka/web/tracking/consumers/contracts/report.rb +6 -0
- data/lib/karafka/web/tracking/consumers/listeners/connections.rb +8 -6
- data/lib/karafka/web/tracking/consumers/listeners/processing.rb +7 -1
- data/lib/karafka/web/tracking/consumers/listeners/tags.rb +1 -1
- data/lib/karafka/web/tracking/consumers/reporter.rb +6 -8
- data/lib/karafka/web/tracking/consumers/sampler.rb +16 -5
- data/lib/karafka/web/ui/app.rb +20 -1
- data/lib/karafka/web/ui/base.rb +26 -20
- data/lib/karafka/web/ui/controllers/base_controller.rb +7 -5
- data/lib/karafka/web/ui/controllers/dashboard_controller.rb +8 -0
- data/lib/karafka/web/ui/controllers/requests/params.rb +16 -2
- data/lib/karafka/web/ui/controllers/support_controller.rb +17 -0
- data/lib/karafka/web/ui/controllers/ux_controller.rb +17 -0
- data/lib/karafka/web/ui/helpers/application_helper.rb +83 -43
- data/lib/karafka/web/ui/helpers/paths_helper.rb +24 -0
- data/lib/karafka/web/ui/helpers/tailwind_helper.rb +90 -0
- data/lib/karafka/web/ui/lib/sorter.rb +1 -1
- data/lib/karafka/web/ui/models/metrics/aggregated.rb +1 -0
- data/lib/karafka/web/ui/models/metrics/charts/topics.rb +36 -20
- data/lib/karafka/web/ui/models/recurring_tasks/log.rb +26 -0
- data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +86 -0
- data/lib/karafka/web/ui/models/recurring_tasks/task.rb +30 -0
- data/lib/karafka/web/ui/models/status.rb +28 -1
- data/lib/karafka/web/ui/public/images/calendar.svg +3 -0
- data/lib/karafka/web/ui/public/javascripts/application.js +39 -15
- data/lib/karafka/web/ui/public/javascripts/application.min.js +64 -0
- 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/charts/types/line.js +41 -9
- data/lib/karafka/web/ui/public/javascripts/components/btn_toggle_manager.js +37 -0
- data/lib/karafka/web/ui/public/javascripts/{live_poll.js → components/live_poll.js} +80 -8
- data/lib/karafka/web/ui/public/javascripts/{offset_datetime.js → components/offset_datetime.js} +1 -1
- data/lib/karafka/web/ui/public/javascripts/components/search.js +102 -0
- data/lib/karafka/web/ui/public/javascripts/components/tabs_manager.js +84 -0
- data/lib/karafka/web/ui/public/javascripts/components/theme_manager.js +66 -0
- data/lib/karafka/web/ui/public/javascripts/components/turbo_tracker.js +30 -0
- data/lib/karafka/web/ui/public/javascripts/libs/datepicker.js +2 -2
- data/lib/karafka/web/ui/public/javascripts/libs/turbo.js +6618 -0
- data/lib/karafka/web/ui/public/stylesheets/application.css +20 -113
- data/lib/karafka/web/ui/public/stylesheets/application.min.css +13 -0
- 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 +8 -0
- data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.br +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.br +0 -0
- data/lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.gz +0 -0
- data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +403 -0
- data/lib/karafka/web/ui/views/cluster/_breadcrumbs.erb +3 -3
- data/lib/karafka/web/ui/views/cluster/_tabs.erb +14 -24
- data/lib/karafka/web/ui/views/cluster/brokers.erb +20 -22
- data/lib/karafka/web/ui/views/cluster/replication.erb +28 -32
- data/lib/karafka/web/ui/views/consumers/_assignments_badges.erb +1 -1
- data/lib/karafka/web/ui/views/consumers/_breadcrumbs.erb +5 -0
- data/lib/karafka/web/ui/views/consumers/_consumer.erb +9 -13
- data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +2 -8
- data/lib/karafka/web/ui/views/consumers/_summary.erb +34 -45
- data/lib/karafka/web/ui/views/consumers/_tabs.erb +35 -0
- data/lib/karafka/web/ui/views/consumers/index.erb +31 -33
- data/lib/karafka/web/ui/views/dashboard/_counters.erb +76 -0
- data/lib/karafka/web/ui/views/dashboard/_feature_pro.erb +6 -2
- data/lib/karafka/web/ui/views/dashboard/_not_enough_data.erb +3 -15
- data/lib/karafka/web/ui/views/dashboard/_ranges_selector.erb +12 -12
- data/lib/karafka/web/ui/views/dashboard/index.erb +78 -52
- data/lib/karafka/web/ui/views/errors/_breadcrumbs.erb +2 -2
- data/lib/karafka/web/ui/views/errors/_detail.erb +1 -3
- data/lib/karafka/web/ui/views/errors/_error.erb +3 -5
- data/lib/karafka/web/ui/views/errors/index.erb +34 -44
- data/lib/karafka/web/ui/views/errors/show.erb +29 -47
- data/lib/karafka/web/ui/views/jobs/_breadcrumbs.erb +3 -3
- data/lib/karafka/web/ui/views/jobs/_job.erb +1 -1
- data/lib/karafka/web/ui/views/jobs/_no_jobs.erb +1 -7
- data/lib/karafka/web/ui/views/jobs/_tabs.erb +14 -24
- data/lib/karafka/web/ui/views/jobs/pending.erb +30 -32
- data/lib/karafka/web/ui/views/jobs/running.erb +30 -32
- data/lib/karafka/web/ui/views/layout.erb +37 -21
- data/lib/karafka/web/ui/views/routing/_breadcrumbs.erb +2 -2
- data/lib/karafka/web/ui/views/routing/_consumer_group.erb +7 -12
- data/lib/karafka/web/ui/views/routing/_topic.erb +3 -5
- data/lib/karafka/web/ui/views/routing/index.erb +7 -9
- data/lib/karafka/web/ui/views/routing/show.erb +30 -22
- data/lib/karafka/web/ui/views/shared/_become_pro.erb +8 -8
- data/lib/karafka/web/ui/views/shared/_brand.erb +2 -2
- data/lib/karafka/web/ui/views/shared/_breadcrumbs.erb +23 -0
- data/lib/karafka/web/ui/views/shared/_content.erb +2 -28
- data/lib/karafka/web/ui/views/shared/_controls.erb +15 -0
- data/lib/karafka/web/ui/views/shared/_flashes.erb +5 -7
- data/lib/karafka/web/ui/views/shared/_header.erb +16 -19
- data/lib/karafka/web/ui/views/shared/_navigation.erb +95 -28
- data/lib/karafka/web/ui/views/shared/_no_paginated_data.erb +5 -9
- data/lib/karafka/web/ui/views/shared/_pagination.erb +11 -11
- data/lib/karafka/web/ui/views/shared/_tab_nav.erb +4 -5
- data/lib/karafka/web/ui/views/shared/_title.erb +5 -0
- data/lib/karafka/web/ui/views/shared/alerts/_box_error.erb +15 -0
- data/lib/karafka/web/ui/views/shared/alerts/_box_info.erb +15 -0
- data/lib/karafka/web/ui/views/shared/alerts/_box_primary.erb +15 -0
- data/lib/karafka/web/ui/views/shared/alerts/_box_secondary.erb +15 -0
- data/lib/karafka/web/ui/views/shared/alerts/_box_success.erb +15 -0
- data/lib/karafka/web/ui/views/shared/alerts/_box_warning.erb +15 -0
- data/lib/karafka/web/ui/views/shared/alerts/_error.erb +4 -0
- data/lib/karafka/web/ui/views/shared/alerts/_info.erb +5 -2
- data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +4 -0
- data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +4 -0
- data/lib/karafka/web/ui/views/shared/alerts/_success.erb +4 -0
- data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +4 -0
- data/lib/karafka/web/ui/views/shared/charts/_line.erb +1 -1
- data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +14 -19
- data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +16 -21
- data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +16 -28
- data/lib/karafka/web/ui/views/shared/icons/_arrow_down_on_square.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_arrow_down_tray.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_arrow_on_squares.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_arrow_path_rounded.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_arrow_uturn_right.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_arrows_right_left.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_blocks.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_book_open.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_bug.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_burger.erb +14 -0
- data/lib/karafka/web/ui/views/shared/icons/_calendar_days.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_chart_bar.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_check.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_check_badge.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_check_circle.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_circle_stack.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_cpu.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_document_glass.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_exclamation_triangle.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_eye.erb +4 -0
- data/lib/karafka/web/ui/views/shared/icons/_gear.erb +4 -0
- data/lib/karafka/web/ui/views/shared/icons/_github.erb +13 -0
- data/lib/karafka/web/ui/views/shared/icons/_globe.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_heart.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_home.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_info_circle.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_lifebuoy.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_light_bulb.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_list_bullets.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_magnifying_glass.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_moon.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_offices.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_pause.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_pause_circle.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_play.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_play_circle.erb +4 -0
- data/lib/karafka/web/ui/views/shared/icons/_question_circle.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_queue_list.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_refresh.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_slack.erb +16 -0
- data/lib/karafka/web/ui/views/shared/icons/_stop.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_sun.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_x_circle.erb +3 -0
- data/lib/karafka/web/ui/views/shared/icons/_x_mark.erb +3 -0
- data/lib/karafka/web/ui/views/status/_breadcrumbs.erb +1 -1
- data/lib/karafka/web/ui/views/status/_failure.erb +2 -13
- data/lib/karafka/web/ui/views/status/_halted.erb +2 -10
- data/lib/karafka/web/ui/views/status/_info.erb +2 -13
- data/lib/karafka/web/ui/views/status/_success.erb +2 -10
- data/lib/karafka/web/ui/views/status/_warning.erb +2 -13
- data/lib/karafka/web/ui/views/status/failures/_connection.erb +2 -2
- data/lib/karafka/web/ui/views/status/failures/_consumers_reports.erb +3 -3
- data/lib/karafka/web/ui/views/status/failures/_consumers_reports_schema_state.erb +4 -4
- data/lib/karafka/web/ui/views/status/failures/_enabled.erb +2 -2
- data/lib/karafka/web/ui/views/status/failures/_initial_consumers_metrics.erb +6 -6
- data/lib/karafka/web/ui/views/status/failures/_initial_consumers_state.erb +6 -6
- data/lib/karafka/web/ui/views/status/failures/_live_reporting.erb +2 -2
- data/lib/karafka/web/ui/views/status/failures/_materializing_lag.erb +11 -0
- data/lib/karafka/web/ui/views/status/failures/_partitions.erb +3 -3
- data/lib/karafka/web/ui/views/status/failures/_state_calculation.erb +2 -2
- data/lib/karafka/web/ui/views/status/failures/_topics.erb +3 -3
- data/lib/karafka/web/ui/views/status/info/_components.erb +59 -49
- data/lib/karafka/web/ui/views/status/show.erb +165 -154
- data/lib/karafka/web/ui/views/status/warnings/_connection.erb +3 -3
- data/lib/karafka/web/ui/views/status/warnings/_pro_subscription.erb +2 -2
- data/lib/karafka/web/ui/views/status/warnings/_replication.erb +2 -2
- data/lib/karafka/web/ui/views/status/warnings/_routing_topics_presence.erb +1 -1
- data/lib/karafka/web/ui/views/support/_breadcrumbs.erb +5 -0
- data/lib/karafka/web/ui/views/support/show.erb +71 -0
- data/lib/karafka/web/ui/views/ux/_alerts.erb +25 -0
- data/lib/karafka/web/ui/views/ux/_badges.erb +21 -0
- data/lib/karafka/web/ui/views/ux/_breadcrumbs.erb +5 -0
- data/lib/karafka/web/ui/views/ux/_buttons.erb +47 -0
- data/lib/karafka/web/ui/views/ux/_card_detail.erb +15 -0
- data/lib/karafka/web/ui/views/ux/_card_metric.erb +123 -0
- data/lib/karafka/web/ui/views/ux/_card_summary.erb +72 -0
- data/lib/karafka/web/ui/views/ux/_card_support.erb +39 -0
- data/lib/karafka/web/ui/views/ux/_code.erb +9 -0
- data/lib/karafka/web/ui/views/ux/_data_table.erb +82 -0
- data/lib/karafka/web/ui/views/ux/_headers.erb +2 -0
- data/lib/karafka/web/ui/views/ux/_icons.erb +9 -0
- data/lib/karafka/web/ui/views/ux/_pagination.erb +32 -0
- data/lib/karafka/web/ui/views/ux/_row_table.erb +52 -0
- data/lib/karafka/web/ui/views/ux/_status_rows.erb +65 -0
- data/lib/karafka/web/ui/views/ux/_tabs.erb +14 -0
- data/lib/karafka/web/ui/views/ux/_text.erb +2 -0
- data/lib/karafka/web/ui/views/ux/_topic_tiles.erb +42 -0
- data/lib/karafka/web/ui/views/ux/show.erb +19 -0
- data/lib/karafka/web/version.rb +1 -1
- data/lib/karafka/web.rb +2 -0
- data/package-lock.json +4163 -0
- data/package.json +15 -0
- data/postcss.config.js +6 -0
- data/tailwind.config.js +16 -0
- data.tar.gz.sig +0 -0
- metadata +209 -69
- metadata.gz.sig +1 -4
- data/certs/cert_chain.pem +0 -26
- data/lib/karafka/web/management/migrations/0_set_initial_consumers_metrics.rb +0 -36
- data/lib/karafka/web/management/migrations/0_set_initial_consumers_state.rb +0 -43
- data/lib/karafka/web/management/migrations/1699543515_fill_missing_received_and_sent_bytes_in_consumers_metrics.rb +0 -26
- data/lib/karafka/web/management/migrations/1699543515_fill_missing_received_and_sent_bytes_in_consumers_state.rb +0 -23
- data/lib/karafka/web/management/migrations/1700234522_introduce_waiting_in_consumers_metrics.rb +0 -24
- data/lib/karafka/web/management/migrations/1700234522_introduce_waiting_in_consumers_state.rb +0 -20
- data/lib/karafka/web/management/migrations/1700234522_remove_processing_from_consumers_metrics.rb +0 -24
- data/lib/karafka/web/management/migrations/1700234522_remove_processing_from_consumers_state.rb +0 -20
- data/lib/karafka/web/management/migrations/1704722380_split_listeners_into_active_and_paused_in_metrics.rb +0 -36
- data/lib/karafka/web/management/migrations/1704722380_split_listeners_into_active_and_paused_in_states.rb +0 -32
- data/lib/karafka/web/management/migrations/1706607960_introduce_lag_total_in_metrics.rb +0 -38
- data/lib/karafka/web/management/migrations/1706607960_introduce_lag_total_in_states.rb +0 -22
- data/lib/karafka/web/management/migrations/1706611396_rename_lag_total_to_lag_hybrid_in_metrics.rb +0 -36
- data/lib/karafka/web/management/migrations/1706611396_rename_lag_total_to_lag_hybrid_in_states.rb +0 -21
- data/lib/karafka/web/pro/ui/views/cluster/brokers.erb +0 -27
- data/lib/karafka/web/pro/ui/views/commands/_details.erb +0 -26
- data/lib/karafka/web/pro/ui/views/consumers/_counters.erb +0 -72
- data/lib/karafka/web/pro/ui/views/consumers/consumer/_title.erb +0 -5
- data/lib/karafka/web/pro/ui/views/errors/_title_with_select.erb +0 -31
- data/lib/karafka/web/pro/ui/views/explorer/message/_message_actions.erb +0 -18
- data/lib/karafka/web/pro/ui/views/explorer/message/_payload_actions.erb +0 -19
- data/lib/karafka/web/pro/ui/views/explorer/partition/_details.erb +0 -35
- data/lib/karafka/web/pro/ui/views/explorer/topic/_details.erb +0 -23
- data/lib/karafka/web/pro/ui/views/health/_consumer_group_header.erb +0 -14
- data/lib/karafka/web/ui/controllers/responses/deny.rb +0 -15
- data/lib/karafka/web/ui/helpers/alerts_helper.rb +0 -23
- data/lib/karafka/web/ui/lib/safe_runner.rb +0 -59
- data/lib/karafka/web/ui/models/visibility_filter.rb +0 -49
- data/lib/karafka/web/ui/public/javascripts/libs/bootstrap.min.js +0 -6
- data/lib/karafka/web/ui/public/javascripts/tabs_manager.js +0 -57
- data/lib/karafka/web/ui/public/stylesheets/libs/bootstrap.min.css +0 -6
- data/lib/karafka/web/ui/views/consumers/_counters.erb +0 -62
- data/lib/karafka/web/ui/views/errors/_watermark_offsets.erb +0 -10
- data/lib/karafka/web/ui/views/shared/_feature_pro.erb +0 -4
- data/lib/karafka/web/ui/views/shared/_footer.erb +0 -22
- data/lib/karafka/web/ui/views/shared/_live_poll.erb +0 -7
- /data/lib/karafka/web/management/migrations/{0_base.rb → base.rb} +0 -0
- /data/lib/karafka/web/ui/public/javascripts/{charts.js → components/charts.js} +0 -0
- /data/lib/karafka/web/ui/public/stylesheets/libs/{highlight.min.css → highlight_light.min.css} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 40794ee9c8b084cf75de0403b904134cbc6a762dbfa338bb9ce574b56e46ac36
|
|
4
|
+
data.tar.gz: dedefe087c54e118abb90e819b36b29aa253c4351aa18bd8a78d01e2c096ce79
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 88b9b6ed8082b0484dcd32a20b2cee2b77d4df762b65d0487325e03ef375e1e7ac621d612f81b3f4a6870aa4352e07286979863d656161ca7d8d880e5709d108
|
|
7
|
+
data.tar.gz: f9350f68d872c76d289933fbf2548b692179bae30fb2c0fccf923cdefca7131bbf3e6bf362e21a442c424fc4b43472e8334115b90c32449e80ef45a3518c3228
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -22,6 +22,7 @@ jobs:
|
|
|
22
22
|
fail-fast: false
|
|
23
23
|
matrix:
|
|
24
24
|
ruby:
|
|
25
|
+
- '3.4.0-preview1'
|
|
25
26
|
- '3.3'
|
|
26
27
|
- '3.2'
|
|
27
28
|
- '3.1'
|
|
@@ -101,3 +102,32 @@ jobs:
|
|
|
101
102
|
CODITSU_API_KEY: ${{ secrets.CODITSU_API_KEY }}
|
|
102
103
|
CODITSU_API_SECRET: ${{ secrets.CODITSU_API_SECRET }}
|
|
103
104
|
run: \curl -sSL https://api.coditsu.io/run/ci | bash
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
assets:
|
|
108
|
+
runs-on: ubuntu-latest
|
|
109
|
+
steps:
|
|
110
|
+
- name: Checkout code
|
|
111
|
+
uses: actions/checkout@v4
|
|
112
|
+
|
|
113
|
+
- name: Set up Node.js
|
|
114
|
+
uses: actions/setup-node@v4
|
|
115
|
+
with:
|
|
116
|
+
node-version: '17'
|
|
117
|
+
|
|
118
|
+
- name: Cache node modules
|
|
119
|
+
uses: actions/cache@v4
|
|
120
|
+
with:
|
|
121
|
+
path: ~/.npm
|
|
122
|
+
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
|
123
|
+
restore-keys: |
|
|
124
|
+
${{ runner.os }}-node-
|
|
125
|
+
|
|
126
|
+
- name: Install dependencies
|
|
127
|
+
run: npm install
|
|
128
|
+
|
|
129
|
+
- name: Build development assets
|
|
130
|
+
run: ./bin/build_assets
|
|
131
|
+
|
|
132
|
+
- name: Build release assets
|
|
133
|
+
run: KARAFKA_RELEASE=true ./bin/build_assets
|
data/.gitignore
CHANGED
|
@@ -38,8 +38,10 @@ db/*.sqlite3
|
|
|
38
38
|
/capybara-*.html
|
|
39
39
|
/gems
|
|
40
40
|
/specifications
|
|
41
|
+
/node_modules
|
|
41
42
|
rerun.txt
|
|
42
43
|
pickle-email-*.html
|
|
44
|
+
tailwind.min.css
|
|
43
45
|
|
|
44
46
|
# If you find yourself ignoring temporary files generated by your text editor
|
|
45
47
|
# or operating system, you probably want to add a global ignore instead:
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.3.
|
|
1
|
+
3.3.4
|
data/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,101 @@
|
|
|
1
|
-
# Karafka Web
|
|
1
|
+
# Karafka Web Changelog
|
|
2
|
+
|
|
3
|
+
## 0.10.1 (Unreleased)
|
|
4
|
+
- **[Feature]** Support Recurring Tasks management (Pro).
|
|
5
|
+
- [Enhancement] Optimize command buttons so they occupy less space.
|
|
6
|
+
- [Enhancement] Improve tables headers capitalization.
|
|
7
|
+
- [Enhancement] Prevent live-polling when user hovers over actionable links to mitigate race conditions.
|
|
8
|
+
- [Fix] Fix partial lack of tables hover in daily mode.
|
|
9
|
+
- [Fix] Fix lack of tables hover in dark mode.
|
|
10
|
+
- [Fix] Normalize various tables types styling.
|
|
11
|
+
- [Fix] Fix ranges selectors position on wide screens.
|
|
12
|
+
|
|
13
|
+
## 0.10.0 (2024-08-19)
|
|
14
|
+
- **[Breaking]** Rename and reorganize visibility filter to policies engine since it is not only about visibility.
|
|
15
|
+
- **[Feature]** Replace Bootstrap with with tailwind + DaisyUI.
|
|
16
|
+
- **[Feature]** Redesign the UI and move navigation to the left to make space for future features.
|
|
17
|
+
- **[Feature]** Support per request policies for inspection and operations limitation.
|
|
18
|
+
- **[Feature]** Provide Search capabilities in the Explorer (Pro).
|
|
19
|
+
- **[Feature]** Provide dark mode.
|
|
20
|
+
- [Enhancement] Set `enable.partition.eof` to `false` for Web UI consumer group as it is not needed.
|
|
21
|
+
- [Enhancement] Allow for configuration of extra `kafka` scope options for the Web UI consumer group.
|
|
22
|
+
- [Enhancement] Support Karafka `#eofed` consumer action.
|
|
23
|
+
- [Enhancement] Provide topics watermarks inspection page (Pro).
|
|
24
|
+
- [Enhancement] Use Turbo to improve usability.
|
|
25
|
+
- [Enhancement] Round poll age reporting to precision of 2 reducing the payload size.
|
|
26
|
+
- [Enhancement] Round utilization reporting to precision of 2 reducing the payload size.
|
|
27
|
+
- [Enhancement] Validate states materialization lag in the status view.
|
|
28
|
+
- [Enhancement] Promote topics data pace to OSS.
|
|
29
|
+
- [Enhancement] Rename and normalize dashboard tabs.
|
|
30
|
+
- [Enhancement] Enable live data polling on the first visit so it does not have to be enabled manually.
|
|
31
|
+
- [Enhancement] Allow disabling ability to republish messages via policies.
|
|
32
|
+
- [Enhancement] Display raw numerical timestamp alongside message time.
|
|
33
|
+
- [Enhancement] Support `/topics` root redirect.
|
|
34
|
+
- [Enhancement] Prevent explorer from displaying too big payloads (bigger than 1MB by default)
|
|
35
|
+
- [Enhancement] Include deserialization object allocation stats.
|
|
36
|
+
- [Enhancement] Improve how charts with many topics work.
|
|
37
|
+
- [Enhancement] Count and display executed jobs independently from processed batches.
|
|
38
|
+
- [Enhancement] Prevent karafka-web from being configured before karafka is configured.
|
|
39
|
+
- [Enhancement] Use `ostruct` from RubyGems in testing.
|
|
40
|
+
- [Enhancement] Indicate in the status reporting whether Karafka is OSS or Pro.
|
|
41
|
+
- [Enhancement] Ship JS and CSS assets using Brotli and Gzip when possible.
|
|
42
|
+
- [Enhancement] Introduce a `/ux` page to ease with styling improvements and components management.
|
|
43
|
+
- [Enhancement] disallow usage of `<script>` blocks to prevent XSS.
|
|
44
|
+
- [Enhancement] Display full subscription group information in the Routing view, including injectable defaults.
|
|
45
|
+
- [Enhancement] Report Karafka consumer server execution mode.
|
|
46
|
+
- [Enhancement] Expose `sync_threshold` consumer tracking config to allow aligning of error-intense applications.
|
|
47
|
+
- [Refactor] Optimize subscription group data tracking flow.
|
|
48
|
+
- [Refactor] Namespace migrations so migrations related to each topic data are in an independent directory.
|
|
49
|
+
- [Refactor] Use errors for deny flow so request denials can occur from the inspection layer.
|
|
50
|
+
- [Maintenance] Require `karafka` `2.4.7` due to fixes and API changes.
|
|
51
|
+
- [Fix] Disallow quiet and stop commands for swarm workers.
|
|
52
|
+
- [Fix] Disallow quiet and stop commands for embedded workers.
|
|
53
|
+
- [Fix] Fix invalid deserialization metadata display in the per-message Explorer view.
|
|
54
|
+
- [Fix] Fix a case where started page refresh would update content despite limiters being in place.
|
|
55
|
+
- [Fix] Ruby 3.4.0 preview1 - No such file or directory.
|
|
56
|
+
- [Fix] Fix the live poll button state flickering when disabled.
|
|
57
|
+
- [Fix] Pace computation does not compensate for partial data reported.
|
|
58
|
+
- [Fix] DLQ parent topics get classified as DLQ in the Web.
|
|
59
|
+
- [Fix] Add missing space in the attempt label.
|
|
60
|
+
- [Fix] Fix lack of highlight of "Consumers" navigation when in the "Commands" tab.
|
|
61
|
+
- [Fix] Fix not working page reporting in breadcrumbs.
|
|
62
|
+
- [Fix] Fix invalid redirect when trying to view particular errors partition time location.
|
|
63
|
+
- [Fix] Fix several UI inconsistencies.
|
|
64
|
+
- [Fix] License identifier `LGPL-3.0` is deprecated for SPDX (#2177).
|
|
65
|
+
- [Fix] Do not include prettifying the payload for visibility in the resource computation cost.
|
|
66
|
+
|
|
67
|
+
### Upgrade Notes
|
|
68
|
+
|
|
69
|
+
This is a **major** release that brings many things to the table.
|
|
70
|
+
|
|
71
|
+
This version of the Karafka Web UI requires Karafka `>= 2.4.7`. You can either upgrade both or upgrade Karafka first and then the Web UI. Karafka `2.4.7` is also compatible with Web UI `0.9.1`; thus, you can upgrade one at a time.
|
|
72
|
+
|
|
73
|
+
#### Configuration
|
|
74
|
+
|
|
75
|
+
Visibility Filters have been reorganized into messages policies.
|
|
76
|
+
|
|
77
|
+
Please read the [Policies API](https://karafka.io/docs/Pro-Web-UI-Policies/) documentation and convert your visibility filters to policies.
|
|
78
|
+
|
|
79
|
+
Your existing message-related visibility filter policies should now be assigned to a new configuration:
|
|
80
|
+
|
|
81
|
+
```ruby
|
|
82
|
+
Karafka::Web.setup do |config|
|
|
83
|
+
config.ui.policies.messages = MyCustomRequestsPolicy.new
|
|
84
|
+
end
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### Deployment
|
|
88
|
+
|
|
89
|
+
Because of the reporting schema update, it is recommended to:
|
|
90
|
+
|
|
91
|
+
0. Make sure you have upgraded to `0.9.1` before and that it was fully deployed.
|
|
92
|
+
1. Test the upgrade on a staging or dev environment.
|
|
93
|
+
3. The Web UI interface may throw 500 errors during the upgrade because of schema incompatibility (until Puma is deployed and all consumers redeployed). This will have no long-term effects and can be ignored.
|
|
94
|
+
4. `Karafka::Web::Errors::Processing::IncompatibleSchemaError` **is expected**. It is part of the Karafka Web UI zero-downtime deployment strategy. This error allows the Web UI materialization consumer to back off and wait for it to be replaced with a new one.
|
|
95
|
+
5. Perform a rolling deployment (or a regular one) and replace all consumer processes.
|
|
96
|
+
6. Update the Web UI Puma.
|
|
97
|
+
7. **No** CLI command execution is required.
|
|
98
|
+
8. Enjoy.
|
|
2
99
|
|
|
3
100
|
## 0.9.1 (2024-05-03)
|
|
4
101
|
- [Fix] OSS `lag_stored` for not-subscribed consumers causes Web UI to crash.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
karafka-web (0.
|
|
4
|
+
karafka-web (0.10.1)
|
|
5
5
|
erubi (~> 1.4)
|
|
6
|
-
karafka (>= 2.4.
|
|
6
|
+
karafka (>= 2.4.9, < 2.5.0)
|
|
7
7
|
karafka-core (>= 2.4.0, < 2.5.0)
|
|
8
8
|
roda (~> 3.68, >= 3.69)
|
|
9
9
|
tilt (~> 2.0)
|
|
@@ -11,7 +11,7 @@ PATH
|
|
|
11
11
|
GEM
|
|
12
12
|
remote: https://rubygems.org/
|
|
13
13
|
specs:
|
|
14
|
-
activesupport (7.1.3.
|
|
14
|
+
activesupport (7.1.3.4)
|
|
15
15
|
base64
|
|
16
16
|
bigdecimal
|
|
17
17
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
@@ -22,40 +22,49 @@ GEM
|
|
|
22
22
|
mutex_m
|
|
23
23
|
tzinfo (~> 2.0)
|
|
24
24
|
base64 (0.2.0)
|
|
25
|
-
bigdecimal (3.1.
|
|
25
|
+
bigdecimal (3.1.8)
|
|
26
26
|
byebug (11.1.3)
|
|
27
|
-
concurrent-ruby (1.
|
|
27
|
+
concurrent-ruby (1.3.3)
|
|
28
28
|
connection_pool (2.4.1)
|
|
29
29
|
diff-lcs (1.5.1)
|
|
30
30
|
docile (1.4.0)
|
|
31
31
|
drb (2.2.1)
|
|
32
|
-
erubi (1.
|
|
32
|
+
erubi (1.13.0)
|
|
33
|
+
et-orbi (1.2.11)
|
|
34
|
+
tzinfo
|
|
33
35
|
factory_bot (6.4.6)
|
|
34
36
|
activesupport (>= 5.0.0)
|
|
35
|
-
ffi (1.
|
|
36
|
-
|
|
37
|
+
ffi (1.17.0)
|
|
38
|
+
fugit (1.11.1)
|
|
39
|
+
et-orbi (~> 1, >= 1.2.11)
|
|
40
|
+
raabro (~> 1.4)
|
|
41
|
+
i18n (1.14.5)
|
|
37
42
|
concurrent-ruby (~> 1.0)
|
|
38
|
-
karafka (2.4.
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
karafka (2.4.9)
|
|
44
|
+
base64 (~> 0.2)
|
|
45
|
+
karafka-core (>= 2.4.3, < 2.5.0)
|
|
46
|
+
karafka-rdkafka (>= 0.17.2)
|
|
47
|
+
waterdrop (>= 2.7.3, < 3.0.0)
|
|
41
48
|
zeitwerk (~> 2.3)
|
|
42
|
-
karafka-core (2.4.
|
|
43
|
-
karafka-rdkafka (>= 0.15.0, < 0.
|
|
44
|
-
karafka-rdkafka (0.
|
|
49
|
+
karafka-core (2.4.4)
|
|
50
|
+
karafka-rdkafka (>= 0.15.0, < 0.18.0)
|
|
51
|
+
karafka-rdkafka (0.17.3)
|
|
45
52
|
ffi (~> 1.15)
|
|
46
53
|
mini_portile2 (~> 2.6)
|
|
47
54
|
rake (> 12)
|
|
48
|
-
mini_portile2 (2.8.
|
|
49
|
-
minitest (5.
|
|
55
|
+
mini_portile2 (2.8.7)
|
|
56
|
+
minitest (5.24.0)
|
|
50
57
|
mutex_m (0.2.0)
|
|
51
|
-
|
|
58
|
+
ostruct (0.6.0)
|
|
59
|
+
raabro (1.4.0)
|
|
60
|
+
rack (3.1.4)
|
|
52
61
|
rack-test (2.1.0)
|
|
53
62
|
rack (>= 1.3)
|
|
54
63
|
rackup (0.2.3)
|
|
55
64
|
rack (>= 3.0.0.beta1)
|
|
56
65
|
webrick
|
|
57
66
|
rake (13.2.1)
|
|
58
|
-
roda (3.
|
|
67
|
+
roda (3.81.0)
|
|
59
68
|
rack
|
|
60
69
|
rspec (3.13.0)
|
|
61
70
|
rspec-core (~> 3.13.0)
|
|
@@ -63,10 +72,10 @@ GEM
|
|
|
63
72
|
rspec-mocks (~> 3.13.0)
|
|
64
73
|
rspec-core (3.13.0)
|
|
65
74
|
rspec-support (~> 3.13.0)
|
|
66
|
-
rspec-expectations (3.13.
|
|
75
|
+
rspec-expectations (3.13.1)
|
|
67
76
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
68
77
|
rspec-support (~> 3.13.0)
|
|
69
|
-
rspec-mocks (3.13.
|
|
78
|
+
rspec-mocks (3.13.1)
|
|
70
79
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
71
80
|
rspec-support (~> 3.13.0)
|
|
72
81
|
rspec-support (3.13.1)
|
|
@@ -76,14 +85,15 @@ GEM
|
|
|
76
85
|
simplecov_json_formatter (~> 0.1)
|
|
77
86
|
simplecov-html (0.12.3)
|
|
78
87
|
simplecov_json_formatter (0.1.4)
|
|
79
|
-
tilt (2.
|
|
88
|
+
tilt (2.4.0)
|
|
80
89
|
tzinfo (2.0.6)
|
|
81
90
|
concurrent-ruby (~> 1.0)
|
|
82
|
-
waterdrop (2.7.
|
|
83
|
-
karafka-core (>= 2.4.
|
|
91
|
+
waterdrop (2.7.4)
|
|
92
|
+
karafka-core (>= 2.4.3, < 3.0.0)
|
|
93
|
+
karafka-rdkafka (>= 0.15.1)
|
|
84
94
|
zeitwerk (~> 2.3)
|
|
85
95
|
webrick (1.8.1)
|
|
86
|
-
zeitwerk (2.6.
|
|
96
|
+
zeitwerk (2.6.17)
|
|
87
97
|
|
|
88
98
|
PLATFORMS
|
|
89
99
|
ruby
|
|
@@ -92,11 +102,13 @@ PLATFORMS
|
|
|
92
102
|
DEPENDENCIES
|
|
93
103
|
byebug
|
|
94
104
|
factory_bot
|
|
105
|
+
fugit
|
|
95
106
|
karafka-web!
|
|
107
|
+
ostruct
|
|
96
108
|
rack-test
|
|
97
109
|
rackup (~> 0.2)
|
|
98
110
|
rspec
|
|
99
111
|
simplecov
|
|
100
112
|
|
|
101
113
|
BUNDLED WITH
|
|
102
|
-
2.5.
|
|
114
|
+
2.5.14
|
data/LICENSE
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Copyright (c) Maciej Mensfeld
|
|
2
2
|
|
|
3
3
|
Karafka Web is part of Karafka and it is an Open Source project licensed under the terms of
|
|
4
|
-
the LGPLv3 license. Please see <https://github.com/karafka/karafka/blob/master/LGPL>
|
|
4
|
+
the LGPLv3 license. Please see <https://github.com/karafka/karafka/blob/master/LICENSE-LGPL>
|
|
5
5
|
for license text.
|
|
6
6
|
|
|
7
7
|
Karafka and Karafka Web have also commercial-friendly license, commercial support and commercial components.
|
data/bin/build_assets
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
rm -f lib/karafka/web/ui/public/javascripts/application.min.*
|
|
4
|
+
rm -f lib/karafka/web/ui/public/stylesheets/application.min.*
|
|
5
|
+
rm -f lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.*
|
|
6
|
+
rm -f lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.*
|
|
7
|
+
|
|
8
|
+
set -e
|
|
9
|
+
|
|
10
|
+
npx postcss \
|
|
11
|
+
lib/karafka/web/ui/public/stylesheets/libs/tailwind.css \
|
|
12
|
+
-o lib/karafka/web/ui/public/stylesheets/libs/tailwind.min.css
|
|
13
|
+
|
|
14
|
+
npx gulp
|
|
15
|
+
|
|
16
|
+
# We remove the intermediate tailwind file because its already bundled with gulp
|
|
17
|
+
rm lib/karafka/web/ui/public/stylesheets/libs/tailwind.min.css
|
|
18
|
+
|
|
19
|
+
compress_file() {
|
|
20
|
+
local input_file="$1"
|
|
21
|
+
local output_dir
|
|
22
|
+
output_dir=$(dirname "$input_file")
|
|
23
|
+
local base_name
|
|
24
|
+
base_name=$(basename "$input_file")
|
|
25
|
+
|
|
26
|
+
# Check if input file exists
|
|
27
|
+
if [ ! -f "$input_file" ]; then
|
|
28
|
+
echo "Input file not found: $input_file"
|
|
29
|
+
return 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# Compress with Brotli
|
|
33
|
+
brotli -k -q 11 "$input_file" -o "$output_dir/$base_name.br"
|
|
34
|
+
if [ $? -ne 0 ]; then
|
|
35
|
+
echo "Brotli compression failed"
|
|
36
|
+
return 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Compress with Gzip
|
|
40
|
+
gzip -k -9 "$input_file" -c > "$output_dir/$base_name.gz"
|
|
41
|
+
if [ $? -ne 0 ]; then
|
|
42
|
+
echo "Gzip compression failed"
|
|
43
|
+
return 1
|
|
44
|
+
fi
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
compress_file "lib/karafka/web/ui/public/stylesheets/application.min.css"
|
|
48
|
+
compress_file "lib/karafka/web/ui/public/javascripts/application.min.js"
|
|
49
|
+
|
|
50
|
+
compress_file "lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css"
|
|
51
|
+
compress_file "lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css"
|
data/bin/release
ADDED
data/certs/cert.pem
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MRAwDgYDVQQDDAdjb250
|
|
3
|
+
YWN0MRcwFQYKCZImiZPyLGQBGRYHa2FyYWZrYTESMBAGCgmSJomT8ixkARkWAmlv
|
|
4
|
+
MB4XDTI0MDgyMzEwMTkyMFoXDTQ5MDgxNzEwMTkyMFowPzEQMA4GA1UEAwwHY29u
|
|
5
|
+
dGFjdDEXMBUGCgmSJomT8ixkARkWB2thcmFma2ExEjAQBgoJkiaJk/IsZAEZFgJp
|
|
6
|
+
bzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKjLhLjQqUlNayxkXnO+
|
|
7
|
+
PsmCDs/KFIzhrsYMfLZRZNaWmzV3ujljMOdDjd4snM2X06C41iVdQPWjpe3j8vVe
|
|
8
|
+
ZXEWR/twSbOP6Eeg8WVH2wCOo0x5i7yhVn4UBLH4JpfEMCbemVcWQ9ry9OMg4WpH
|
|
9
|
+
Uu4dRwxFV7hzCz3p0QfNLRI4miAxnGWcnlD98IJRjBAksTuR1Llj0vbOrDGsL9ZT
|
|
10
|
+
JeXP2gdRLd8SqzAFJEWrbeTBCBU7gfSh3oMg5SVDLjaqf7Kz5wC/8bDZydzanOxB
|
|
11
|
+
T6CDXPsCnllmvTNx2ei2T5rGYJOzJeNTmJLLK6hJWUlAvaQSvCwZRvFJ0tVGLEoS
|
|
12
|
+
flqSr6uGyyl1eMUsNmsH4BqPEYcAV6P2PKTv2vUR8AP0raDvZ3xL1TKvfRb8xRpo
|
|
13
|
+
vPopCGlY5XBWEc6QERHfVLTIVsjnls2/Ujj4h8/TSfqqYnaHKefIMLbuD/tquMjD
|
|
14
|
+
iWQsW2qStBV0T+U7FijKxVfrfqZP7GxQmDAc9o1iiyAa3QIDAQABo3cwdTAJBgNV
|
|
15
|
+
HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU3O4dTXmvE7YpAkszGzR9DdL9
|
|
16
|
+
sbEwHQYDVR0RBBYwFIESY29udGFjdEBrYXJhZmthLmlvMB0GA1UdEgQWMBSBEmNv
|
|
17
|
+
bnRhY3RAa2FyYWZrYS5pbzANBgkqhkiG9w0BAQsFAAOCAYEAVKTfoLXn7mqdSxIR
|
|
18
|
+
eqxcR6Huudg1jes81s1+X0uiRTR3hxxKZ3Y82cPsee9zYWyBrN8TA4KA0WILTru7
|
|
19
|
+
Ygxvzha0SRPsSiaKLmgOJ+61ebI4+bOORzIJLpD6GxCxu1r7MI4+0r1u1xe0EWi8
|
|
20
|
+
agkVo1k4Vi8cKMLm6Gl9b3wG9zQBw6fcgKwmpjKiNnOLP+OytzUANrIUJjoq6oal
|
|
21
|
+
TC+f/Uc0TLaRqUaW/bejxzDWWHoM3SU6aoLPuerglzp9zZVzihXwx3jPLUVKDFpF
|
|
22
|
+
Rl2lcBDxlpYGueGo0/oNzGJAAy6js8jhtHC9+19PD53vk7wHtFTZ/0ugDQYnwQ+x
|
|
23
|
+
oml2fAAuVWpTBCgOVFe6XCQpMKopzoxQ1PjKztW2KYxgJdIBX87SnL3aWuBQmhRd
|
|
24
|
+
i9zWxov0mr44TWegTVeypcWGd/0nxu1+QHVNHJrpqlPBRvwQsUm7fwmRInGpcaB8
|
|
25
|
+
ap8wNYvryYzrzvzUxIVFBVM5PacgkFqRmolCa8I7tdKQN+R1
|
|
26
|
+
-----END CERTIFICATE-----
|
|
@@ -9,3 +9,21 @@ en:
|
|
|
9
9
|
commanding.pause_timeout_format: needs to be an integer bigger than 0
|
|
10
10
|
key_must_be_a_symbol: All keys under the kafka settings scope need to be symbols
|
|
11
11
|
commanding.kafka_format: needs to be a filled hash
|
|
12
|
+
ui.search.matchers_must_have_name_and_call: 'must respond to #name and its instance to #call'
|
|
13
|
+
ui.search.matchers_format: must be an array with matchers
|
|
14
|
+
ui.search.matchers_name_must_be_valid: all matchers names must be non-empty strings
|
|
15
|
+
ui.search.limits_format: all limits need to be integers bigger than 0
|
|
16
|
+
ui.search.timeout_format: must be at least 1 ms
|
|
17
|
+
ui.policies.messages_format: cannot be nil
|
|
18
|
+
ui.policies.requests_format: cannot be nil
|
|
19
|
+
|
|
20
|
+
search_form:
|
|
21
|
+
missing: needs to be present
|
|
22
|
+
timestamp_key_must_be_large_enough: 'must be a Kafka message timestamp with ms precision'
|
|
23
|
+
matcher_format: must match the existing matchers names
|
|
24
|
+
limit_format: must be one of the predefined limits
|
|
25
|
+
phrase_format: must be a non-empty string
|
|
26
|
+
offset_type_format: must be latest, offset or a timestamp
|
|
27
|
+
offset_format: needs to be an integer bigger than 0
|
|
28
|
+
partitions_format: needs to include "all" or partitions ids
|
|
29
|
+
timestamp_format: must be a Kafka message timestamp with ms precision
|
data/docker-compose.yml
CHANGED
data/gulpfile.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const gulp = require('gulp');
|
|
2
|
+
const concat = require('gulp-concat');
|
|
3
|
+
const uglify = require('gulp-uglify');
|
|
4
|
+
const through2 = require('through2');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const cleanCSS = require('gulp-clean-css');
|
|
7
|
+
const sourcemaps = require('gulp-sourcemaps');
|
|
8
|
+
|
|
9
|
+
// Check if we are in development mode
|
|
10
|
+
const isDev = process.env.KARAFKA_RELEASE !== 'true';
|
|
11
|
+
|
|
12
|
+
// Define JavaScript source files
|
|
13
|
+
const jsFiles = [
|
|
14
|
+
'lib/karafka/web/ui/public/javascripts/libs/**/*.js',
|
|
15
|
+
'lib/karafka/web/ui/public/javascripts/charts/**/*.js',
|
|
16
|
+
'lib/karafka/web/ui/public/javascripts/components/**/*.js',
|
|
17
|
+
'lib/karafka/web/ui/public/javascripts/application.js'
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
// Define CSS source files
|
|
21
|
+
const cssFiles = [
|
|
22
|
+
'lib/karafka/web/ui/public/stylesheets/libs/datepicker.min.css',
|
|
23
|
+
'lib/karafka/web/ui/public/stylesheets/libs/tailwind.min.css',
|
|
24
|
+
'lib/karafka/web/ui/public/stylesheets/application.css'
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
// Custom transform stream to add file location comments for JavaScript
|
|
28
|
+
function addFileLocation() {
|
|
29
|
+
return through2.obj(function (file, enc, cb) {
|
|
30
|
+
if (file.isBuffer()) {
|
|
31
|
+
const fileLocationComment = `/*! Source: ${path.relative(__dirname, file.path)} */\n\n`;
|
|
32
|
+
const contents = Buffer.concat([Buffer.from(fileLocationComment), file.contents]);
|
|
33
|
+
file.contents = contents;
|
|
34
|
+
}
|
|
35
|
+
cb(null, file);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// JavaScript task
|
|
40
|
+
gulp.task('scripts', function() {
|
|
41
|
+
return gulp.src(jsFiles)
|
|
42
|
+
.pipe(isDev ? sourcemaps.init() : through2.obj()) // Initialize sourcemaps in dev
|
|
43
|
+
.pipe(addFileLocation()) // Add file location comments
|
|
44
|
+
.pipe(concat('application.min.js'))
|
|
45
|
+
.pipe(uglify({
|
|
46
|
+
output: {
|
|
47
|
+
comments: function(node, comment) {
|
|
48
|
+
const text = comment.value;
|
|
49
|
+
const type = comment.type;
|
|
50
|
+
if (type == "comment2") {
|
|
51
|
+
// Preserve comments starting with `/*!` or `/**`
|
|
52
|
+
return /@preserve|@license|@cc_on|^\!/.test(text);
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}))
|
|
58
|
+
.pipe(isDev ? sourcemaps.write('.') : through2.obj()) // Write sourcemaps in dev
|
|
59
|
+
.pipe(gulp.dest('lib/karafka/web/ui/public/javascripts'));
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// CSS task
|
|
63
|
+
gulp.task('styles', function() {
|
|
64
|
+
return gulp.src(cssFiles)
|
|
65
|
+
.pipe(isDev ? sourcemaps.init() : through2.obj()) // Initialize sourcemaps in dev
|
|
66
|
+
.pipe(concat('application.min.css'))
|
|
67
|
+
.pipe(cleanCSS({ level: 2 })) // Minify CSS
|
|
68
|
+
.pipe(isDev ? sourcemaps.write('.') : through2.obj()) // Write sourcemaps in dev
|
|
69
|
+
.pipe(gulp.dest('lib/karafka/web/ui/public/stylesheets'));
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Define default task to run both scripts and styles tasks
|
|
73
|
+
gulp.task('default', gulp.series('scripts', 'styles'));
|
data/karafka-web.gemspec
CHANGED
|
@@ -14,10 +14,10 @@ Gem::Specification.new do |spec|
|
|
|
14
14
|
spec.homepage = 'https://karafka.io'
|
|
15
15
|
spec.summary = 'Karafka ecosystem Web UI interface'
|
|
16
16
|
spec.description = 'Karafka ecosystem plug-and-play Web UI'
|
|
17
|
-
spec.licenses = %w[LGPL-3.0 Commercial]
|
|
17
|
+
spec.licenses = %w[LGPL-3.0-only Commercial]
|
|
18
18
|
|
|
19
19
|
spec.add_dependency 'erubi', '~> 1.4'
|
|
20
|
-
spec.add_dependency 'karafka', '>= 2.4.
|
|
20
|
+
spec.add_dependency 'karafka', '>= 2.4.9', '< 2.5.0'
|
|
21
21
|
spec.add_dependency 'karafka-core', '>= 2.4.0', '< 2.5.0'
|
|
22
22
|
spec.add_dependency 'roda', '~> 3.68', '>= 3.69'
|
|
23
23
|
spec.add_dependency 'tilt', '~> 2.0'
|
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
spec.cert_chain = %w[certs/
|
|
33
|
+
spec.cert_chain = %w[certs/cert.pem]
|
|
34
34
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
|
|
35
35
|
spec.executables = %w[karafka-web]
|
|
36
36
|
spec.require_paths = %w[lib]
|
data/lib/karafka/web/config.rb
CHANGED
|
@@ -76,6 +76,11 @@ module Karafka
|
|
|
76
76
|
# Reports the metrics collected in the consumer sampler
|
|
77
77
|
setting :reporter, default: Tracking::Consumers::Reporter.new
|
|
78
78
|
|
|
79
|
+
# Minimum number of messages to produce to produce them in sync mode
|
|
80
|
+
# This acts as a small back-off not to overload the system in case we would have
|
|
81
|
+
# extremely big number of errors and reports happening
|
|
82
|
+
setting :sync_threshold, default: 50
|
|
83
|
+
|
|
79
84
|
# Samples for fetching and storing metrics samples about the consumer process
|
|
80
85
|
setting :sampler, default: Tracking::Consumers::Sampler.new
|
|
81
86
|
|
|
@@ -118,6 +123,15 @@ module Karafka
|
|
|
118
123
|
# By default we flush the states twice as often as the data reporting.
|
|
119
124
|
# This will allow us to have closer to real-time reporting.
|
|
120
125
|
setting :interval, default: 2_500
|
|
126
|
+
|
|
127
|
+
# Extra kafka level settings that we merge to the defaults when building the Web consumer
|
|
128
|
+
# group. User may want different things than we in regard to operations, thus effectively
|
|
129
|
+
# crippling responsiveness or stability of reporting.
|
|
130
|
+
setting :kafka, default: {
|
|
131
|
+
# We do not use at the moment the `#eofed` flag for anything, thus there is no point in
|
|
132
|
+
# having it set to true if user users it.
|
|
133
|
+
'enable.partition.eof': false
|
|
134
|
+
}.freeze
|
|
121
135
|
end
|
|
122
136
|
|
|
123
137
|
setting :ui do
|
|
@@ -139,11 +153,6 @@ module Karafka
|
|
|
139
153
|
)
|
|
140
154
|
|
|
141
155
|
setting :visibility do
|
|
142
|
-
# Allows to manage visibility of payload, headers and message key in the UI
|
|
143
|
-
# In some cases you may want to limit what is being displayed due to the type of data you
|
|
144
|
-
# are dealing with
|
|
145
|
-
setting :filter, default: Ui::Models::VisibilityFilter.new
|
|
146
|
-
|
|
147
156
|
# Should we display internal topics of Kafka. The once starting with `__`
|
|
148
157
|
# By default we do not display them as they are not usable from regular users perspective
|
|
149
158
|
setting :internal_topics, default: false
|
|
@@ -162,17 +171,16 @@ module Karafka
|
|
|
162
171
|
# transaction that will cause given consumer group to halt processing and wait
|
|
163
172
|
setting :lso_threshold, default: 5 * 60 * 1_000
|
|
164
173
|
|
|
165
|
-
# Allows to manage visibility of payload, headers and message key in the UI
|
|
166
|
-
# In some cases you may want to limit what is being displayed due to the type of data you
|
|
167
|
-
# are dealing with
|
|
168
|
-
setting :visibility_filter, default: Ui::Models::VisibilityFilter.new
|
|
169
|
-
|
|
170
174
|
# Consider any topic matching those names as a DLQ topic for the DLQ view
|
|
171
175
|
# Web UI uses auto DLQ discovery based on routing but this may not be fully operable when
|
|
172
176
|
# using a multi-app setup. This config allows to add extra topics if needed without having
|
|
173
177
|
# to explicitly define routing
|
|
174
178
|
setting :dlq_patterns, default: [/(dlq)|(dead_letter)/i]
|
|
175
179
|
|
|
180
|
+
# Maximum in-memory size of payload that we will render. Anything bigger than this by
|
|
181
|
+
# default will not be displayed not to hang the browser. 512KB of serialized data is a lot.
|
|
182
|
+
setting :max_visible_payload_size, default: 524_288
|
|
183
|
+
|
|
176
184
|
# Specific kafka settings that are tuned to operate within the Web UI interface.
|
|
177
185
|
#
|
|
178
186
|
# Please do not change them unless you know what you are doing as their misconfiguration
|
|
@@ -10,6 +10,8 @@ module Karafka
|
|
|
10
10
|
# This layer is not for users extensive feedback, thus we can easily use the minimum
|
|
11
11
|
# error messaging there is.
|
|
12
12
|
def configure
|
|
13
|
+
return super if block_given?
|
|
14
|
+
|
|
13
15
|
super do |config|
|
|
14
16
|
config.error_messages = YAML.safe_load(
|
|
15
17
|
File.read(
|
|
@@ -34,6 +34,7 @@ module Karafka
|
|
|
34
34
|
required(:reporter) { |val| !val.nil? }
|
|
35
35
|
required(:sampler) { |val| !val.nil? }
|
|
36
36
|
required(:listeners) { |val| val.is_a?(Array) }
|
|
37
|
+
required(:sync_threshold) { |val| val.is_a?(Integer) && val.positive? }
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
nested(:producers) do
|
|
@@ -47,6 +48,9 @@ module Karafka
|
|
|
47
48
|
required(:active) { |val| [true, false].include?(val) }
|
|
48
49
|
# Do not update data more often not to overload and not to generate too much data
|
|
49
50
|
required(:interval) { |val| val.is_a?(Integer) && val >= 1_000 }
|
|
51
|
+
|
|
52
|
+
# Extra Kafka setup for our processing consumer
|
|
53
|
+
required(:kafka) { |val| val.is_a?(Hash) }
|
|
50
54
|
end
|
|
51
55
|
|
|
52
56
|
nested(:ui) do
|
|
@@ -57,6 +61,8 @@ module Karafka
|
|
|
57
61
|
|
|
58
62
|
required(:cache) { |val| !val.nil? }
|
|
59
63
|
required(:per_page) { |val| val.is_a?(Integer) && val >= 1 && val <= 100 }
|
|
64
|
+
required(:max_visible_payload_size) { |val| val.is_a?(Integer) && val >= 1 }
|
|
65
|
+
required(:kafka) { |val| val.is_a?(Hash) }
|
|
60
66
|
|
|
61
67
|
required(:dlq_patterns) do |val|
|
|
62
68
|
val.is_a?(Array) &&
|
|
@@ -64,7 +70,6 @@ module Karafka
|
|
|
64
70
|
end
|
|
65
71
|
|
|
66
72
|
nested(:visibility) do
|
|
67
|
-
required(:filter) { |val| !val.nil? }
|
|
68
73
|
required(:internal_topics) { |val| [true, false].include?(val) }
|
|
69
74
|
required(:active_topics_cluster_lags_only) { |val| [true, false].include?(val) }
|
|
70
75
|
end
|