karafka-web 0.9.2 → 0.10.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/ci.yml +30 -0
- data/.gitignore +2 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +84 -3
- data/Gemfile +1 -0
- data/Gemfile.lock +30 -25
- data/LICENSE +1 -1
- data/bin/build_assets +51 -0
- data/bin/release +6 -0
- data/config/locales/pro_errors.yml +18 -0
- data/docker-compose.yml +1 -1
- data/gulpfile.js +73 -0
- data/karafka-web.gemspec +7 -2
- data/lib/karafka/web/config.rb +9 -10
- data/lib/karafka/web/contracts/base.rb +2 -0
- data/lib/karafka/web/contracts/config.rb +2 -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 +11 -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 +44 -7
- 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/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 +51 -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/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 +80 -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/report.rb +6 -0
- data/lib/karafka/web/tracking/consumers/listeners/connections.rb +8 -6
- data/lib/karafka/web/tracking/consumers/listeners/processing.rb +2 -0
- 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 +6 -4
- 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 +75 -42
- 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/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} +44 -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 +59 -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 +16 -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 +391 -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 +14 -19
- data/lib/karafka/web/ui/views/shared/_navigation.erb +84 -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_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_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 +14 -41
- 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 +52 -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 +53 -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 +4158 -0
- data/package.json +15 -0
- data/postcss.config.js +6 -0
- data/tailwind.config.js +16 -0
- data.tar.gz.sig +4 -0
- metadata +203 -51
- metadata.gz.sig +0 -0
- 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
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Adds bytes_sent and bytes_received to all the aggregated metrics samples, so we have
|
|
8
|
-
# charts that do not have to fill gaps or check anything
|
|
9
|
-
class FillMissingReceivedAndSentBytesInConsumersMetrics < Base
|
|
10
|
-
self.versions_until = '1.1.0'
|
|
11
|
-
self.type = :consumers_metrics
|
|
12
|
-
|
|
13
|
-
# @param state [Hash] metrics state
|
|
14
|
-
def migrate(state)
|
|
15
|
-
state[:aggregated].each_value do |metrics|
|
|
16
|
-
metrics.each do |metric|
|
|
17
|
-
metric.last[:bytes_sent] = 0
|
|
18
|
-
metric.last[:bytes_received] = 0
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Similar to filling in consumers metrics, we initialize this with zeros so it is always
|
|
8
|
-
# present as expected
|
|
9
|
-
class FillMissingReceivedAndSentBytesInConsumersState < Base
|
|
10
|
-
# Network metrics were introduced with schema 1.2.0
|
|
11
|
-
self.versions_until = '1.2.0'
|
|
12
|
-
self.type = :consumers_state
|
|
13
|
-
|
|
14
|
-
# @param state [Hash]
|
|
15
|
-
def migrate(state)
|
|
16
|
-
state[:stats][:bytes_sent] = 0
|
|
17
|
-
state[:stats][:bytes_received] = 0
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
data/lib/karafka/web/management/migrations/1700234522_introduce_waiting_in_consumers_metrics.rb
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Introduce waiting in consumers metrics to complement busy and enqueued for jobs metrics
|
|
8
|
-
class IntroduceWaitingInConsumersMetrics < Base
|
|
9
|
-
self.versions_until = '1.1.1'
|
|
10
|
-
self.type = :consumers_metrics
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:aggregated].each_value do |metrics|
|
|
15
|
-
metrics.each do |metric|
|
|
16
|
-
metric.last[:waiting] = 0
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
data/lib/karafka/web/management/migrations/1700234522_introduce_waiting_in_consumers_state.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Introduce waiting in consumers metrics to complement busy and enqueued for jobs stats
|
|
8
|
-
class IntroduceWaitingInConsumersState < Base
|
|
9
|
-
self.versions_until = '1.2.1'
|
|
10
|
-
self.type = :consumers_state
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:stats][:waiting] = 0
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
data/lib/karafka/web/management/migrations/1700234522_remove_processing_from_consumers_metrics.rb
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Moves unused "processing" that was used instead of "busy" in older versions
|
|
8
|
-
class RemoveProcessingFromConsumersMetrics < Base
|
|
9
|
-
self.versions_until = '1.1.1'
|
|
10
|
-
self.type = :consumers_metrics
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:aggregated].each_value do |metrics|
|
|
15
|
-
metrics.each do |metric|
|
|
16
|
-
metric.last.delete(:processing)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
data/lib/karafka/web/management/migrations/1700234522_remove_processing_from_consumers_state.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Moves unused "processing" that was used instead of "busy" in older versions
|
|
8
|
-
class RemoveProcessingFromConsumersState < Base
|
|
9
|
-
self.versions_until = '1.2.1'
|
|
10
|
-
self.type = :consumers_state
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:stats].delete(:processing)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Since we have introduced notion of pause listeners, we need to reflect this in the
|
|
8
|
-
# UI, so the scaling changes are visible
|
|
9
|
-
class SplitListenersIntoActiveAndPausedInMetrics < Base
|
|
10
|
-
self.versions_until = '1.1.2'
|
|
11
|
-
self.type = :consumers_metrics
|
|
12
|
-
|
|
13
|
-
# @param state [Hash]
|
|
14
|
-
def migrate(state)
|
|
15
|
-
state[:aggregated].each_value do |metrics|
|
|
16
|
-
metrics.each do |metric|
|
|
17
|
-
listeners = if metric.last.key?(:listeners)
|
|
18
|
-
metric.last[:listeners].to_i
|
|
19
|
-
elsif metric.last.key?(:listeners_count)
|
|
20
|
-
metric.last[:listeners_count].to_i
|
|
21
|
-
else
|
|
22
|
-
0
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
metric.last[:listeners] = {
|
|
26
|
-
active: listeners,
|
|
27
|
-
standby: 0
|
|
28
|
-
}
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Since we have introduced notion of pause listeners, we need to reflect this in the
|
|
8
|
-
# UI, so the scaling changes are visible
|
|
9
|
-
class SplitListenersIntoActiveAndPausedInStates < Base
|
|
10
|
-
self.versions_until = '1.2.2'
|
|
11
|
-
self.type = :consumers_state
|
|
12
|
-
|
|
13
|
-
# @param state [Hash]
|
|
14
|
-
def migrate(state)
|
|
15
|
-
listeners = if state[:stats].key?(:listeners)
|
|
16
|
-
state[:stats][:listeners].to_i
|
|
17
|
-
elsif state[:stats].key?(:listeners_count)
|
|
18
|
-
state[:stats][:listeners_count].to_i
|
|
19
|
-
else
|
|
20
|
-
0
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
state[:stats][:listeners] = {
|
|
24
|
-
active: listeners,
|
|
25
|
-
standby: 0
|
|
26
|
-
}
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Moves to using lag total as a normalization for both lags
|
|
8
|
-
class IntroduceLagTotalInMetrics < Base
|
|
9
|
-
self.versions_until = '1.2.0'
|
|
10
|
-
self.type = :consumers_metrics
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:aggregated].each_value do |metrics|
|
|
15
|
-
metrics.each do |metric|
|
|
16
|
-
metric.last[:lag_total] = metric.last[:lag_stored]
|
|
17
|
-
metric.last.delete(:lag_stored)
|
|
18
|
-
metric.last.delete(:lag)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
state[:consumer_groups].each_value do |metrics|
|
|
23
|
-
metrics.each do |metric_group|
|
|
24
|
-
metric_group.last.each_value do |metric|
|
|
25
|
-
metric.each_value do |sample|
|
|
26
|
-
sample[:lag_total] = sample[:lag_stored]
|
|
27
|
-
sample.delete(:lag_stored)
|
|
28
|
-
sample.delete(:lag)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Moves to using lag total as a normalization for both lags
|
|
8
|
-
class IntroduceLagTotalInStates < Base
|
|
9
|
-
self.versions_until = '1.3.0'
|
|
10
|
-
self.type = :consumers_state
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:stats][:lag_total] = state[:stats][:lag_stored]
|
|
15
|
-
state[:stats].delete(:lag)
|
|
16
|
-
state[:stats].delete(:lag_stored)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
data/lib/karafka/web/management/migrations/1706611396_rename_lag_total_to_lag_hybrid_in_metrics.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Renames total lag to hybrid to better represent what it is
|
|
8
|
-
class RenameLagTotalToLagHybridInMetrics < Base
|
|
9
|
-
self.versions_until = '1.2.1'
|
|
10
|
-
self.type = :consumers_metrics
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:aggregated].each_value do |metrics|
|
|
15
|
-
metrics.each do |metric|
|
|
16
|
-
metric.last[:lag_hybrid] = metric.last[:lag_total] || 0
|
|
17
|
-
metric.last.delete(:lag_total)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
state[:consumer_groups].each_value do |metrics|
|
|
22
|
-
metrics.each do |metric_group|
|
|
23
|
-
metric_group.last.each_value do |metric|
|
|
24
|
-
metric.each_value do |sample|
|
|
25
|
-
sample[:lag_hybrid] = sample[:lag_total]
|
|
26
|
-
sample.delete(:lag_total)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
data/lib/karafka/web/management/migrations/1706611396_rename_lag_total_to_lag_hybrid_in_states.rb
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Management
|
|
6
|
-
module Migrations
|
|
7
|
-
# Renames total lag to hybrid to better represent what it is
|
|
8
|
-
class RenameLagTotalToLagHybridInStates < Base
|
|
9
|
-
self.versions_until = '1.3.1'
|
|
10
|
-
self.type = :consumers_state
|
|
11
|
-
|
|
12
|
-
# @param state [Hash]
|
|
13
|
-
def migrate(state)
|
|
14
|
-
state[:stats][:lag_hybrid] = state[:stats][:lag_total] || 0
|
|
15
|
-
state[:stats].delete(:lag_total)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<%== view_title('Cluster Informations') %>
|
|
2
|
-
|
|
3
|
-
<%== partial 'cluster/tabs' %>
|
|
4
|
-
|
|
5
|
-
<div class="container mb-5">
|
|
6
|
-
<div class="row">
|
|
7
|
-
<div class="col-lg-12 table-responsive">
|
|
8
|
-
<table class="processes bg-white table table-hover table-bordered table-striped">
|
|
9
|
-
<thead>
|
|
10
|
-
<tr class="align-middle">
|
|
11
|
-
<th><%== sort_link('Id', :broker_id) %></th>
|
|
12
|
-
<th><%== sort_link('Name', :broker_name) %></th>
|
|
13
|
-
<th><%== sort_link('Port', :broker_port) %></th>
|
|
14
|
-
</tr>
|
|
15
|
-
</thead>
|
|
16
|
-
<tbody>
|
|
17
|
-
<%==
|
|
18
|
-
each_partial(
|
|
19
|
-
@brokers,
|
|
20
|
-
'cluster/broker'
|
|
21
|
-
)
|
|
22
|
-
%>
|
|
23
|
-
</tbody>
|
|
24
|
-
</table>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
<div class="container mb-4">
|
|
2
|
-
<div class="row">
|
|
3
|
-
<div class="col-sm-6 ms-0 ps-0">
|
|
4
|
-
<% if @command_messages && !@command_messages.empty? %>
|
|
5
|
-
<a
|
|
6
|
-
href="<%= root_path('commands', 'recent') %>"
|
|
7
|
-
class="btn btn-secondary btn-sm"
|
|
8
|
-
title="Display the most recent command"
|
|
9
|
-
>
|
|
10
|
-
→ Recent
|
|
11
|
-
</a>
|
|
12
|
-
<% end %>
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
<div class="col-sm-6 text-end me-0 pe-0">
|
|
16
|
-
Watermark offsets:
|
|
17
|
-
<span class="badge bg-secondary mt-1 mb-1">
|
|
18
|
-
high: <%= @watermark_offsets.high %>
|
|
19
|
-
</span>
|
|
20
|
-
|
|
21
|
-
<span class="badge bg-secondary mt-1 mb-1">
|
|
22
|
-
low: <%= @watermark_offsets.low %>
|
|
23
|
-
</span>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
<div id="refreshable" class="container mb-5 counters">
|
|
2
|
-
<div class="row">
|
|
3
|
-
<div class="col-sm-12">
|
|
4
|
-
<div class="card">
|
|
5
|
-
<div class="card-body p-2 small">
|
|
6
|
-
<div class="col-sm-12">
|
|
7
|
-
<ul class="list-unstyled row text-center mb-0 mt-0">
|
|
8
|
-
<li class="col-sm">
|
|
9
|
-
<div class="count mb-1">
|
|
10
|
-
<%= number_with_delimiter @counters.messages, ' ' %>
|
|
11
|
-
</div>
|
|
12
|
-
<div class="desc">Messages</div>
|
|
13
|
-
</li>
|
|
14
|
-
<li class="col-sm">
|
|
15
|
-
<div class="count mb-1">
|
|
16
|
-
<%= number_with_delimiter @counters.batches, ' ' %>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="desc">Batches</div>
|
|
19
|
-
</li>
|
|
20
|
-
<li class="col-sm">
|
|
21
|
-
<a href="<%= root_path('health/lags') %>">
|
|
22
|
-
<div class="count mb-1">
|
|
23
|
-
<%= number_with_delimiter @counters.lag_hybrid, ' ' %>
|
|
24
|
-
</div>
|
|
25
|
-
<div class="desc">Total lag</div>
|
|
26
|
-
</a>
|
|
27
|
-
</li>
|
|
28
|
-
<li class="col-sm">
|
|
29
|
-
<a href="<%= root_path('jobs/running') %>">
|
|
30
|
-
<div class="count mb-1">
|
|
31
|
-
<%= number_with_delimiter @counters.busy, ' ' %>
|
|
32
|
-
</div>
|
|
33
|
-
<div class="desc">Running</div>
|
|
34
|
-
</a>
|
|
35
|
-
</li>
|
|
36
|
-
<li class="col-sm">
|
|
37
|
-
<a href="<%= root_path('jobs/pending') %>">
|
|
38
|
-
<div class="count mb-1">
|
|
39
|
-
<%= number_with_delimiter @counters.pending, ' ' %>
|
|
40
|
-
</div>
|
|
41
|
-
<div class="desc">Pending</div>
|
|
42
|
-
</a>
|
|
43
|
-
</li>
|
|
44
|
-
<li class="col-sm">
|
|
45
|
-
<a href="<%= root_path('errors') %>">
|
|
46
|
-
<div class="count mb-1">
|
|
47
|
-
<%= number_with_delimiter @counters.errors, ' ' %>
|
|
48
|
-
</div>
|
|
49
|
-
<div class="desc">Errors</div>
|
|
50
|
-
</a>
|
|
51
|
-
</li>
|
|
52
|
-
<li class="col-sm">
|
|
53
|
-
<div class="count mb-1">
|
|
54
|
-
<%= number_with_delimiter @counters.retries, ' ' %>
|
|
55
|
-
</div>
|
|
56
|
-
<div class="desc">Retries</div>
|
|
57
|
-
</li>
|
|
58
|
-
<li class="col-sm">
|
|
59
|
-
<a href="<%= root_path('dlq') %>">
|
|
60
|
-
<div class="count mb-1">
|
|
61
|
-
<%= number_with_delimiter @counters.dead, ' ' %>
|
|
62
|
-
</div>
|
|
63
|
-
<div class="desc">Dead</div>
|
|
64
|
-
</a>
|
|
65
|
-
</li>
|
|
66
|
-
</ul>
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
</div>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
<div class="container mb-4">
|
|
2
|
-
<div class="row">
|
|
3
|
-
<div class="col">
|
|
4
|
-
<h3>
|
|
5
|
-
Errors
|
|
6
|
-
</h3>
|
|
7
|
-
</div>
|
|
8
|
-
|
|
9
|
-
<div class="col">
|
|
10
|
-
<div class="col-auto text-end">
|
|
11
|
-
<label class="col-form-label">Partition</label>
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
<div class="col pt-1 mb-0 pb-0">
|
|
16
|
-
<div class="col-auto">
|
|
17
|
-
<select class="form-select form-select-sm mb-0 form-control" id="current-partition">
|
|
18
|
-
<%==
|
|
19
|
-
each_partial(
|
|
20
|
-
[nil] + @partitions_count.times.to_a,
|
|
21
|
-
'errors/partition_option',
|
|
22
|
-
local: :partition
|
|
23
|
-
)
|
|
24
|
-
%>
|
|
25
|
-
</select>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
<hr>
|
|
31
|
-
</div>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<%
|
|
2
|
-
republish_path = root_path('messages', @message.topic, @message.partition, @message.offset, 'republish')
|
|
3
|
-
surrounding_path = explorer_path(@message.topic, @message.partition, @message.offset, 'surrounding')
|
|
4
|
-
%>
|
|
5
|
-
|
|
6
|
-
<div class="row mb-0">
|
|
7
|
-
<div class="col-sm-12 text-end">
|
|
8
|
-
<a href="<%= surrounding_path %>" class="btn btn-secondary btn-sm float-end ms-1">
|
|
9
|
-
⇋
|
|
10
|
-
Surrounding
|
|
11
|
-
</a>
|
|
12
|
-
|
|
13
|
-
<form action="<%= republish_path %>" method="post" class="confirm-action float-end">
|
|
14
|
-
<%== csrf_tag(republish_path) %>
|
|
15
|
-
<input type="submit" value="⟳ Republish" class="btn btn-primary btn-sm"/>
|
|
16
|
-
</form>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<div class="float-end text-end">
|
|
2
|
-
<% if @visibility_filter.download?(@message) %>
|
|
3
|
-
<a
|
|
4
|
-
href="<%= root_path('messages', @message.topic, @message.partition, @message.offset, 'download') %>"
|
|
5
|
-
class="btn btn-secondary btn-sm"
|
|
6
|
-
>
|
|
7
|
-
⇓ Download raw
|
|
8
|
-
</a>
|
|
9
|
-
<% end %>
|
|
10
|
-
|
|
11
|
-
<% if @visibility_filter.export?(@message) && @safe_payload.success? %>
|
|
12
|
-
<a
|
|
13
|
-
href="<%= root_path('messages', @message.topic, @message.partition, @message.offset, 'export') %>"
|
|
14
|
-
class="btn btn-secondary btn-sm"
|
|
15
|
-
>
|
|
16
|
-
⇓ Export as JSON
|
|
17
|
-
</a>
|
|
18
|
-
<% end %>
|
|
19
|
-
</div>
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
<div class="container mb-4">
|
|
2
|
-
<div class="row">
|
|
3
|
-
<div class="col-sm-6 ms-0 ps-0">
|
|
4
|
-
<% if @messages && !@messages.empty? %>
|
|
5
|
-
<a
|
|
6
|
-
href="<%= explorer_path(@topic_id, @partition_id, 'recent') %>"
|
|
7
|
-
class="btn btn-secondary btn-sm"
|
|
8
|
-
title="Display the most recent message for this partition"
|
|
9
|
-
>
|
|
10
|
-
→ Recent
|
|
11
|
-
</a>
|
|
12
|
-
<% end %>
|
|
13
|
-
|
|
14
|
-
<% closest_path = explorer_path(@topic_id, @partition_id) %>
|
|
15
|
-
<input
|
|
16
|
-
type="button"
|
|
17
|
-
class="btn-secondary btn btn-sm"
|
|
18
|
-
id="offset-lookup-datepicker"
|
|
19
|
-
value="📆"
|
|
20
|
-
data-target="<%= closest_path %>"
|
|
21
|
-
/>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
<div class="col-sm-6 text-end me-0 pe-0">
|
|
25
|
-
Watermark offsets:
|
|
26
|
-
<span class="badge bg-secondary mt-1 mb-1">
|
|
27
|
-
high: <%= @watermark_offsets.high %>
|
|
28
|
-
</span>
|
|
29
|
-
|
|
30
|
-
<span class="badge bg-secondary mt-1 mb-1">
|
|
31
|
-
low: <%= @watermark_offsets.low %>
|
|
32
|
-
</span>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<div class="container mb-4">
|
|
2
|
-
<div class="row">
|
|
3
|
-
<div class="col-sm-6 ms-0 ps-0">
|
|
4
|
-
<% if @messages && !@messages.empty? %>
|
|
5
|
-
<a href="<%= explorer_path(@topic_id, 'recent') %>" class="btn btn-secondary btn-sm" title="Display the most recent message for this partition">
|
|
6
|
-
→ Recent
|
|
7
|
-
</a>
|
|
8
|
-
<% end %>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<div class="col-sm-6 text-end me-0 pe-0">
|
|
12
|
-
Partitions:
|
|
13
|
-
<span class="badge bg-secondary mt-1 mb-1">
|
|
14
|
-
total: <%= @partitions_count %>
|
|
15
|
-
</span>
|
|
16
|
-
|
|
17
|
-
<span class="badge bg-secondary mt-1 mb-1">
|
|
18
|
-
visible:
|
|
19
|
-
<%= [@active_partitions.first, @active_partitions.last].uniq.join(' to ') %>
|
|
20
|
-
</span>
|
|
21
|
-
</div>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<div class="row mb-4">
|
|
2
|
-
<div class="col-sm-8">
|
|
3
|
-
<h4 class="mb-4"><%= cg_name %></h4>
|
|
4
|
-
</div>
|
|
5
|
-
|
|
6
|
-
<div class="col-sm-4">
|
|
7
|
-
<span class="float-end">
|
|
8
|
-
Last rebalance:
|
|
9
|
-
<span class="badge bg-secondary">
|
|
10
|
-
<%== relative_time(details[:rebalanced_at]) %>
|
|
11
|
-
</span>
|
|
12
|
-
</span>
|
|
13
|
-
</div>
|
|
14
|
-
</div>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Karafka
|
|
4
|
-
module Web
|
|
5
|
-
module Ui
|
|
6
|
-
module Helpers
|
|
7
|
-
# Helper for generating general alerts
|
|
8
|
-
module AlertsHelper
|
|
9
|
-
# @param message [String] alert message
|
|
10
|
-
# @return [String] html with alert info
|
|
11
|
-
def alert_info(message)
|
|
12
|
-
partial(
|
|
13
|
-
'shared/alerts/info',
|
|
14
|
-
locals: {
|
|
15
|
-
message: message
|
|
16
|
-
}
|
|
17
|
-
)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|