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.
Files changed (517) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Gemfile +9 -10
  4. data/Gemfile.lint +14 -0
  5. data/Gemfile.lint.lock +123 -0
  6. data/Gemfile.lock +15 -16
  7. data/README.md +15 -15
  8. data/Rakefile +2 -2
  9. data/bin/balance_specs +120 -0
  10. data/bin/check_coverage +31 -0
  11. data/bin/collect_timings +83 -0
  12. data/bin/rspecs +10 -0
  13. data/bin/rspecs_parallel +111 -0
  14. data/docker-compose.yml +1 -1
  15. data/karafka-web.gemspec +35 -35
  16. data/lib/karafka/web/cli/base.rb +2 -2
  17. data/lib/karafka/web/cli/help.rb +2 -2
  18. data/lib/karafka/web/cli/install.rb +3 -3
  19. data/lib/karafka/web/cli/migrate.rb +3 -3
  20. data/lib/karafka/web/cli/reset.rb +3 -3
  21. data/lib/karafka/web/cli/uninstall.rb +1 -1
  22. data/lib/karafka/web/config.rb +40 -32
  23. data/lib/karafka/web/contracts/base.rb +2 -2
  24. data/lib/karafka/web/deserializer.rb +5 -5
  25. data/lib/karafka/web/installer.rb +14 -14
  26. data/lib/karafka/web/management/actions/base.rb +5 -5
  27. data/lib/karafka/web/management/actions/clean_boot_file.rb +3 -3
  28. data/lib/karafka/web/management/actions/create_initial_states.rb +8 -8
  29. data/lib/karafka/web/management/actions/enable.rb +3 -3
  30. data/lib/karafka/web/management/actions/extend_boot_file.rb +3 -3
  31. data/lib/karafka/web/management/migrations/base.rb +3 -3
  32. data/lib/karafka/web/management/migrations/consumers_metrics/0_set_initial.rb +1 -1
  33. data/lib/karafka/web/management/migrations/consumers_metrics/1699543515_fill_missing_received_and_sent_bytes.rb +1 -1
  34. data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_introduce_waiting.rb +1 -1
  35. data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_remove_processing.rb +1 -1
  36. data/lib/karafka/web/management/migrations/consumers_metrics/1704722380_split_listeners_into_active_and_paused.rb +7 -7
  37. data/lib/karafka/web/management/migrations/consumers_metrics/1706607960_introduce_lag_total.rb +1 -1
  38. data/lib/karafka/web/management/migrations/consumers_metrics/1706611396_rename_lag_total_to_lag_hybrid.rb +1 -1
  39. data/lib/karafka/web/management/migrations/consumers_metrics/1716218393_populate_jobs_metrics.rb +1 -1
  40. data/lib/karafka/web/management/migrations/consumers_reports/1761645571_rename_process_name_to_id.rb +1 -1
  41. data/lib/karafka/web/management/migrations/consumers_reports/1765657887_add_group_instance_id_to_subscription_groups.rb +42 -0
  42. data/lib/karafka/web/management/migrations/consumers_states/0_set_initial.rb +2 -2
  43. data/lib/karafka/web/management/migrations/consumers_states/1699543515_fill_missing_received_and_sent_bytes.rb +1 -1
  44. data/lib/karafka/web/management/migrations/consumers_states/1700234522_introduce_waiting.rb +1 -1
  45. data/lib/karafka/web/management/migrations/consumers_states/1700234522_remove_processing.rb +1 -1
  46. data/lib/karafka/web/management/migrations/consumers_states/1704722380_split_listeners_into_active_and_paused.rb +7 -7
  47. data/lib/karafka/web/management/migrations/consumers_states/1706607960_introduce_lag_total.rb +1 -1
  48. data/lib/karafka/web/management/migrations/consumers_states/1706611396_rename_lag_total_to_lag_hybrid.rb +1 -1
  49. data/lib/karafka/web/management/migrations/consumers_states/1716218393_add_jobs_counter.rb +1 -1
  50. data/lib/karafka/web/management/migrator.rb +2 -2
  51. data/lib/karafka/web/pro/commanding/commands/base.rb +20 -4
  52. data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +22 -5
  53. data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +22 -5
  54. data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +21 -4
  55. data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +20 -3
  56. data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +20 -3
  57. data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +20 -3
  58. data/lib/karafka/web/pro/commanding/commands/topics/pause.rb +48 -0
  59. data/lib/karafka/web/pro/commanding/commands/topics/resume.rb +49 -0
  60. data/lib/karafka/web/pro/commanding/config.rb +23 -5
  61. data/lib/karafka/web/pro/commanding/contracts/config.rb +21 -4
  62. data/lib/karafka/web/pro/commanding/dispatcher.rb +61 -26
  63. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +20 -3
  64. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +21 -4
  65. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +20 -3
  66. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +24 -7
  67. data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +36 -12
  68. data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +47 -8
  69. data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +62 -13
  70. data/lib/karafka/web/pro/commanding/handlers/topics/commands/base.rb +109 -0
  71. data/lib/karafka/web/pro/commanding/handlers/topics/commands/pause.rb +76 -0
  72. data/lib/karafka/web/pro/commanding/handlers/topics/commands/resume.rb +56 -0
  73. data/lib/karafka/web/pro/commanding/handlers/topics/executor.rb +75 -0
  74. data/lib/karafka/web/pro/commanding/handlers/topics/listener.rb +82 -0
  75. data/lib/karafka/web/pro/commanding/handlers/topics/tracker.rb +81 -0
  76. data/lib/karafka/web/pro/commanding/listener.rb +23 -6
  77. data/lib/karafka/web/pro/commanding/manager.rb +44 -23
  78. data/lib/karafka/web/pro/commanding/matcher.rb +46 -18
  79. data/lib/karafka/web/pro/commanding/matchers/base.rb +87 -0
  80. data/lib/karafka/web/pro/commanding/matchers/consumer_group_id.rb +58 -0
  81. data/lib/karafka/web/pro/commanding/matchers/message_type.rb +49 -0
  82. data/lib/karafka/web/pro/commanding/matchers/partition_id.rb +61 -0
  83. data/lib/karafka/web/pro/commanding/matchers/process_id.rb +58 -0
  84. data/lib/karafka/web/pro/commanding/matchers/schema_version.rb +44 -0
  85. data/lib/karafka/web/pro/commanding/matchers/topic.rb +58 -0
  86. data/lib/karafka/web/pro/commanding/request.rb +19 -2
  87. data/lib/karafka/web/pro/commanding.rb +19 -2
  88. data/lib/karafka/web/pro/loader.rb +20 -3
  89. data/lib/karafka/web/pro/ui/app.rb +25 -8
  90. data/lib/karafka/web/pro/ui/controllers/base_controller.rb +19 -2
  91. data/lib/karafka/web/pro/ui/controllers/cluster_controller.rb +19 -2
  92. data/lib/karafka/web/pro/ui/controllers/consumers/base_controller.rb +19 -2
  93. data/lib/karafka/web/pro/ui/controllers/consumers/commanding_controller.rb +37 -15
  94. data/lib/karafka/web/pro/ui/controllers/consumers/commands_controller.rb +23 -6
  95. data/lib/karafka/web/pro/ui/controllers/consumers/consumers_controller.rb +19 -2
  96. data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +19 -2
  97. data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +19 -2
  98. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +43 -42
  99. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +36 -17
  100. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +59 -33
  101. data/lib/karafka/web/pro/ui/controllers/consumers/topics/pauses_controller.rb +164 -0
  102. data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +19 -2
  103. data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +26 -9
  104. data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +25 -9
  105. data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +19 -2
  106. data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +22 -5
  107. data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +26 -9
  108. data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +23 -6
  109. data/lib/karafka/web/pro/ui/controllers/health_controller.rb +19 -2
  110. data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +19 -2
  111. data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +22 -5
  112. data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +19 -2
  113. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +19 -2
  114. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +25 -8
  115. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +21 -4
  116. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +26 -9
  117. data/lib/karafka/web/pro/ui/controllers/status_controller.rb +19 -2
  118. data/lib/karafka/web/pro/ui/controllers/support_controller.rb +19 -2
  119. data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +19 -2
  120. data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +20 -3
  121. data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +20 -3
  122. data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +19 -2
  123. data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +41 -2
  124. data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +24 -7
  125. data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +19 -2
  126. data/lib/karafka/web/pro/ui/lib/branding/config.rb +19 -2
  127. data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +21 -4
  128. data/lib/karafka/web/pro/ui/lib/branding.rb +19 -2
  129. data/lib/karafka/web/pro/ui/lib/features.rb +19 -2
  130. data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +19 -2
  131. data/lib/karafka/web/pro/ui/lib/policies/config.rb +19 -2
  132. data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +21 -4
  133. data/lib/karafka/web/pro/ui/lib/policies/messages.rb +20 -3
  134. data/lib/karafka/web/pro/ui/lib/policies/requests.rb +19 -2
  135. data/lib/karafka/web/pro/ui/lib/policies.rb +19 -2
  136. data/lib/karafka/web/pro/ui/lib/safe_runner.rb +20 -3
  137. data/lib/karafka/web/pro/ui/lib/search/config.rb +19 -2
  138. data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +21 -4
  139. data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +24 -6
  140. data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +21 -4
  141. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +19 -2
  142. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +19 -2
  143. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +20 -3
  144. data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +26 -9
  145. data/lib/karafka/web/pro/ui/lib/search/runner.rb +33 -16
  146. data/lib/karafka/web/pro/ui/lib/search.rb +19 -2
  147. data/lib/karafka/web/pro/ui/routes/base.rb +19 -2
  148. data/lib/karafka/web/pro/ui/routes/cluster.rb +21 -4
  149. data/lib/karafka/web/pro/ui/routes/consumers.rb +83 -49
  150. data/lib/karafka/web/pro/ui/routes/dashboard.rb +20 -3
  151. data/lib/karafka/web/pro/ui/routes/dlq.rb +20 -3
  152. data/lib/karafka/web/pro/ui/routes/errors.rb +21 -4
  153. data/lib/karafka/web/pro/ui/routes/explorer.rb +33 -16
  154. data/lib/karafka/web/pro/ui/routes/health.rb +26 -9
  155. data/lib/karafka/web/pro/ui/routes/jobs.rb +23 -6
  156. data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +29 -12
  157. data/lib/karafka/web/pro/ui/routes/routing.rb +20 -3
  158. data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +28 -11
  159. data/lib/karafka/web/pro/ui/routes/status.rb +20 -3
  160. data/lib/karafka/web/pro/ui/routes/support.rb +20 -3
  161. data/lib/karafka/web/pro/ui/routes/topics.rb +29 -12
  162. data/lib/karafka/web/pro/ui/routes/ux.rb +20 -3
  163. data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +13 -2
  164. data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +13 -2
  165. data/lib/karafka/web/pro/ui/views/cluster/_config.erb +14 -3
  166. data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +13 -2
  167. data/lib/karafka/web/pro/ui/views/cluster/index.erb +13 -2
  168. data/lib/karafka/web/pro/ui/views/cluster/show.erb +13 -2
  169. data/lib/karafka/web/pro/ui/views/consumers/commands/_backtrace.erb +13 -2
  170. data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +13 -2
  171. data/lib/karafka/web/pro/ui/views/consumers/commands/_command.erb +24 -66
  172. data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +13 -2
  173. data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +13 -2
  174. data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_command.erb +19 -0
  175. data/lib/karafka/web/pro/ui/views/consumers/commands/_incompatible_schema.erb +13 -2
  176. data/lib/karafka/web/pro/ui/views/consumers/commands/_table.erb +15 -4
  177. data/lib/karafka/web/pro/ui/views/consumers/commands/details/_acceptance.erb +19 -0
  178. data/lib/karafka/web/pro/ui/views/consumers/commands/details/_request.erb +19 -0
  179. data/lib/karafka/web/pro/ui/views/consumers/commands/details/_result.erb +27 -0
  180. data/lib/karafka/web/pro/ui/views/consumers/commands/index.erb +13 -2
  181. data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_request.erb +52 -0
  182. data/lib/karafka/web/pro/ui/views/consumers/commands/metadata/_response.erb +46 -0
  183. data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_command_name_badge.erb +40 -0
  184. data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_request.erb +47 -0
  185. data/lib/karafka/web/pro/ui/views/consumers/commands/rows/_response.erb +46 -0
  186. data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +14 -15
  187. data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +13 -2
  188. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +13 -2
  189. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +13 -2
  190. data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +13 -2
  191. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +13 -2
  192. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +13 -2
  193. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_metrics.erb +13 -2
  194. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +13 -2
  195. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition.erb +15 -5
  196. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +16 -5
  197. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_stopped.erb +13 -2
  198. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_subscription_group.erb +31 -7
  199. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_tabs.erb +13 -2
  200. data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +13 -2
  201. data/lib/karafka/web/pro/ui/views/consumers/consumers/index.erb +13 -2
  202. data/lib/karafka/web/pro/ui/views/consumers/consumers/performance.erb +13 -2
  203. data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +13 -2
  204. data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +13 -2
  205. data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +14 -3
  206. data/lib/karafka/web/pro/ui/views/consumers/controls/index.erb +35 -7
  207. data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +13 -2
  208. data/lib/karafka/web/pro/ui/views/consumers/jobs/_job.erb +14 -3
  209. data/lib/karafka/web/pro/ui/views/consumers/jobs/_no_jobs.erb +13 -2
  210. data/lib/karafka/web/pro/ui/views/consumers/jobs/pending.erb +13 -2
  211. data/lib/karafka/web/pro/ui/views/consumers/jobs/running.erb +13 -2
  212. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +20 -13
  213. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +37 -46
  214. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +25 -14
  215. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +13 -2
  216. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +13 -2
  217. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +17 -6
  218. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +13 -2
  219. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +14 -3
  220. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +40 -48
  221. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +18 -8
  222. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +13 -2
  223. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +22 -11
  224. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +13 -2
  225. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_partition_info.erb +57 -0
  226. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +16 -5
  227. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +16 -5
  228. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_adjusting_warning.erb +38 -0
  229. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_breadcrumbs.erb +46 -0
  230. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_edit_form.erb +66 -0
  231. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_lrj_not_manageable.erb +30 -0
  232. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_new_form.erb +86 -0
  233. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_not_running.erb +27 -0
  234. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/_topic_info.erb +72 -0
  235. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/edit.erb +29 -0
  236. data/lib/karafka/web/pro/ui/views/consumers/topics/pauses/new.erb +29 -0
  237. data/lib/karafka/web/pro/ui/views/dashboard/index.erb +13 -2
  238. data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +13 -2
  239. data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +13 -2
  240. data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +13 -2
  241. data/lib/karafka/web/pro/ui/views/dlq/index.erb +13 -2
  242. data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +13 -2
  243. data/lib/karafka/web/pro/ui/views/errors/_error.erb +14 -3
  244. data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +18 -5
  245. data/lib/karafka/web/pro/ui/views/errors/_selector.erb +14 -3
  246. data/lib/karafka/web/pro/ui/views/errors/_table.erb +14 -3
  247. data/lib/karafka/web/pro/ui/views/errors/index.erb +39 -26
  248. data/lib/karafka/web/pro/ui/views/errors/partition.erb +50 -37
  249. data/lib/karafka/web/pro/ui/views/errors/show.erb +14 -3
  250. data/lib/karafka/web/pro/ui/views/explorer/explorer/_breadcrumbs.erb +13 -2
  251. data/lib/karafka/web/pro/ui/views/explorer/explorer/_failed_deserialization.erb +13 -2
  252. data/lib/karafka/web/pro/ui/views/explorer/explorer/_filtered.erb +13 -2
  253. data/lib/karafka/web/pro/ui/views/explorer/explorer/_message.erb +14 -3
  254. data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +13 -2
  255. data/lib/karafka/web/pro/ui/views/explorer/explorer/_partition_option.erb +18 -5
  256. data/lib/karafka/web/pro/ui/views/explorer/explorer/_selector.erb +14 -3
  257. data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +13 -2
  258. data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +13 -2
  259. data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_metadata.erb +13 -2
  260. data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_payload.erb +13 -2
  261. data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_resources_utilization.erb +13 -2
  262. data/lib/karafka/web/pro/ui/views/explorer/explorer/message/_too_big_to_be_displayed.erb +15 -4
  263. data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_detail.erb +13 -2
  264. data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +13 -2
  265. data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_key.erb +13 -2
  266. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_cleaned.erb +13 -2
  267. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_empty.erb +13 -2
  268. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_messages.erb +14 -3
  269. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +14 -3
  270. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +15 -3
  271. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition.erb +52 -39
  272. data/lib/karafka/web/pro/ui/views/explorer/explorer/show.erb +13 -2
  273. data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_actions.erb +39 -26
  274. data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +13 -2
  275. data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_limited.erb +13 -2
  276. data/lib/karafka/web/pro/ui/views/explorer/explorer/topic.erb +13 -2
  277. data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +13 -2
  278. data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +28 -16
  279. data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +13 -2
  280. data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +13 -2
  281. data/lib/karafka/web/pro/ui/views/explorer/search/_metadata.erb +13 -2
  282. data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +13 -2
  283. data/lib/karafka/web/pro/ui/views/explorer/search/_no_search_criteria.erb +13 -2
  284. data/lib/karafka/web/pro/ui/views/explorer/search/_search_criteria.erb +14 -3
  285. data/lib/karafka/web/pro/ui/views/explorer/search/_search_modal.erb +27 -15
  286. data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +13 -2
  287. data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +13 -2
  288. data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +13 -2
  289. data/lib/karafka/web/pro/ui/views/health/_no_data.erb +13 -2
  290. data/lib/karafka/web/pro/ui/views/health/_no_partition_data.erb +13 -2
  291. data/lib/karafka/web/pro/ui/views/health/_partition.erb +22 -6
  292. data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +13 -2
  293. data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +13 -2
  294. data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +13 -2
  295. data/lib/karafka/web/pro/ui/views/health/_partitions_with_fallback.erb +15 -2
  296. data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +13 -2
  297. data/lib/karafka/web/pro/ui/views/health/_tabs.erb +13 -2
  298. data/lib/karafka/web/pro/ui/views/health/_topic_edit_options.erb +64 -0
  299. data/lib/karafka/web/pro/ui/views/health/changes.erb +14 -2
  300. data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +13 -2
  301. data/lib/karafka/web/pro/ui/views/health/lags.erb +14 -2
  302. data/lib/karafka/web/pro/ui/views/health/offsets.erb +14 -2
  303. data/lib/karafka/web/pro/ui/views/health/overview.erb +29 -5
  304. data/lib/karafka/web/pro/ui/views/jobs/_job.erb +14 -3
  305. data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +13 -2
  306. data/lib/karafka/web/pro/ui/views/jobs/pending.erb +13 -2
  307. data/lib/karafka/web/pro/ui/views/jobs/running.erb +13 -2
  308. data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +13 -2
  309. data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +13 -2
  310. data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +13 -2
  311. data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +13 -2
  312. data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +13 -2
  313. data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +13 -2
  314. data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +14 -3
  315. data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +13 -2
  316. data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +14 -3
  317. data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +14 -3
  318. data/lib/karafka/web/pro/ui/views/routing/_detail.erb +13 -2
  319. data/lib/karafka/web/pro/ui/views/routing/_topic.erb +14 -3
  320. data/lib/karafka/web/pro/ui/views/routing/index.erb +13 -2
  321. data/lib/karafka/web/pro/ui/views/routing/show.erb +13 -2
  322. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +13 -2
  323. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +13 -2
  324. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +13 -2
  325. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +14 -3
  326. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_cancel.erb +14 -3
  327. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_compacted.erb +13 -2
  328. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_schedule.erb +14 -3
  329. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_tombstone.erb +14 -3
  330. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/message/_unknown.erb +14 -3
  331. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +52 -39
  332. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +13 -2
  333. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +13 -2
  334. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +13 -2
  335. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +13 -2
  336. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +14 -3
  337. data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +14 -3
  338. data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +13 -2
  339. data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +13 -2
  340. data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +13 -2
  341. data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +13 -2
  342. data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +14 -3
  343. data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +13 -2
  344. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +17 -6
  345. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +13 -2
  346. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +13 -2
  347. data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +21 -10
  348. data/lib/karafka/web/pro/ui/views/topics/configs/index.erb +14 -3
  349. data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +13 -2
  350. data/lib/karafka/web/pro/ui/views/topics/distributions/_badges.erb +13 -2
  351. data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +13 -2
  352. data/lib/karafka/web/pro/ui/views/topics/distributions/_chart.erb +13 -2
  353. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +18 -6
  354. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +13 -2
  355. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +13 -2
  356. data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +13 -2
  357. data/lib/karafka/web/pro/ui/views/topics/distributions/_limited.erb +13 -2
  358. data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +13 -2
  359. data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +13 -2
  360. data/lib/karafka/web/pro/ui/views/topics/distributions/show.erb +13 -2
  361. data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +13 -2
  362. data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +13 -2
  363. data/lib/karafka/web/pro/ui/views/topics/offsets/show.erb +13 -2
  364. data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +13 -2
  365. data/lib/karafka/web/pro/ui/views/topics/replications/_metric_box.erb +20 -0
  366. data/lib/karafka/web/pro/ui/views/topics/replications/_partition.erb +13 -2
  367. data/lib/karafka/web/pro/ui/views/topics/replications/_replication_info.erb +65 -0
  368. data/lib/karafka/web/pro/ui/views/topics/replications/_resilience_success.erb +24 -0
  369. data/lib/karafka/web/pro/ui/views/topics/replications/_warning_low_durability.erb +67 -0
  370. data/lib/karafka/web/pro/ui/views/topics/replications/_warning_no_redundancy.erb +66 -0
  371. data/lib/karafka/web/pro/ui/views/topics/replications/_warning_zero_fault_tolerance.erb +67 -0
  372. data/lib/karafka/web/pro/ui/views/topics/replications/show.erb +15 -2
  373. data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +13 -2
  374. data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +13 -2
  375. data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +13 -2
  376. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +13 -2
  377. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +13 -2
  378. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +13 -2
  379. data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +25 -11
  380. data/lib/karafka/web/pro/ui/views/topics/topics/_tabs.erb +13 -2
  381. data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +13 -2
  382. data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +13 -2
  383. data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +13 -2
  384. data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +13 -2
  385. data/lib/karafka/web/processing/consumer.rb +1 -1
  386. data/lib/karafka/web/processing/consumers/aggregators/metrics.rb +11 -11
  387. data/lib/karafka/web/processing/consumers/aggregators/state.rb +4 -3
  388. data/lib/karafka/web/processing/consumers/reports_migrator.rb +2 -2
  389. data/lib/karafka/web/processing/consumers/schema_manager.rb +1 -1
  390. data/lib/karafka/web/processing/publisher.rb +2 -2
  391. data/lib/karafka/web/producer.rb +61 -0
  392. data/lib/karafka/web/tracking/consumers/contracts/report.rb +2 -2
  393. data/lib/karafka/web/tracking/consumers/contracts/subscription_group.rb +1 -0
  394. data/lib/karafka/web/tracking/consumers/listeners/booting.rb +1 -1
  395. data/lib/karafka/web/tracking/consumers/listeners/connections.rb +7 -2
  396. data/lib/karafka/web/tracking/consumers/listeners/errors.rb +10 -10
  397. data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +1 -1
  398. data/lib/karafka/web/tracking/consumers/listeners/processing.rb +25 -25
  399. data/lib/karafka/web/tracking/consumers/listeners/statistics.rb +35 -35
  400. data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
  401. data/lib/karafka/web/tracking/consumers/sampler/enrichers/consumer_groups.rb +1 -0
  402. data/lib/karafka/web/tracking/consumers/sampler/metrics/base.rb +2 -1
  403. data/lib/karafka/web/tracking/consumers/sampler/metrics/container.rb +15 -15
  404. data/lib/karafka/web/tracking/consumers/sampler/metrics/network.rb +6 -6
  405. data/lib/karafka/web/tracking/consumers/sampler/metrics/os.rb +41 -37
  406. data/lib/karafka/web/tracking/consumers/sampler.rb +7 -7
  407. data/lib/karafka/web/tracking/helpers/error_info.rb +10 -10
  408. data/lib/karafka/web/tracking/helpers/sysconf.rb +2 -2
  409. data/lib/karafka/web/tracking/helpers/ttls/array.rb +1 -1
  410. data/lib/karafka/web/tracking/helpers/ttls/hash.rb +1 -1
  411. data/lib/karafka/web/tracking/helpers/ttls/stats.rb +4 -4
  412. data/lib/karafka/web/tracking/producers/listeners/booting.rb +1 -1
  413. data/lib/karafka/web/tracking/producers/listeners/errors.rb +2 -2
  414. data/lib/karafka/web/tracking/producers/reporter.rb +2 -2
  415. data/lib/karafka/web/tracking/producers/sampler.rb +1 -1
  416. data/lib/karafka/web/tracking/ui/errors.rb +4 -4
  417. data/lib/karafka/web/ui/app.rb +2 -2
  418. data/lib/karafka/web/ui/base.rb +30 -30
  419. data/lib/karafka/web/ui/controllers/base_controller.rb +24 -24
  420. data/lib/karafka/web/ui/controllers/cluster_controller.rb +3 -3
  421. data/lib/karafka/web/ui/controllers/requests/params.rb +6 -6
  422. data/lib/karafka/web/ui/helpers/application_helper.rb +59 -59
  423. data/lib/karafka/web/ui/helpers/paths_helper.rb +15 -7
  424. data/lib/karafka/web/ui/helpers/tailwind_helper.rb +6 -6
  425. data/lib/karafka/web/ui/helpers/time_helper.rb +1 -1
  426. data/lib/karafka/web/ui/helpers/topics_helper.rb +4 -4
  427. data/lib/karafka/web/ui/lib/admin.rb +2 -2
  428. data/lib/karafka/web/ui/lib/paginations/base.rb +7 -7
  429. data/lib/karafka/web/ui/lib/paginations/offset_based.rb +2 -2
  430. data/lib/karafka/web/ui/lib/paginations/page_based.rb +1 -1
  431. data/lib/karafka/web/ui/lib/paginations/paginators/arrays.rb +3 -3
  432. data/lib/karafka/web/ui/lib/paginations/watermark_offsets_based.rb +1 -1
  433. data/lib/karafka/web/ui/lib/sorter.rb +2 -2
  434. data/lib/karafka/web/ui/models/counters.rb +1 -1
  435. data/lib/karafka/web/ui/models/health.rb +1 -0
  436. data/lib/karafka/web/ui/models/jobs.rb +2 -2
  437. data/lib/karafka/web/ui/models/message.rb +9 -9
  438. data/lib/karafka/web/ui/models/metrics/charts/aggregated.rb +3 -3
  439. data/lib/karafka/web/ui/models/metrics/charts/topics.rb +3 -3
  440. data/lib/karafka/web/ui/models/metrics/topics.rb +8 -8
  441. data/lib/karafka/web/ui/models/processes.rb +3 -3
  442. data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +2 -2
  443. data/lib/karafka/web/ui/models/status/checks/base.rb +127 -0
  444. data/lib/karafka/web/ui/models/status/checks/commands_topic_presence.rb +52 -0
  445. data/lib/karafka/web/ui/models/status/checks/connection.rb +68 -0
  446. data/lib/karafka/web/ui/models/status/checks/consumers_reports.rb +34 -0
  447. data/lib/karafka/web/ui/models/status/checks/consumers_reports_schema_state.rb +32 -0
  448. data/lib/karafka/web/ui/models/status/checks/consumers_schemas.rb +44 -0
  449. data/lib/karafka/web/ui/models/status/checks/enabled.rb +39 -0
  450. data/lib/karafka/web/ui/models/status/checks/initial_consumers_metrics.rb +48 -0
  451. data/lib/karafka/web/ui/models/status/checks/initial_consumers_state.rb +48 -0
  452. data/lib/karafka/web/ui/models/status/checks/live_reporting.rb +31 -0
  453. data/lib/karafka/web/ui/models/status/checks/materializing_lag.rb +49 -0
  454. data/lib/karafka/web/ui/models/status/checks/partitions.rb +45 -0
  455. data/lib/karafka/web/ui/models/status/checks/pro_subscription.rb +29 -0
  456. data/lib/karafka/web/ui/models/status/checks/replication.rb +51 -0
  457. data/lib/karafka/web/ui/models/status/checks/routing_topics_presence.rb +53 -0
  458. data/lib/karafka/web/ui/models/status/checks/state_calculation.rb +39 -0
  459. data/lib/karafka/web/ui/models/status/checks/topics.rb +44 -0
  460. data/lib/karafka/web/ui/models/status/context.rb +142 -0
  461. data/lib/karafka/web/ui/models/status/step.rb +64 -0
  462. data/lib/karafka/web/ui/models/status.rb +70 -356
  463. data/lib/karafka/web/ui/models/topic.rb +2 -2
  464. data/lib/karafka/web/ui/public/javascripts/application.min.js +1 -1
  465. data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
  466. data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
  467. data/lib/karafka/web/ui/public/javascripts/components/live_poll.js +2 -2
  468. data/lib/karafka/web/ui/public/stylesheets/application.min.css +4660 -2524
  469. data/lib/karafka/web/ui/public/stylesheets/application.min.css.br +0 -0
  470. data/lib/karafka/web/ui/public/stylesheets/application.min.css.gz +0 -0
  471. data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +62 -3
  472. data/lib/karafka/web/ui/routes/assets.rb +7 -7
  473. data/lib/karafka/web/ui/routes/cluster.rb +4 -4
  474. data/lib/karafka/web/ui/routes/consumers.rb +2 -2
  475. data/lib/karafka/web/ui/routes/dashboard.rb +1 -1
  476. data/lib/karafka/web/ui/routes/errors.rb +2 -2
  477. data/lib/karafka/web/ui/routes/jobs.rb +4 -4
  478. data/lib/karafka/web/ui/routes/routing.rb +1 -1
  479. data/lib/karafka/web/ui/routes/status.rb +1 -1
  480. data/lib/karafka/web/ui/routes/support.rb +1 -1
  481. data/lib/karafka/web/ui/routes/ux.rb +1 -1
  482. data/lib/karafka/web/ui/views/cluster/_partition.erb +1 -0
  483. data/lib/karafka/web/ui/views/dashboard/_counters.erb +16 -16
  484. data/lib/karafka/web/ui/views/errors/_detail.erb +2 -3
  485. data/lib/karafka/web/ui/views/errors/_error.erb +1 -1
  486. data/lib/karafka/web/ui/views/errors/index.erb +1 -1
  487. data/lib/karafka/web/ui/views/errors/show.erb +1 -1
  488. data/lib/karafka/web/ui/views/jobs/_job.erb +1 -1
  489. data/lib/karafka/web/ui/views/layout.erb +1 -1
  490. data/lib/karafka/web/ui/views/routing/_consumer_group.erb +1 -1
  491. data/lib/karafka/web/ui/views/routing/_topic.erb +1 -1
  492. data/lib/karafka/web/ui/views/shared/_header.erb +5 -5
  493. data/lib/karafka/web/ui/views/shared/_navigation.erb +1 -1
  494. data/lib/karafka/web/ui/views/shared/alerts/_error.erb +2 -2
  495. data/lib/karafka/web/ui/views/shared/alerts/_info.erb +1 -1
  496. data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +1 -1
  497. data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +1 -1
  498. data/lib/karafka/web/ui/views/shared/alerts/_success.erb +1 -1
  499. data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +2 -2
  500. data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +3 -3
  501. data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +4 -4
  502. data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +4 -4
  503. data/lib/karafka/web/ui/views/shared/exceptions/unhandled_error.erb +4 -4
  504. data/lib/karafka/web/ui/views/status/show.erb +15 -0
  505. data/lib/karafka/web/ui/views/status/warnings/_commands_topic_presence.erb +14 -0
  506. data/lib/karafka/web/ui/views/ux/_code.erb +0 -1
  507. data/lib/karafka/web/ui/views/ux/_data_table.erb +79 -0
  508. data/lib/karafka/web/ui/views/ux/_headers.erb +1 -1
  509. data/lib/karafka/web/ui/views/ux/_pagination.erb +1 -1
  510. data/lib/karafka/web/version.rb +1 -1
  511. data/lib/karafka/web.rb +17 -17
  512. data/package-lock.json +480 -92
  513. data/package.json +3 -1
  514. data/renovate.json +12 -11
  515. data/tailwind.config.js +4 -7
  516. metadata +72 -3
  517. 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 = '1.3.0'
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. Materializing
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] == 'stopped'
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
- .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?)
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
- .map { |p_details| p_details.fetch(:hi_offset, -1) }
104
- .reject(&:negative?)
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 = '1.4.0'
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 total sum.
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] == 'stopped' }
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
- .sorted_descendants
43
- .select { |migration_class| migration_class.type == :consumers_reports }
42
+ .sorted_descendants
43
+ .select { |migration_class| migration_class.type == :consumers_reports }
44
44
  end
45
45
  end
46
46
  end
@@ -54,7 +54,7 @@ module Karafka
54
54
 
55
55
  # @return [String] state that we can use in the materialized state for the UI reporting
56
56
  def to_s
57
- @valid ? 'compatible' : 'incompatible'
57
+ @valid ? "compatible" : "incompatible"
58
58
  end
59
59
  end
60
60
  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: { 'zlib' => 'true' }
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: { 'zlib' => 'true' }
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 == 'consumer' }
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(':') >= 2 }
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? }
@@ -15,7 +15,7 @@ module Karafka
15
15
  # @param _event [Karafka::Core::Monitoring::Event]
16
16
  def on_app_running(_event)
17
17
  ::Karafka::Web.config.tracking.scheduler.async_call(
18
- 'karafka.web.tracking.scheduler'
18
+ "karafka.web.tracking.scheduler"
19
19
  )
20
20
  end
21
21
 
@@ -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
- sg_id = event[:subscription_group].id
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 = '1.2.0'
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
- 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
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
 
@@ -38,7 +38,7 @@ module Karafka
38
38
  partition = event[:partition]
39
39
  subscription_group_id = event[:subscription_group].id
40
40
 
41
- [subscription_group_id, topic, partition].join('-')
41
+ [subscription_group_id, topic, partition].join("-")
42
42
  end
43
43
  end
44
44
  end
@@ -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, 'consume')
72
- job_details = job_details(consumer, 'consume')
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, 'consume')
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
- 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
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, 'revoked'],
136
- [:shutting_down, :shutdown, 'shutdown'],
137
- [:tick, :ticked, 'tick'],
138
- [:eof, :eofed, '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: 'running'
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('topics')
16
- cgrp = statistics.fetch('cgrp')
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('partitions')
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('brokers', {})
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('name')
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('rxbytes', 0)
78
- sampler.windows.m1["#{scope_name}-txbytes"] << values.fetch('txbytes', 0)
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
- 'state',
92
- 'join_state',
93
- 'stateage',
94
- 'rebalance_age',
95
- 'rebalance_cnt',
96
- 'rebalance_reason'
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['fetch_state'] == 'stopped'
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['fetch_state'] == 'none'
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
- 'consumer_lag',
127
- 'consumer_lag_d',
128
- 'consumer_lag_stored',
129
- 'consumer_lag_stored_d',
130
- 'committed_offset',
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
- 'committed_offset_fd',
133
- 'stored_offset',
132
+ "committed_offset_fd",
133
+ "stored_offset",
134
134
  # Can be useful to track the frequency of flushes when there is progress
135
- 'stored_offset_fd',
136
- 'fetch_state',
137
- 'hi_offset',
138
- 'hi_offset_fd',
139
- 'lo_offset',
140
- 'eof_offset',
141
- 'ls_offset',
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
- 'ls_offset_d',
144
- 'ls_offset_fd'
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('consumer_', '') }
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: 'active', poll_state_ch: 0 }
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: 'paused',
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: { 'zlib' => 'true' }
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: { 'zlib' => 'true' }
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 collectors
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 = 'max'
14
+ CGROUP_V2_MAX = "max"
15
15
 
16
16
  # Paths for cgroup detection and reading
17
- CGROUP_V2_CONTROLLERS = '/sys/fs/cgroup/cgroup.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 = '/sys/fs/cgroup/memory/memory.limit_in_bytes'
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 = '/sys/fs/cgroup/memory.max'
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
- when :v2
46
- read_cgroup_v2_memory_limit
47
- when :v1
48
- read_cgroup_v1_memory_limit
49
- end
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
- :v2
61
- elsif File.exist?(CGROUP_V1_MEMORY_LIMIT)
62
- :v1
63
- end
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 StandardError
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 StandardError
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 window
18
- # by all the consumers
19
- # @note We use one minute window to compensate for cases where metrics would be reported
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?('rxbytes') }
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?('txbytes') }
34
+ .stats_from { |k, _v| k.end_with?("txbytes") }
35
35
  .rps
36
36
  .round
37
37
  end