karafka-web 0.11.5 → 0.11.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/Gemfile +9 -10
- data/Gemfile.lint +14 -0
- data/Gemfile.lint.lock +123 -0
- data/Gemfile.lock +15 -16
- data/README.md +15 -15
- data/Rakefile +2 -2
- data/bin/balance_specs +120 -0
- data/bin/check_coverage +31 -0
- data/bin/collect_timings +83 -0
- data/bin/rspecs +10 -0
- data/bin/rspecs_parallel +111 -0
- data/docker-compose.yml +1 -1
- data/karafka-web.gemspec +35 -35
- data/lib/karafka/web/cli/base.rb +2 -2
- data/lib/karafka/web/cli/help.rb +2 -2
- data/lib/karafka/web/cli/install.rb +3 -3
- data/lib/karafka/web/cli/migrate.rb +3 -3
- data/lib/karafka/web/cli/reset.rb +3 -3
- data/lib/karafka/web/cli/uninstall.rb +1 -1
- data/lib/karafka/web/config.rb +40 -32
- data/lib/karafka/web/contracts/base.rb +2 -2
- data/lib/karafka/web/deserializer.rb +5 -5
- data/lib/karafka/web/installer.rb +14 -14
- data/lib/karafka/web/management/actions/base.rb +5 -5
- data/lib/karafka/web/management/actions/clean_boot_file.rb +3 -3
- data/lib/karafka/web/management/actions/create_initial_states.rb +8 -8
- data/lib/karafka/web/management/actions/enable.rb +3 -3
- data/lib/karafka/web/management/actions/extend_boot_file.rb +3 -3
- data/lib/karafka/web/management/migrations/base.rb +3 -3
- data/lib/karafka/web/management/migrations/consumers_metrics/0_set_initial.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1699543515_fill_missing_received_and_sent_bytes.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_introduce_waiting.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_remove_processing.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1704722380_split_listeners_into_active_and_paused.rb +7 -7
- data/lib/karafka/web/management/migrations/consumers_metrics/1706607960_introduce_lag_total.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1706611396_rename_lag_total_to_lag_hybrid.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_metrics/1716218393_populate_jobs_metrics.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_reports/1761645571_rename_process_name_to_id.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_reports/1765657887_add_group_instance_id_to_subscription_groups.rb +42 -0
- data/lib/karafka/web/management/migrations/consumers_states/0_set_initial.rb +2 -2
- data/lib/karafka/web/management/migrations/consumers_states/1699543515_fill_missing_received_and_sent_bytes.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1700234522_introduce_waiting.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1700234522_remove_processing.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1704722380_split_listeners_into_active_and_paused.rb +7 -7
- data/lib/karafka/web/management/migrations/consumers_states/1706607960_introduce_lag_total.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1706611396_rename_lag_total_to_lag_hybrid.rb +1 -1
- data/lib/karafka/web/management/migrations/consumers_states/1716218393_add_jobs_counter.rb +1 -1
- data/lib/karafka/web/management/migrator.rb +2 -2
- data/lib/karafka/web/pro/commanding/commands/base.rb +20 -4
- data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +22 -5
- data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +22 -5
- data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +21 -4
- data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +20 -3
- data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +20 -3
- data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +20 -3
- data/lib/karafka/web/pro/commanding/commands/topics/pause.rb +48 -0
- data/lib/karafka/web/pro/commanding/commands/topics/resume.rb +49 -0
- data/lib/karafka/web/pro/commanding/config.rb +23 -5
- data/lib/karafka/web/pro/commanding/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/commanding/dispatcher.rb +61 -26
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +20 -3
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +21 -4
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +20 -3
- data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +24 -7
- data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +36 -12
- data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +47 -8
- data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +62 -13
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/base.rb +109 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/pause.rb +76 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/commands/resume.rb +56 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/executor.rb +75 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/listener.rb +82 -0
- data/lib/karafka/web/pro/commanding/handlers/topics/tracker.rb +81 -0
- data/lib/karafka/web/pro/commanding/listener.rb +23 -6
- data/lib/karafka/web/pro/commanding/manager.rb +44 -23
- data/lib/karafka/web/pro/commanding/matcher.rb +46 -18
- data/lib/karafka/web/pro/commanding/matchers/base.rb +87 -0
- data/lib/karafka/web/pro/commanding/matchers/consumer_group_id.rb +58 -0
- data/lib/karafka/web/pro/commanding/matchers/message_type.rb +49 -0
- data/lib/karafka/web/pro/commanding/matchers/partition_id.rb +61 -0
- data/lib/karafka/web/pro/commanding/matchers/process_id.rb +58 -0
- data/lib/karafka/web/pro/commanding/matchers/schema_version.rb +44 -0
- data/lib/karafka/web/pro/commanding/matchers/topic.rb +58 -0
- data/lib/karafka/web/pro/commanding/request.rb +19 -2
- data/lib/karafka/web/pro/commanding.rb +19 -2
- data/lib/karafka/web/pro/loader.rb +20 -3
- data/lib/karafka/web/pro/ui/app.rb +25 -8
- data/lib/karafka/web/pro/ui/controllers/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/cluster_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/commanding_controller.rb +37 -15
- data/lib/karafka/web/pro/ui/controllers/consumers/commands_controller.rb +23 -6
- data/lib/karafka/web/pro/ui/controllers/consumers/consumers_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +43 -42
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +36 -17
- data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +59 -33
- data/lib/karafka/web/pro/ui/controllers/consumers/topics/pauses_controller.rb +164 -0
- data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +26 -9
- data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +25 -9
- data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +22 -5
- data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +26 -9
- data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +23 -6
- data/lib/karafka/web/pro/ui/controllers/health_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +22 -5
- data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +25 -8
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +21 -4
- data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +26 -9
- data/lib/karafka/web/pro/ui/controllers/status_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/support_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +20 -3
- data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +20 -3
- data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +41 -2
- data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +24 -7
- data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/branding/config.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/branding.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/features.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/policies/config.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/policies/messages.rb +20 -3
- data/lib/karafka/web/pro/ui/lib/policies/requests.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/policies.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/safe_runner.rb +20 -3
- data/lib/karafka/web/pro/ui/lib/search/config.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +24 -6
- data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +21 -4
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +19 -2
- data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +20 -3
- data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +26 -9
- data/lib/karafka/web/pro/ui/lib/search/runner.rb +33 -16
- data/lib/karafka/web/pro/ui/lib/search.rb +19 -2
- data/lib/karafka/web/pro/ui/routes/base.rb +19 -2
- data/lib/karafka/web/pro/ui/routes/cluster.rb +21 -4
- data/lib/karafka/web/pro/ui/routes/consumers.rb +83 -49
- data/lib/karafka/web/pro/ui/routes/dashboard.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/dlq.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/errors.rb +21 -4
- data/lib/karafka/web/pro/ui/routes/explorer.rb +33 -16
- data/lib/karafka/web/pro/ui/routes/health.rb +26 -9
- data/lib/karafka/web/pro/ui/routes/jobs.rb +23 -6
- data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +29 -12
- data/lib/karafka/web/pro/ui/routes/routing.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +28 -11
- data/lib/karafka/web/pro/ui/routes/status.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/support.rb +20 -3
- data/lib/karafka/web/pro/ui/routes/topics.rb +29 -12
- data/lib/karafka/web/pro/ui/routes/ux.rb +20 -3
- data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/_config.erb +14 -3
- data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/cluster/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_backtrace.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_command.erb +24 -66
- data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_command.erb +19 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_schema.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/_table.erb +15 -4
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_acceptance.erb +19 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_request.erb +19 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/details/_result.erb +27 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_request.erb +52 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_response.erb +46 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_command_name_badge.erb +40 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_request.erb +47 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_response.erb +46 -0
- data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +14 -15
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_metrics.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition.erb +15 -5
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +16 -5
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_stopped.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_subscription_group.erb +31 -7
- data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/performance.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +14 -3
- data/lib/karafka/web/pro/ui/views/consumers/controls/index.erb +35 -7
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_job.erb +14 -3
- data/lib/karafka/web/pro/ui/views/consumers/jobs/_no_jobs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/jobs/pending.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/jobs/running.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +20 -13
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +37 -46
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +25 -14
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +17 -6
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +14 -3
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +40 -48
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +18 -8
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +22 -11
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +13 -2
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_partition_info.erb +57 -0
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +16 -5
- data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +16 -5
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_adjusting_warning.erb +38 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_breadcrumbs.erb +46 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_edit_form.erb +66 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_lrj_not_manageable.erb +30 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_new_form.erb +86 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_not_running.erb +27 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_topic_info.erb +72 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/edit.erb +29 -0
- data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/new.erb +29 -0
- data/lib/karafka/web/pro/ui/views/dashboard/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/dlq/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/errors/_error.erb +14 -3
- data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +18 -5
- data/lib/karafka/web/pro/ui/views/errors/_selector.erb +14 -3
- data/lib/karafka/web/pro/ui/views/errors/_table.erb +14 -3
- data/lib/karafka/web/pro/ui/views/errors/index.erb +39 -26
- data/lib/karafka/web/pro/ui/views/errors/partition.erb +50 -37
- data/lib/karafka/web/pro/ui/views/errors/show.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_failed_deserialization.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_filtered.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_message.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_partition_option.erb +18 -5
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_selector.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_metadata.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_payload.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_resources_utilization.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_too_big_to_be_displayed.erb +15 -4
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_detail.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_key.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_cleaned.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_empty.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_messages.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +15 -3
- data/lib/karafka/web/pro/ui/views/explorer/explorer/partition.erb +52 -39
- data/lib/karafka/web/pro/ui/views/explorer/explorer/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_actions.erb +39 -26
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_limited.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/explorer/topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +28 -16
- data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_metadata.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_no_search_criteria.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/_search_criteria.erb +14 -3
- data/lib/karafka/web/pro/ui/views/explorer/search/_search_modal.erb +27 -15
- data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +13 -2
- data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_no_data.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_no_partition_data.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partition.erb +22 -6
- data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_partitions_with_fallback.erb +15 -2
- data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/_topic_edit_options.erb +64 -0
- data/lib/karafka/web/pro/ui/views/health/changes.erb +14 -2
- data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +13 -2
- data/lib/karafka/web/pro/ui/views/health/lags.erb +14 -2
- data/lib/karafka/web/pro/ui/views/health/offsets.erb +14 -2
- data/lib/karafka/web/pro/ui/views/health/overview.erb +29 -5
- data/lib/karafka/web/pro/ui/views/jobs/_job.erb +14 -3
- data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/jobs/pending.erb +13 -2
- data/lib/karafka/web/pro/ui/views/jobs/running.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +14 -3
- data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +14 -3
- data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +14 -3
- data/lib/karafka/web/pro/ui/views/routing/_detail.erb +13 -2
- data/lib/karafka/web/pro/ui/views/routing/_topic.erb +14 -3
- data/lib/karafka/web/pro/ui/views/routing/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/routing/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_cancel.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_compacted.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_schedule.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_tombstone.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_unknown.erb +14 -3
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +52 -39
- data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +14 -3
- data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +14 -3
- data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +13 -2
- data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +13 -2
- data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +14 -3
- data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +17 -6
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +21 -10
- data/lib/karafka/web/pro/ui/views/topics/configs/index.erb +14 -3
- data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_badges.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_chart.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +18 -6
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_limited.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/distributions/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/offsets/show.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/replications/_metric_box.erb +20 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_partition.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/replications/_replication_info.erb +65 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_resilience_success.erb +24 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_low_durability.erb +67 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_no_redundancy.erb +66 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/_warning_zero_fault_tolerance.erb +67 -0
- data/lib/karafka/web/pro/ui/views/topics/replications/show.erb +15 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +25 -11
- data/lib/karafka/web/pro/ui/views/topics/topics/_tabs.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +13 -2
- data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +13 -2
- data/lib/karafka/web/processing/consumer.rb +1 -1
- data/lib/karafka/web/processing/consumers/aggregators/metrics.rb +11 -11
- data/lib/karafka/web/processing/consumers/aggregators/state.rb +4 -3
- data/lib/karafka/web/processing/consumers/reports_migrator.rb +2 -2
- data/lib/karafka/web/processing/consumers/schema_manager.rb +1 -1
- data/lib/karafka/web/processing/publisher.rb +2 -2
- data/lib/karafka/web/producer.rb +61 -0
- data/lib/karafka/web/tracking/consumers/contracts/report.rb +2 -2
- data/lib/karafka/web/tracking/consumers/contracts/subscription_group.rb +1 -0
- data/lib/karafka/web/tracking/consumers/listeners/booting.rb +1 -1
- data/lib/karafka/web/tracking/consumers/listeners/connections.rb +7 -2
- data/lib/karafka/web/tracking/consumers/listeners/errors.rb +10 -10
- data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +1 -1
- data/lib/karafka/web/tracking/consumers/listeners/processing.rb +25 -25
- data/lib/karafka/web/tracking/consumers/listeners/statistics.rb +35 -35
- data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
- data/lib/karafka/web/tracking/consumers/sampler/enrichers/consumer_groups.rb +1 -0
- data/lib/karafka/web/tracking/consumers/sampler/metrics/base.rb +2 -1
- data/lib/karafka/web/tracking/consumers/sampler/metrics/container.rb +15 -15
- data/lib/karafka/web/tracking/consumers/sampler/metrics/network.rb +6 -6
- data/lib/karafka/web/tracking/consumers/sampler/metrics/os.rb +41 -37
- data/lib/karafka/web/tracking/consumers/sampler.rb +7 -7
- data/lib/karafka/web/tracking/helpers/error_info.rb +10 -10
- data/lib/karafka/web/tracking/helpers/sysconf.rb +2 -2
- data/lib/karafka/web/tracking/helpers/ttls/array.rb +1 -1
- data/lib/karafka/web/tracking/helpers/ttls/hash.rb +1 -1
- data/lib/karafka/web/tracking/helpers/ttls/stats.rb +4 -4
- data/lib/karafka/web/tracking/producers/listeners/booting.rb +1 -1
- data/lib/karafka/web/tracking/producers/listeners/errors.rb +2 -2
- data/lib/karafka/web/tracking/producers/reporter.rb +2 -2
- data/lib/karafka/web/tracking/producers/sampler.rb +1 -1
- data/lib/karafka/web/tracking/ui/errors.rb +4 -4
- data/lib/karafka/web/ui/app.rb +2 -2
- data/lib/karafka/web/ui/base.rb +30 -30
- data/lib/karafka/web/ui/controllers/base_controller.rb +24 -24
- data/lib/karafka/web/ui/controllers/cluster_controller.rb +3 -3
- data/lib/karafka/web/ui/controllers/requests/params.rb +6 -6
- data/lib/karafka/web/ui/helpers/application_helper.rb +59 -59
- data/lib/karafka/web/ui/helpers/paths_helper.rb +15 -7
- data/lib/karafka/web/ui/helpers/tailwind_helper.rb +6 -6
- data/lib/karafka/web/ui/helpers/time_helper.rb +1 -1
- data/lib/karafka/web/ui/helpers/topics_helper.rb +4 -4
- data/lib/karafka/web/ui/lib/admin.rb +2 -2
- data/lib/karafka/web/ui/lib/paginations/base.rb +7 -7
- data/lib/karafka/web/ui/lib/paginations/offset_based.rb +2 -2
- data/lib/karafka/web/ui/lib/paginations/page_based.rb +1 -1
- data/lib/karafka/web/ui/lib/paginations/paginators/arrays.rb +3 -3
- data/lib/karafka/web/ui/lib/paginations/watermark_offsets_based.rb +1 -1
- data/lib/karafka/web/ui/lib/sorter.rb +2 -2
- data/lib/karafka/web/ui/models/counters.rb +1 -1
- data/lib/karafka/web/ui/models/health.rb +1 -0
- data/lib/karafka/web/ui/models/jobs.rb +2 -2
- data/lib/karafka/web/ui/models/message.rb +9 -9
- data/lib/karafka/web/ui/models/metrics/charts/aggregated.rb +3 -3
- data/lib/karafka/web/ui/models/metrics/charts/topics.rb +3 -3
- data/lib/karafka/web/ui/models/metrics/topics.rb +8 -8
- data/lib/karafka/web/ui/models/processes.rb +3 -3
- data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +2 -2
- data/lib/karafka/web/ui/models/status/checks/base.rb +127 -0
- data/lib/karafka/web/ui/models/status/checks/commands_topic_presence.rb +52 -0
- data/lib/karafka/web/ui/models/status/checks/connection.rb +68 -0
- data/lib/karafka/web/ui/models/status/checks/consumers_reports.rb +34 -0
- data/lib/karafka/web/ui/models/status/checks/consumers_reports_schema_state.rb +32 -0
- data/lib/karafka/web/ui/models/status/checks/consumers_schemas.rb +44 -0
- data/lib/karafka/web/ui/models/status/checks/enabled.rb +39 -0
- data/lib/karafka/web/ui/models/status/checks/initial_consumers_metrics.rb +48 -0
- data/lib/karafka/web/ui/models/status/checks/initial_consumers_state.rb +48 -0
- data/lib/karafka/web/ui/models/status/checks/live_reporting.rb +31 -0
- data/lib/karafka/web/ui/models/status/checks/materializing_lag.rb +49 -0
- data/lib/karafka/web/ui/models/status/checks/partitions.rb +45 -0
- data/lib/karafka/web/ui/models/status/checks/pro_subscription.rb +29 -0
- data/lib/karafka/web/ui/models/status/checks/replication.rb +51 -0
- data/lib/karafka/web/ui/models/status/checks/routing_topics_presence.rb +53 -0
- data/lib/karafka/web/ui/models/status/checks/state_calculation.rb +39 -0
- data/lib/karafka/web/ui/models/status/checks/topics.rb +44 -0
- data/lib/karafka/web/ui/models/status/context.rb +142 -0
- data/lib/karafka/web/ui/models/status/step.rb +64 -0
- data/lib/karafka/web/ui/models/status.rb +70 -356
- data/lib/karafka/web/ui/models/topic.rb +2 -2
- data/lib/karafka/web/ui/public/javascripts/application.min.js +1 -1
- data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
- data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
- data/lib/karafka/web/ui/public/javascripts/components/live_poll.js +2 -2
- data/lib/karafka/web/ui/public/stylesheets/application.min.css +4660 -2524
- data/lib/karafka/web/ui/public/stylesheets/application.min.css.br +0 -0
- data/lib/karafka/web/ui/public/stylesheets/application.min.css.gz +0 -0
- data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +62 -3
- data/lib/karafka/web/ui/routes/assets.rb +7 -7
- data/lib/karafka/web/ui/routes/cluster.rb +4 -4
- data/lib/karafka/web/ui/routes/consumers.rb +2 -2
- data/lib/karafka/web/ui/routes/dashboard.rb +1 -1
- data/lib/karafka/web/ui/routes/errors.rb +2 -2
- data/lib/karafka/web/ui/routes/jobs.rb +4 -4
- data/lib/karafka/web/ui/routes/routing.rb +1 -1
- data/lib/karafka/web/ui/routes/status.rb +1 -1
- data/lib/karafka/web/ui/routes/support.rb +1 -1
- data/lib/karafka/web/ui/routes/ux.rb +1 -1
- data/lib/karafka/web/ui/views/cluster/_partition.erb +1 -0
- data/lib/karafka/web/ui/views/dashboard/_counters.erb +16 -16
- data/lib/karafka/web/ui/views/errors/_detail.erb +2 -3
- data/lib/karafka/web/ui/views/errors/_error.erb +1 -1
- data/lib/karafka/web/ui/views/errors/index.erb +1 -1
- data/lib/karafka/web/ui/views/errors/show.erb +1 -1
- data/lib/karafka/web/ui/views/jobs/_job.erb +1 -1
- data/lib/karafka/web/ui/views/layout.erb +1 -1
- data/lib/karafka/web/ui/views/routing/_consumer_group.erb +1 -1
- data/lib/karafka/web/ui/views/routing/_topic.erb +1 -1
- data/lib/karafka/web/ui/views/shared/_header.erb +5 -5
- data/lib/karafka/web/ui/views/shared/_navigation.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_error.erb +2 -2
- data/lib/karafka/web/ui/views/shared/alerts/_info.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_success.erb +1 -1
- data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +2 -2
- data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +3 -3
- data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +4 -4
- data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +4 -4
- data/lib/karafka/web/ui/views/shared/exceptions/unhandled_error.erb +4 -4
- data/lib/karafka/web/ui/views/status/show.erb +15 -0
- data/lib/karafka/web/ui/views/status/warnings/_commands_topic_presence.erb +14 -0
- data/lib/karafka/web/ui/views/ux/_code.erb +0 -1
- data/lib/karafka/web/ui/views/ux/_data_table.erb +79 -0
- data/lib/karafka/web/ui/views/ux/_headers.erb +1 -1
- data/lib/karafka/web/ui/views/ux/_pagination.erb +1 -1
- data/lib/karafka/web/version.rb +1 -1
- data/lib/karafka/web.rb +17 -17
- data/package-lock.json +480 -92
- data/package.json +3 -1
- data/renovate.json +12 -11
- data/tailwind.config.js +4 -7
- metadata +72 -3
- data/lib/karafka/web/pro/ui/views/consumers/commands/_metadata.erb +0 -44
|
@@ -11,7 +11,7 @@ module Karafka
|
|
|
11
11
|
class Metrics < Base
|
|
12
12
|
# Current schema version
|
|
13
13
|
# This is used for detecting incompatible changes and writing migrations
|
|
14
|
-
SCHEMA_VERSION =
|
|
14
|
+
SCHEMA_VERSION = "1.3.0"
|
|
15
15
|
|
|
16
16
|
def initialize
|
|
17
17
|
super
|
|
@@ -43,8 +43,8 @@ module Karafka
|
|
|
43
43
|
# @return [Hash] Statistics hash
|
|
44
44
|
#
|
|
45
45
|
# @note We materialize the consumers groups time series only here and not in real time,
|
|
46
|
-
# because we materialize it based on the tracked active collective state.
|
|
47
|
-
# on each update that would not be dispatched would be pointless.
|
|
46
|
+
# because we materialize it based on the tracked active collective state.
|
|
47
|
+
# Materializing on each update that would not be dispatched would be pointless.
|
|
48
48
|
def to_h
|
|
49
49
|
metrics[:schema_version] = SCHEMA_VERSION
|
|
50
50
|
metrics[:dispatched_at] = float_now
|
|
@@ -71,7 +71,7 @@ module Karafka
|
|
|
71
71
|
max_ttl = @aggregated_from - (::Karafka::Web.config.ttl / 1_000)
|
|
72
72
|
|
|
73
73
|
@active_reports.delete_if do |_id, report|
|
|
74
|
-
report[:dispatched_at] < max_ttl || report[:process][:status] ==
|
|
74
|
+
report[:dispatched_at] < max_ttl || report[:process][:status] == "stopped"
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
|
|
@@ -93,15 +93,15 @@ module Karafka
|
|
|
93
93
|
|
|
94
94
|
iterate_partitions_data do |group_name, topic_name, partitions_data|
|
|
95
95
|
lags_hybrid = partitions_data
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
.map do |p_details|
|
|
97
|
+
lag_stored = p_details.fetch(:lag_stored, -1)
|
|
98
|
+
lag_stored.negative? ? p_details.fetch(:lag, -1) : lag_stored
|
|
99
|
+
end
|
|
100
|
+
.reject(&:negative?)
|
|
101
101
|
|
|
102
102
|
offsets_hi = partitions_data
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
.map { |p_details| p_details.fetch(:hi_offset, -1) }
|
|
104
|
+
.reject(&:negative?)
|
|
105
105
|
|
|
106
106
|
# Last stable offsets freeze durations - we pick the max freeze to indicate
|
|
107
107
|
# the longest open transaction that potentially may be hanging
|
|
@@ -20,7 +20,7 @@ module Karafka
|
|
|
20
20
|
# Current schema version
|
|
21
21
|
# This can be used in the future for detecting incompatible changes and writing
|
|
22
22
|
# migrations
|
|
23
|
-
SCHEMA_VERSION =
|
|
23
|
+
SCHEMA_VERSION = "1.4.0"
|
|
24
24
|
|
|
25
25
|
# @param schema_manager [Karafka::Web::Processing::Consumers::SchemaManager] schema
|
|
26
26
|
# manager that tracks the compatibility of schemas.
|
|
@@ -118,7 +118,8 @@ module Karafka
|
|
|
118
118
|
end
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
-
# Refreshes the counters that are computed based on incoming reports and not a
|
|
121
|
+
# Refreshes the counters that are computed based on incoming reports and not a
|
|
122
|
+
# total sum.
|
|
122
123
|
# For this we use active reports we have in memory. It may not be accurate for the first
|
|
123
124
|
# few seconds but it is much more optimal from performance perspective than computing
|
|
124
125
|
# this fetching all data from Kafka for each view.
|
|
@@ -138,7 +139,7 @@ module Karafka
|
|
|
138
139
|
|
|
139
140
|
@active_reports
|
|
140
141
|
.values
|
|
141
|
-
.reject { |report| report[:process][:status] ==
|
|
142
|
+
.reject { |report| report[:process][:status] == "stopped" }
|
|
142
143
|
.each do |report|
|
|
143
144
|
report_stats = report[:stats]
|
|
144
145
|
report_process = report[:process]
|
|
@@ -39,8 +39,8 @@ module Karafka
|
|
|
39
39
|
# Only computed when first needed to avoid memory overhead if no old reports exist
|
|
40
40
|
def migrations
|
|
41
41
|
@migrations ||= Management::Migrations::Base
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
.sorted_descendants
|
|
43
|
+
.select { |migration_class| migration_class.type == :consumers_reports }
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
end
|
|
@@ -41,14 +41,14 @@ module Karafka
|
|
|
41
41
|
# This will ensure that the consumer states are compacted
|
|
42
42
|
key: Karafka::Web.config.topics.consumers.states.name,
|
|
43
43
|
partition: 0,
|
|
44
|
-
headers: {
|
|
44
|
+
headers: { "zlib" => "true" }
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
topic: Karafka::Web.config.topics.consumers.metrics.name,
|
|
48
48
|
payload: Zlib::Deflate.deflate(consumers_metrics.to_json),
|
|
49
49
|
key: Karafka::Web.config.topics.consumers.metrics.name,
|
|
50
50
|
partition: 0,
|
|
51
|
-
headers: {
|
|
51
|
+
headers: { "zlib" => "true" }
|
|
52
52
|
}
|
|
53
53
|
]
|
|
54
54
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Karafka
|
|
4
|
+
module Web
|
|
5
|
+
# A lazy-evaluated producer wrapper that creates a low-intensity variant of the default
|
|
6
|
+
# Karafka producer when possible.
|
|
7
|
+
#
|
|
8
|
+
# Web UI reporting is not mission-critical and serves primarily analytical purposes.
|
|
9
|
+
# Users typically want stronger delivery warranties for their business producers.
|
|
10
|
+
# For web UI reporting, we can use lower acknowledgment levels to reduce overhead.
|
|
11
|
+
#
|
|
12
|
+
# This wrapper:
|
|
13
|
+
# - Returns the default producer unchanged if it's idempotent or transactional
|
|
14
|
+
# (since acks cannot be altered for these producer types)
|
|
15
|
+
# - Creates a variant with `acks: 1` for non-idempotent, non-transactional producers
|
|
16
|
+
# to reduce latency while maintaining basic delivery confirmation
|
|
17
|
+
#
|
|
18
|
+
# @note This uses SimpleDelegator to transparently proxy all producer methods
|
|
19
|
+
# @note The variant is created lazily on first access to ensure the default producer
|
|
20
|
+
# is fully initialized
|
|
21
|
+
class Producer < SimpleDelegator
|
|
22
|
+
def initialize
|
|
23
|
+
@initialized = false
|
|
24
|
+
# Initialize with nil - will be set on first access
|
|
25
|
+
super(nil)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @return [WaterDrop::Producer, WaterDrop::Producer::Variant] the underlying producer
|
|
29
|
+
# or its low-ack variant
|
|
30
|
+
def __getobj__
|
|
31
|
+
unless @initialized
|
|
32
|
+
@delegate_sd_obj = build_producer
|
|
33
|
+
@initialized = true
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
@delegate_sd_obj
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# Builds the appropriate producer based on the default producer's configuration
|
|
42
|
+
#
|
|
43
|
+
# @return [WaterDrop::Producer, WaterDrop::Producer::Variant] either the default producer
|
|
44
|
+
# (if idempotent/transactional) or a low-ack variant
|
|
45
|
+
def build_producer
|
|
46
|
+
default = ::Karafka.producer
|
|
47
|
+
|
|
48
|
+
# Idempotent producers require acks: all - cannot create variants with different acks
|
|
49
|
+
return default if default.idempotent?
|
|
50
|
+
# Transactional producers also require acks: all
|
|
51
|
+
return default if default.transactional?
|
|
52
|
+
|
|
53
|
+
# For non-idempotent, non-transactional producers, create a variant with lower acks
|
|
54
|
+
# acks: 0 means fire-and-forget - no acknowledgment required
|
|
55
|
+
# This is acceptable for non-critical analytics/monitoring data where occasional
|
|
56
|
+
# message loss is not a concern
|
|
57
|
+
default.variant(topic_config: { acks: 0 })
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -16,11 +16,11 @@ module Karafka
|
|
|
16
16
|
required(:dispatched_at) { |val| val.is_a?(Numeric) && val.positive? }
|
|
17
17
|
# We have consumers and producer reports and need to ensure that each is handled
|
|
18
18
|
# in an expected fashion
|
|
19
|
-
required(:type) { |val| val ==
|
|
19
|
+
required(:type) { |val| val == "consumer" }
|
|
20
20
|
|
|
21
21
|
nested(:process) do
|
|
22
22
|
required(:started_at) { |val| val.is_a?(Numeric) && val.positive? }
|
|
23
|
-
required(:id) { |val| val.is_a?(String) && val.count(
|
|
23
|
+
required(:id) { |val| val.is_a?(String) && val.count(":") >= 2 }
|
|
24
24
|
required(:cpus) { |val| val.is_a?(Integer) && val >= 1 }
|
|
25
25
|
required(:memory_usage) { |val| val.is_a?(Integer) && val >= 0 }
|
|
26
26
|
required(:memory_total_usage) { |val| val.is_a?(Integer) && val >= 0 }
|
|
@@ -12,6 +12,7 @@ module Karafka
|
|
|
12
12
|
|
|
13
13
|
required(:id) { |val| val.is_a?(String) && !val.empty? }
|
|
14
14
|
required(:topics) { |val| val.is_a?(Hash) }
|
|
15
|
+
required(:instance_id) { |val| val == false || val.is_a?(String) }
|
|
15
16
|
|
|
16
17
|
nested(:state) do
|
|
17
18
|
required(:state) { |val| val.is_a?(String) && !val.empty? }
|
|
@@ -10,11 +10,16 @@ module Karafka
|
|
|
10
10
|
# Initializes the subscription group with defaults so it is always available
|
|
11
11
|
# @param event [Karafka::Core::Monitoring::Event]
|
|
12
12
|
def on_connection_listener_before_fetch_loop(event)
|
|
13
|
-
|
|
13
|
+
subscription_group = event[:subscription_group]
|
|
14
|
+
sg_id = subscription_group.id
|
|
15
|
+
# Use false to explicitly indicate static membership is not configured
|
|
16
|
+
# vs nil which could be ambiguous
|
|
17
|
+
instance_id = subscription_group.kafka[:"group.instance.id"] || false
|
|
14
18
|
|
|
15
19
|
track do |sampler|
|
|
16
20
|
# This will initialize the hash upon first request
|
|
17
|
-
sampler.subscription_groups[sg_id]
|
|
21
|
+
sg = sampler.subscription_groups[sg_id]
|
|
22
|
+
sg[:instance_id] = instance_id
|
|
18
23
|
end
|
|
19
24
|
end
|
|
20
25
|
|
|
@@ -10,7 +10,7 @@ module Karafka
|
|
|
10
10
|
include Tracking::Helpers::ErrorInfo
|
|
11
11
|
|
|
12
12
|
# Schema used by consumers error reporting
|
|
13
|
-
SCHEMA_VERSION =
|
|
13
|
+
SCHEMA_VERSION = "1.2.0"
|
|
14
14
|
|
|
15
15
|
private_constant :SCHEMA_VERSION
|
|
16
16
|
|
|
@@ -23,15 +23,15 @@ module Karafka
|
|
|
23
23
|
# Collect extra info if it was a consumer related error.
|
|
24
24
|
# Those come from user code
|
|
25
25
|
details = case caller_ref
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
when Karafka::BaseConsumer
|
|
27
|
+
extract_consumer_info(caller_ref)
|
|
28
|
+
when Karafka::Connection::Client
|
|
29
|
+
extract_client_info(caller_ref)
|
|
30
|
+
when Karafka::Connection::Listener
|
|
31
|
+
extract_listener_info(caller_ref)
|
|
32
|
+
else
|
|
33
|
+
{}
|
|
34
|
+
end
|
|
35
35
|
|
|
36
36
|
error_class, error_message, backtrace = extract_error_info(event[:error])
|
|
37
37
|
|
|
@@ -68,8 +68,8 @@ module Karafka
|
|
|
68
68
|
def on_consumer_consume(event)
|
|
69
69
|
consumer = event.payload[:caller]
|
|
70
70
|
messages_count = consumer.messages.size
|
|
71
|
-
jid = job_id(consumer,
|
|
72
|
-
job_details = job_details(consumer,
|
|
71
|
+
jid = job_id(consumer, "consume")
|
|
72
|
+
job_details = job_details(consumer, "consume")
|
|
73
73
|
|
|
74
74
|
track do |sampler|
|
|
75
75
|
# We count batches and messages prior to the execution, so they are tracked even
|
|
@@ -87,7 +87,7 @@ module Karafka
|
|
|
87
87
|
# @param event [Karafka::Core::Monitoring::Event]
|
|
88
88
|
def on_consumer_consumed(event)
|
|
89
89
|
consumer = event.payload[:caller]
|
|
90
|
-
jid = job_id(consumer,
|
|
90
|
+
jid = job_id(consumer, "consume")
|
|
91
91
|
|
|
92
92
|
track do |sampler|
|
|
93
93
|
sampler.jobs.delete(jid)
|
|
@@ -100,23 +100,23 @@ module Karafka
|
|
|
100
100
|
def on_error_occurred(event)
|
|
101
101
|
track do |sampler|
|
|
102
102
|
type = case event[:type]
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
103
|
+
when "consumer.consume.error"
|
|
104
|
+
"consume"
|
|
105
|
+
when "consumer.revoked.error"
|
|
106
|
+
"revoked"
|
|
107
|
+
when "consumer.shutdown.error"
|
|
108
|
+
"shutdown"
|
|
109
|
+
when "consumer.tick.error"
|
|
110
|
+
"tick"
|
|
111
|
+
when "consumer.eofed.error"
|
|
112
|
+
"eofed"
|
|
113
|
+
# This is not a user facing execution flow, but internal system one
|
|
114
|
+
# that is why it will not be reported as a separate job for the UI
|
|
115
|
+
when "consumer.idle.error"
|
|
116
|
+
false
|
|
117
|
+
else
|
|
118
|
+
false
|
|
119
|
+
end
|
|
120
120
|
|
|
121
121
|
# job reference only exists for consumer work related operations.
|
|
122
122
|
# Only for them we need to deregister the job reference.
|
|
@@ -132,10 +132,10 @@ module Karafka
|
|
|
132
132
|
# Consume has a bit different reporting flow than other jobs because it bumps certain
|
|
133
133
|
# counters that other jobs do not. This is why it is defined above separately
|
|
134
134
|
[
|
|
135
|
-
[:revoke, :revoked,
|
|
136
|
-
[:shutting_down, :shutdown,
|
|
137
|
-
[:tick, :ticked,
|
|
138
|
-
[:eof, :eofed,
|
|
135
|
+
[:revoke, :revoked, "revoked"],
|
|
136
|
+
[:shutting_down, :shutdown, "shutdown"],
|
|
137
|
+
[:tick, :ticked, "tick"],
|
|
138
|
+
[:eof, :eofed, "eofed"]
|
|
139
139
|
].each do |pre, post, action|
|
|
140
140
|
# Dynamically creates methods like:
|
|
141
141
|
# def on_consumer_revoke(event)
|
|
@@ -227,7 +227,7 @@ module Karafka
|
|
|
227
227
|
consumer_group: consumer.topic.consumer_group.id,
|
|
228
228
|
type: type,
|
|
229
229
|
tags: consumer.tags,
|
|
230
|
-
status:
|
|
230
|
+
status: "running"
|
|
231
231
|
}
|
|
232
232
|
end
|
|
233
233
|
end
|
|
@@ -12,8 +12,8 @@ module Karafka
|
|
|
12
12
|
# @param event [Karafka::Core::Monitoring::Event]
|
|
13
13
|
def on_statistics_emitted(event)
|
|
14
14
|
statistics = event[:statistics]
|
|
15
|
-
topics = statistics.fetch(
|
|
16
|
-
cgrp = statistics.fetch(
|
|
15
|
+
topics = statistics.fetch("topics")
|
|
16
|
+
cgrp = statistics.fetch("cgrp")
|
|
17
17
|
cg_id = event[:consumer_group_id]
|
|
18
18
|
sg_id = event[:subscription_group_id]
|
|
19
19
|
sg_details = extract_sg_details(sg_id, cgrp)
|
|
@@ -25,7 +25,7 @@ module Karafka
|
|
|
25
25
|
# in track as we merge data from multiple subscription groups
|
|
26
26
|
track do |sampler|
|
|
27
27
|
topics.each do |topic_name, topic_values|
|
|
28
|
-
partitions = topic_values.fetch(
|
|
28
|
+
partitions = topic_values.fetch("partitions")
|
|
29
29
|
|
|
30
30
|
partitions.each do |pt_name, pt_stats|
|
|
31
31
|
pt_id = pt_name.to_i
|
|
@@ -64,18 +64,18 @@ module Karafka
|
|
|
64
64
|
#
|
|
65
65
|
# @param statistics [Hash] statistics hash
|
|
66
66
|
def track_transfers(statistics)
|
|
67
|
-
brokers = statistics.fetch(
|
|
67
|
+
brokers = statistics.fetch("brokers", {})
|
|
68
68
|
|
|
69
69
|
return if brokers.empty?
|
|
70
70
|
|
|
71
71
|
track do |sampler|
|
|
72
|
-
client_name = statistics.fetch(
|
|
72
|
+
client_name = statistics.fetch("name")
|
|
73
73
|
|
|
74
74
|
brokers.each do |broker_name, values|
|
|
75
75
|
scope_name = "#{client_name}-#{broker_name}"
|
|
76
76
|
|
|
77
|
-
sampler.windows.m1["#{scope_name}-rxbytes"] << values.fetch(
|
|
78
|
-
sampler.windows.m1["#{scope_name}-txbytes"] << values.fetch(
|
|
77
|
+
sampler.windows.m1["#{scope_name}-rxbytes"] << values.fetch("rxbytes", 0)
|
|
78
|
+
sampler.windows.m1["#{scope_name}-txbytes"] << values.fetch("txbytes", 0)
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
end
|
|
@@ -88,12 +88,12 @@ module Karafka
|
|
|
88
88
|
{
|
|
89
89
|
id: sg_id,
|
|
90
90
|
state: sg_stats.slice(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
"state",
|
|
92
|
+
"join_state",
|
|
93
|
+
"stateage",
|
|
94
|
+
"rebalance_age",
|
|
95
|
+
"rebalance_cnt",
|
|
96
|
+
"rebalance_reason"
|
|
97
97
|
).transform_keys(&:to_sym),
|
|
98
98
|
topics: {}
|
|
99
99
|
}
|
|
@@ -108,11 +108,11 @@ module Karafka
|
|
|
108
108
|
|
|
109
109
|
# Collect information only about what we are subscribed to and what we fetch or
|
|
110
110
|
# work in any way. Stopped means, we stopped working with it
|
|
111
|
-
return false if pt_stats[
|
|
111
|
+
return false if pt_stats["fetch_state"] == "stopped"
|
|
112
112
|
|
|
113
113
|
# Return if we no longer fetch this partition in a particular process. None means
|
|
114
114
|
# that we no longer have this subscription assigned and we do not fetch
|
|
115
|
-
return false if pt_stats[
|
|
115
|
+
return false if pt_stats["fetch_state"] == "none"
|
|
116
116
|
|
|
117
117
|
true
|
|
118
118
|
end
|
|
@@ -123,29 +123,29 @@ module Karafka
|
|
|
123
123
|
# @return [Hash] extracted partition metrics
|
|
124
124
|
def extract_partition_metrics(pt_stats)
|
|
125
125
|
metrics = pt_stats.slice(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
126
|
+
"consumer_lag",
|
|
127
|
+
"consumer_lag_d",
|
|
128
|
+
"consumer_lag_stored",
|
|
129
|
+
"consumer_lag_stored_d",
|
|
130
|
+
"committed_offset",
|
|
131
131
|
# Can be useful to track the frequency of flushes when there is progress
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
"committed_offset_fd",
|
|
133
|
+
"stored_offset",
|
|
134
134
|
# Can be useful to track the frequency of flushes when there is progress
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
135
|
+
"stored_offset_fd",
|
|
136
|
+
"fetch_state",
|
|
137
|
+
"hi_offset",
|
|
138
|
+
"hi_offset_fd",
|
|
139
|
+
"lo_offset",
|
|
140
|
+
"eof_offset",
|
|
141
|
+
"ls_offset",
|
|
142
142
|
# Two below can be useful for detection of hanging transactions
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
"ls_offset_d",
|
|
144
|
+
"ls_offset_fd"
|
|
145
145
|
)
|
|
146
146
|
|
|
147
147
|
# Rename as we do not need `consumer_` prefix
|
|
148
|
-
metrics.transform_keys! { |key| key.gsub(
|
|
148
|
+
metrics.transform_keys! { |key| key.gsub("consumer_", "") }
|
|
149
149
|
metrics.transform_keys!(&:to_sym)
|
|
150
150
|
|
|
151
151
|
metrics
|
|
@@ -156,16 +156,16 @@ module Karafka
|
|
|
156
156
|
# @param pt_id [Integer] partition id
|
|
157
157
|
# @return [String] poll state / is partition paused or not
|
|
158
158
|
def poll_details(sg_id, topic_name, pt_id)
|
|
159
|
-
pause_id = [sg_id, topic_name, pt_id].join(
|
|
159
|
+
pause_id = [sg_id, topic_name, pt_id].join("-")
|
|
160
160
|
|
|
161
|
-
details = { poll_state:
|
|
161
|
+
details = { poll_state: "active", poll_state_ch: 0 }
|
|
162
162
|
|
|
163
163
|
pause_details = sampler.pauses[pause_id]
|
|
164
164
|
|
|
165
165
|
return details unless pause_details
|
|
166
166
|
|
|
167
167
|
{
|
|
168
|
-
poll_state:
|
|
168
|
+
poll_state: "paused",
|
|
169
169
|
poll_state_ch: [(pause_details.fetch(:paused_till) - monotonic_now).round, 0].max
|
|
170
170
|
}
|
|
171
171
|
end
|
|
@@ -71,7 +71,7 @@ module Karafka
|
|
|
71
71
|
payload: Zlib::Deflate.deflate(report.to_json),
|
|
72
72
|
key: process_id,
|
|
73
73
|
partition: 0,
|
|
74
|
-
headers: {
|
|
74
|
+
headers: { "zlib" => "true" }
|
|
75
75
|
}
|
|
76
76
|
]
|
|
77
77
|
|
|
@@ -84,7 +84,7 @@ module Karafka
|
|
|
84
84
|
payload: Zlib::Deflate.deflate(error.to_json),
|
|
85
85
|
# Always dispatch errors from the same process to the same partition
|
|
86
86
|
key: process_id,
|
|
87
|
-
headers: {
|
|
87
|
+
headers: { "zlib" => "true" }
|
|
88
88
|
}
|
|
89
89
|
end
|
|
90
90
|
|
|
@@ -50,6 +50,7 @@ module Karafka
|
|
|
50
50
|
|
|
51
51
|
polled_at = sg_tracking.fetch(:polled_at)
|
|
52
52
|
sg_details[:state][:poll_age] = (monotonic_now - polled_at).round(2)
|
|
53
|
+
sg_details[:instance_id] = sg_tracking[:instance_id]
|
|
53
54
|
|
|
54
55
|
sg_details[:topics].each do |topic_name, topic_details|
|
|
55
56
|
topic_details[:partitions].each do |partition_id, partition_details|
|
|
@@ -8,7 +8,8 @@ module Karafka
|
|
|
8
8
|
# Namespace for metrics collectors that gather various system and process statistics
|
|
9
9
|
module Metrics
|
|
10
10
|
# Base class for metrics collectors
|
|
11
|
-
# This is an abstract base class that can be extended to create custom metrics
|
|
11
|
+
# This is an abstract base class that can be extended to create custom metrics
|
|
12
|
+
# collectors
|
|
12
13
|
class Base
|
|
13
14
|
# Placeholder for future common functionality
|
|
14
15
|
end
|
|
@@ -11,16 +11,16 @@ module Karafka
|
|
|
11
11
|
# Supports both cgroups v1 and v2
|
|
12
12
|
class Container < Os
|
|
13
13
|
# Maximum value that represents "no limit" in cgroup v2
|
|
14
|
-
CGROUP_V2_MAX =
|
|
14
|
+
CGROUP_V2_MAX = "max"
|
|
15
15
|
|
|
16
16
|
# Paths for cgroup detection and reading
|
|
17
|
-
CGROUP_V2_CONTROLLERS =
|
|
17
|
+
CGROUP_V2_CONTROLLERS = "/sys/fs/cgroup/cgroup.controllers"
|
|
18
18
|
|
|
19
19
|
# Memory paths
|
|
20
20
|
# Path to cgroup v1 memory limit file
|
|
21
|
-
CGROUP_V1_MEMORY_LIMIT =
|
|
21
|
+
CGROUP_V1_MEMORY_LIMIT = "/sys/fs/cgroup/memory/memory.limit_in_bytes"
|
|
22
22
|
# Path to cgroup v2 memory limit file
|
|
23
|
-
CGROUP_V2_MEMORY_LIMIT =
|
|
23
|
+
CGROUP_V2_MEMORY_LIMIT = "/sys/fs/cgroup/memory.max"
|
|
24
24
|
|
|
25
25
|
private_constant(
|
|
26
26
|
:CGROUP_V2_MAX,
|
|
@@ -42,11 +42,11 @@ module Karafka
|
|
|
42
42
|
return @memory_limit if instance_variable_defined?(:@memory_limit)
|
|
43
43
|
|
|
44
44
|
@memory_limit = case cgroup_version
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
when :v2
|
|
46
|
+
read_cgroup_v2_memory_limit
|
|
47
|
+
when :v1
|
|
48
|
+
read_cgroup_v1_memory_limit
|
|
49
|
+
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
private
|
|
@@ -57,10 +57,10 @@ module Karafka
|
|
|
57
57
|
return @cgroup_version if instance_variable_defined?(:@cgroup_version)
|
|
58
58
|
|
|
59
59
|
@cgroup_version = if File.exist?(CGROUP_V2_CONTROLLERS)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
:v2
|
|
61
|
+
elsif File.exist?(CGROUP_V1_MEMORY_LIMIT)
|
|
62
|
+
:v1
|
|
63
|
+
end
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
# Reads memory limit from cgroup v2
|
|
@@ -75,7 +75,7 @@ module Karafka
|
|
|
75
75
|
|
|
76
76
|
# Convert from bytes to kilobytes
|
|
77
77
|
limit.to_i / 1024
|
|
78
|
-
rescue
|
|
78
|
+
rescue
|
|
79
79
|
nil
|
|
80
80
|
end
|
|
81
81
|
|
|
@@ -92,7 +92,7 @@ module Karafka
|
|
|
92
92
|
|
|
93
93
|
# Convert from bytes to kilobytes
|
|
94
94
|
limit / 1024
|
|
95
|
-
rescue
|
|
95
|
+
rescue
|
|
96
96
|
nil
|
|
97
97
|
end
|
|
98
98
|
end
|
|
@@ -14,14 +14,14 @@ module Karafka
|
|
|
14
14
|
@windows = windows
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
# @return [Integer] number of bytes received per second out of a one minute time
|
|
18
|
-
# by all the consumers
|
|
19
|
-
# @note We use one minute window to compensate for cases where metrics would be
|
|
20
|
-
# or recorded faster or slower. This normalizes data
|
|
17
|
+
# @return [Integer] number of bytes received per second out of a one minute time
|
|
18
|
+
# window by all the consumers
|
|
19
|
+
# @note We use one minute window to compensate for cases where metrics would be
|
|
20
|
+
# reported or recorded faster or slower. This normalizes data
|
|
21
21
|
def bytes_received
|
|
22
22
|
windows
|
|
23
23
|
.m1
|
|
24
|
-
.stats_from { |k, _v| k.end_with?(
|
|
24
|
+
.stats_from { |k, _v| k.end_with?("rxbytes") }
|
|
25
25
|
.rps
|
|
26
26
|
.round
|
|
27
27
|
end
|
|
@@ -31,7 +31,7 @@ module Karafka
|
|
|
31
31
|
def bytes_sent
|
|
32
32
|
windows
|
|
33
33
|
.m1
|
|
34
|
-
.stats_from { |k, _v| k.end_with?(
|
|
34
|
+
.stats_from { |k, _v| k.end_with?("txbytes") }
|
|
35
35
|
.rps
|
|
36
36
|
.round
|
|
37
37
|
end
|