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
@@ -27,7 +27,7 @@ module Karafka
27
27
  # Reading this that way is cheaper than running a shell command
28
28
  when /linux/
29
29
  File.readlines("/proc/#{pid}/status").each do |line|
30
- next unless line.start_with?('VmRSS:')
30
+ next unless line.start_with?("VmRSS:")
31
31
 
32
32
  break line.split[1].to_i
33
33
  end
@@ -49,7 +49,8 @@ module Karafka
49
49
  # This represents system-wide (or container-wide) memory usage by summing RSS
50
50
  # across all processes.
51
51
  # On bare metal: sums memory for all processes on the host
52
- # In containers: sums memory for all processes within the container (due to PID namespace)
52
+ # In containers: sums memory for all processes within the container
53
+ # (due to PID namespace)
53
54
  # @note This is DIFFERENT from memory_usage which only shows current process memory
54
55
  # @note Used in Web UI to show "OS memory used" metric
55
56
  def memory_total_usage(memory_threads_ps)
@@ -69,22 +70,22 @@ module Karafka
69
70
  return @memory_size if instance_variable_defined?(:@memory_size)
70
71
 
71
72
  @memory_size = case RUBY_PLATFORM
72
- when /linux/
73
- mem_info = File.read('/proc/meminfo')
74
- mem_total_line = mem_info.match(/MemTotal:\s*(?<total>\d+)/)
75
- mem_total_line['total'].to_i
76
- when /darwin|bsd/
77
- shell
78
- .call('sysctl -a')
79
- .split("\n")
80
- .find { |line| line.start_with?('hw.memsize:') }
81
- .to_s
82
- .split
83
- .last
84
- .to_i
85
- else
86
- 0
87
- end
73
+ when /linux/
74
+ mem_info = File.read("/proc/meminfo")
75
+ mem_total_line = mem_info.match(/MemTotal:\s*(?<total>\d+)/)
76
+ mem_total_line["total"].to_i
77
+ when /darwin|bsd/
78
+ shell
79
+ .call("sysctl -a")
80
+ .split("\n")
81
+ .find { |line| line.start_with?("hw.memsize:") }
82
+ .to_s
83
+ .split
84
+ .last
85
+ .to_i
86
+ else
87
+ 0
88
+ end
88
89
  end
89
90
 
90
91
  # @return [Array<Float>] load averages for last 1, 5 and 15 minutes
@@ -92,13 +93,13 @@ module Karafka
92
93
  case RUBY_PLATFORM
93
94
  when /linux/
94
95
  File
95
- .read('/proc/loadavg')
96
+ .read("/proc/loadavg")
96
97
  .split
97
98
  .first(3)
98
99
  .map(&:to_f)
99
100
  when /darwin|bsd/
100
101
  shell
101
- .call('w | head -1')
102
+ .call("w | head -1")
102
103
  .strip
103
104
  .split
104
105
  .map(&:to_f)
@@ -124,10 +125,11 @@ module Karafka
124
125
  end
125
126
 
126
127
  # Loads process information for all running processes
127
- # @return [Array<Array<Integer, Integer, Integer>>, false] array of [rss_kb, threads, pid]
128
- # for each process, or false if unavailable
128
+ # @return [Array<Array<Integer, Integer, Integer>>, false] array of
129
+ # [rss_kb, threads, pid] for each process, or false if unavailable
129
130
  #
130
- # This method reads information about ALL processes on the system (or in the container).
131
+ # This method reads information about ALL processes on the system
132
+ # (or in the container).
131
133
  # The data is used by multiple metrics:
132
134
  # - memory_total_usage: sums RSS across all processes
133
135
  # - threads: extracts thread count for current process
@@ -142,10 +144,12 @@ module Karafka
142
144
  # - macOS: Uses `ps -A` to get all processes
143
145
  # - Containers: Due to PID namespaces, only sees processes within the container
144
146
  #
145
- # @note Sampler calls this once per sample cycle (every ~5 seconds) and caches the result
146
- # in @memory_threads_ps to ensure consistent data within a single sample snapshot
147
+ # @note Sampler calls this once per sample cycle (every ~5 seconds) and caches
148
+ # the result in @memory_threads_ps to ensure consistent data within a single
149
+ # sample snapshot
147
150
  # @note The cache is refreshed on EVERY sample cycle, so data stays current
148
- # @note On Linux, thread count is only extracted for the current process to optimize performance
151
+ # @note On Linux, thread count is only extracted for the current process to
152
+ # optimize performance
149
153
  def memory_threads_ps
150
154
  case RUBY_PLATFORM
151
155
  when /linux/
@@ -153,27 +157,27 @@ module Karafka
153
157
  current_pid = ::Process.pid
154
158
 
155
159
  # Read all processes from /proc
156
- Dir.glob('/proc/[0-9]*/statm').filter_map do |statm_file|
160
+ Dir.glob("/proc/[0-9]*/statm").filter_map do |statm_file|
157
161
  pid = statm_file.match(%r{/proc/(\d+)/statm})[1].to_i
158
162
  status_file = "/proc/#{pid}/status"
159
163
 
160
164
  # Extract RSS from /proc/<pid>/statm (second field)
161
165
  rss_pages = begin
162
166
  File.read(statm_file).split[1].to_i
163
- rescue StandardError
167
+ rescue
164
168
  next # Process may have exited
165
169
  end
166
170
 
167
171
  # Extract thread count from /proc/<pid>/status (only for current process)
168
172
  thcount = if pid == current_pid
169
- begin
170
- File.read(status_file)[/^Threads:\s+(\d+)/, 1].to_i
171
- rescue StandardError
172
- 0
173
- end
174
- else
175
- 0
176
- end
173
+ begin
174
+ File.read(status_file)[/^Threads:\s+(\d+)/, 1].to_i
175
+ rescue
176
+ 0
177
+ end
178
+ else
179
+ 0
180
+ end
177
181
 
178
182
  # Convert RSS from pages to kilobytes
179
183
  rss_kb = (rss_pages * page_size) / 1024
@@ -185,7 +189,7 @@ module Karafka
185
189
  # we do on windows
186
190
  when /darwin|bsd/
187
191
  shell
188
- .call('ps -A -o rss=,pid=')
192
+ .call("ps -A -o rss=,pid=")
189
193
  .split("\n")
190
194
  .map { |row| row.strip.split.map(&:to_i) }
191
195
  .map { |row| [row.first, 0, row.last] }
@@ -10,12 +10,12 @@ module Karafka
10
10
  include ::Karafka::Core::Helpers::Time
11
11
 
12
12
  attr_reader :counters, :consumer_groups, :subscription_groups, :errors,
13
- :pauses, :jobs, :windows
13
+ :pauses, :jobs, :windows
14
14
 
15
15
  # Current schema version
16
16
  # This is used for detecting incompatible changes and not using outdated data during
17
17
  # upgrades
18
- SCHEMA_VERSION = '1.5.0'
18
+ SCHEMA_VERSION = "1.6.0"
19
19
 
20
20
  # Counters that count events occurrences during the given window
21
21
  COUNTERS_BASE = {
@@ -76,10 +76,10 @@ module Karafka
76
76
  # Select and instantiate appropriate system metrics collector based on environment
77
77
  # Use container-aware collector if cgroups are available, otherwise use OS-based
78
78
  metrics_class = if Metrics::Container.active?
79
- Metrics::Container
80
- else
81
- Metrics::Os
82
- end
79
+ Metrics::Container
80
+ else
81
+ Metrics::Os
82
+ end
83
83
  @system_metrics = metrics_class.new(@shell)
84
84
  @network_metrics = Metrics::Network.new(@windows)
85
85
  @server_metrics = Metrics::Server.new
@@ -97,7 +97,7 @@ module Karafka
97
97
  def to_report
98
98
  {
99
99
  schema_version: SCHEMA_VERSION,
100
- type: 'consumer',
100
+ type: "consumer",
101
101
  dispatched_at: float_now,
102
102
 
103
103
  process: {
@@ -14,17 +14,17 @@ module Karafka
14
14
  def extract_error_info(error)
15
15
  app_root = "#{::Karafka.root}/"
16
16
 
17
- gem_home = if ENV.key?('GEM_HOME')
18
- ENV['GEM_HOME']
19
- else
20
- File.expand_path(File.join(Karafka.gem_root.to_s, '../'))
21
- end
17
+ gem_home = if ENV.key?("GEM_HOME")
18
+ ENV["GEM_HOME"]
19
+ else
20
+ File.expand_path(File.join(Karafka.gem_root.to_s, "../"))
21
+ end
22
22
 
23
23
  gem_home = "#{gem_home}/"
24
24
 
25
25
  backtrace = error.backtrace || []
26
- backtrace.map! { |line| line.gsub(app_root, '') }
27
- backtrace.map! { |line| line.gsub(gem_home, '') }
26
+ backtrace.map! { |line| line.gsub(app_root, "") }
27
+ backtrace.map! { |line| line.gsub(gem_home, "") }
28
28
 
29
29
  [
30
30
  error.class.name,
@@ -37,11 +37,11 @@ module Karafka
37
37
  # @return [String] formatted exception message
38
38
  def extract_error_message(error)
39
39
  error_message = error.message.to_s[0, 10_000]
40
- error_message.force_encoding('utf-8')
40
+ error_message.force_encoding("utf-8")
41
41
  error_message.scrub! if error_message.respond_to?(:scrub!)
42
42
  error_message
43
- rescue StandardError
44
- '!!! Error message extraction failed !!!'
43
+ rescue
44
+ "!!! Error message extraction failed !!!"
45
45
  end
46
46
  end
47
47
  end
@@ -11,10 +11,10 @@ module Karafka
11
11
 
12
12
  case RUBY_PLATFORM
13
13
  when /linux/
14
- ffi_lib 'libc.so.6' # Standard C library on Linux
14
+ ffi_lib "libc.so.6" # Standard C library on Linux
15
15
  SC_PAGESIZE = 30 # _SC_PAGESIZE constant
16
16
  when /darwin/
17
- ffi_lib 'libSystem.B.dylib' # Standard C library on macOS
17
+ ffi_lib "libSystem.B.dylib" # Standard C library on macOS
18
18
  SC_PAGESIZE = 29 # _SC_PAGESIZE constant
19
19
  end
20
20
 
@@ -64,7 +64,7 @@ module Karafka
64
64
  parts = ["ttl=#{@ttl}ms"]
65
65
  parts << "size=#{size}"
66
66
 
67
- "#<#{self.class.name}:#{format('%#x', object_id)} #{parts.join(' ')}>"
67
+ "#<#{self.class.name}:#{format("%#x", object_id)} #{parts.join(" ")}>"
68
68
  end
69
69
 
70
70
  private
@@ -29,7 +29,7 @@ module Karafka
29
29
 
30
30
  # @return [String] thread-safe inspect of the ttls hash
31
31
  def inspect
32
- "#<#{self.class.name}:#{format('%#x', object_id)} size=#{size} ttl=#{@ttl}ms>"
32
+ "#<#{self.class.name}:#{format("%#x", object_id)} size=#{size} ttl=#{@ttl}ms>"
33
33
  end
34
34
  end
35
35
  end
@@ -16,10 +16,10 @@ module Karafka
16
16
  # @param ttls_hash [Ttls::Hash, Hash] hash with window based samples
17
17
  def initialize(ttls_hash)
18
18
  @data = ttls_hash
19
- .values
20
- .map { |value| value.samples.to_a }
21
- .delete_if { |samples| samples.size < 2 }
22
- .map { |samples| samples.map(&:values) }
19
+ .values
20
+ .map { |value| value.samples.to_a }
21
+ .delete_if { |samples| samples.size < 2 }
22
+ .map { |samples| samples.map(&:values) }
23
23
  end
24
24
 
25
25
  # Computes the rate out of the samples provided on a per second basis. The samples need
@@ -15,7 +15,7 @@ module Karafka
15
15
  # @param _event [Karafka::Core::Monitoring::Event]
16
16
  def on_producer_connected(_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
  end
@@ -10,7 +10,7 @@ module Karafka
10
10
  include Tracking::Helpers::ErrorInfo
11
11
 
12
12
  # Schema used by producers error reporting
13
- SCHEMA_VERSION = '1.2.0'
13
+ SCHEMA_VERSION = "1.2.0"
14
14
 
15
15
  private_constant :SCHEMA_VERSION
16
16
 
@@ -53,7 +53,7 @@ module Karafka
53
53
  # @return [Hash] hash with details
54
54
  def build_details(type, payload)
55
55
  case type
56
- when 'librdkafka.dispatch_error'
56
+ when "librdkafka.dispatch_error"
57
57
  payload.slice(:topic, :partition, :offset)
58
58
  else
59
59
  {}
@@ -87,8 +87,8 @@ module Karafka
87
87
  # and we can just safely ignore this
88
88
  rescue WaterDrop::Errors::ProducerClosedError
89
89
  nil
90
- rescue StandardError => e
91
- p '------------------------------------------------'
90
+ rescue => e
91
+ p "------------------------------------------------"
92
92
  p e
93
93
  end
94
94
  end
@@ -14,7 +14,7 @@ module Karafka
14
14
  # Current schema version
15
15
  # This can be used in the future for detecting incompatible changes and writing
16
16
  # migrations
17
- SCHEMA_VERSION = '1.1.0'
17
+ SCHEMA_VERSION = "1.1.0"
18
18
 
19
19
  def initialize
20
20
  super
@@ -15,7 +15,7 @@ module Karafka
15
15
  include Tracking::Helpers::ErrorInfo
16
16
 
17
17
  # Schema used by UI error reporting
18
- SCHEMA_VERSION = '1.2.0'
18
+ SCHEMA_VERSION = "1.2.0"
19
19
 
20
20
  private_constant :SCHEMA_VERSION
21
21
 
@@ -24,7 +24,7 @@ module Karafka
24
24
  # @param event [Karafka::Core::Monitoring::Event]
25
25
  def on_error_occurred(event)
26
26
  # Only process UI errors, ignore all other error types
27
- return unless event[:type] == 'web.ui.error'
27
+ return unless event[:type] == "web.ui.error"
28
28
 
29
29
  error_class, error_message, backtrace = extract_error_info(event[:error])
30
30
 
@@ -47,7 +47,7 @@ module Karafka
47
47
 
48
48
  # Dispatch error to Kafka asynchronously
49
49
  dispatch(error_data)
50
- rescue StandardError => e
50
+ rescue => e
51
51
  # If we fail to report an error, log it but don't raise to avoid error loops
52
52
  ::Karafka.logger.error("Failed to report UI error: #{e.message}")
53
53
  end
@@ -66,7 +66,7 @@ module Karafka
66
66
  topic: ::Karafka::Web.config.topics.errors.name,
67
67
  payload: Zlib::Deflate.deflate(error_data.to_json),
68
68
  key: process_id,
69
- headers: { 'zlib' => 'true' }
69
+ headers: { "zlib" => "true" }
70
70
  )
71
71
  end
72
72
  end
@@ -7,7 +7,7 @@ module Karafka
7
7
  # Main Roda Web App that servers all the metrics and stats
8
8
  class App < Base
9
9
  # Use the gem views and assets location
10
- opts[:root] = Karafka::Web.gem_root.join('lib/karafka/web/ui')
10
+ opts[:root] = Karafka::Web.gem_root.join("lib/karafka/web/ui")
11
11
 
12
12
  instance_exec(&CONTEXT_DETAILS)
13
13
 
@@ -29,7 +29,7 @@ module Karafka
29
29
  private_constant :SUB_ROUTES
30
30
 
31
31
  route do |r|
32
- r.root { r.redirect root_path('dashboard') }
32
+ r.root { r.redirect root_path("dashboard") }
33
33
 
34
34
  SUB_ROUTES.each { |sub_route| sub_route.bind(self, r) }
35
35
 
@@ -16,10 +16,10 @@ module Karafka
16
16
  CONTEXT_DETAILS = lambda do
17
17
  plugin(
18
18
  :public,
19
- root: Karafka::Web.gem_root.join('lib/karafka/web/ui/public'),
19
+ root: Karafka::Web.gem_root.join("lib/karafka/web/ui/public"),
20
20
  # Cache all static files for the end user for as long as possible
21
21
  # We can do it because we ship per version assets so they invalidate with gem bumps
22
- headers: { 'Cache-Control' => 'max-age=31536000, immutable' },
22
+ headers: { "Cache-Control" => "max-age=31536000, immutable" },
23
23
  gzip: true,
24
24
  brotli: true
25
25
  )
@@ -31,13 +31,13 @@ module Karafka
31
31
  # user to make the Web UI work.
32
32
  plugin(
33
33
  :sessions,
34
- key: '_karafka_session',
35
- env_key: 'karafka.session',
34
+ key: "_karafka_session",
35
+ env_key: "karafka.session",
36
36
  secret: SecureRandom.hex(64)
37
37
  )
38
38
  end
39
39
 
40
- plugin :render, escape: true, engine: 'erb'
40
+ plugin :render, escape: true, engine: "erb"
41
41
  plugin :run_append_slash
42
42
  plugin :error_handler
43
43
  plugin :not_found
@@ -79,20 +79,20 @@ module Karafka
79
79
  result.flashes.each { |key, value| flash[key] = value }
80
80
 
81
81
  path = case result.path
82
- when :back
83
- session[:current_path]
84
- when :previous
85
- session[:previous_path]
86
- else
87
- root_path(result.path)
88
- end
82
+ when :back
83
+ session["current_path"]
84
+ when :previous
85
+ session["previous_path"]
86
+ else
87
+ root_path(result.path)
88
+ end
89
89
 
90
90
  response.redirect path || root_path
91
91
  end
92
92
 
93
93
  handle_block_result Controllers::Responses::File do |result|
94
- response.headers['Content-Type'] = 'application/octet-stream'
95
- response.headers['Content-Disposition'] = "attachment; filename=\"#{result.file_name}\""
94
+ response.headers["Content-Type"] = "application/octet-stream"
95
+ response.headers["Content-Disposition"] = "attachment; filename=\"#{result.file_name}\""
96
96
  response.write result.content
97
97
  end
98
98
 
@@ -103,35 +103,35 @@ module Karafka
103
103
  case e
104
104
  when Errors::Ui::ProOnlyError
105
105
  response.status = 402
106
- view 'shared/exceptions/pro_only'
106
+ view "shared/exceptions/pro_only"
107
107
  when Errors::Ui::ForbiddenError
108
108
  response.status = 403
109
- view 'shared/exceptions/not_allowed'
109
+ view "shared/exceptions/not_allowed"
110
110
  when Errors::Ui::NotFoundError
111
111
  response.status = 404
112
- view 'shared/exceptions/not_found'
112
+ view "shared/exceptions/not_found"
113
113
  when ::Rdkafka::RdkafkaError
114
114
  response.status = 404
115
- view 'shared/exceptions/not_found'
115
+ view "shared/exceptions/not_found"
116
116
  else
117
117
  # Report unhandled errors to Karafka monitoring
118
118
  ::Karafka.monitor.instrument(
119
- 'error.occurred',
119
+ "error.occurred",
120
120
  error: e,
121
121
  caller: self,
122
- type: 'web.ui.error'
122
+ type: "web.ui.error"
123
123
  )
124
124
 
125
125
  # For all other unhandled errors, show a generic error page
126
126
  response.status = 500
127
- view 'shared/exceptions/unhandled_error'
127
+ view "shared/exceptions/unhandled_error"
128
128
  end
129
129
  end
130
130
 
131
131
  not_found do
132
132
  @error = true
133
133
  response.status = 404
134
- view 'shared/exceptions/not_found'
134
+ view "shared/exceptions/not_found"
135
135
  end
136
136
 
137
137
  before do
@@ -175,13 +175,13 @@ module Karafka
175
175
  merged_params = deep_merge(request.params, query_data)
176
176
 
177
177
  # Flatten the merged parameters
178
- flattened_params = flatten_params('', merged_params)
178
+ flattened_params = flatten_params("", merged_params)
179
179
 
180
180
  # Build the query string from the flattened parameters
181
181
  query_string = URI.encode_www_form(flattened_params)
182
182
 
183
183
  # Construct the full path with query string
184
- [request.path, query_string].compact.join('?')
184
+ [request.path, query_string].compact.join("?")
185
185
  end
186
186
 
187
187
  # Builds a consumer instance with all needed details
@@ -218,21 +218,21 @@ module Karafka
218
218
  def store_paths_history(request, session)
219
219
  # Code below tracks previous paths so we can use it to redirect users back
220
220
  return unless request.get?
221
- return unless request.env['HTTP_ACCEPT']&.include?('text/html')
221
+ return unless request.env["HTTP_ACCEPT"]&.include?("text/html")
222
222
 
223
223
  requested_path = request.path
224
224
 
225
- if session[:current_path].nil?
226
- session[:current_path] = requested_path
225
+ if session["current_path"].nil?
226
+ session["current_path"] = requested_path
227
227
 
228
228
  return
229
229
  end
230
230
 
231
- return if request.path == session[:current_path]
231
+ return if request.path == session["current_path"]
232
232
 
233
233
  # When navigating to a different page
234
- session[:previous_path] = session[:current_path]
235
- session[:current_path] = requested_path
234
+ session["previous_path"] = session["current_path"]
235
+ session["current_path"] = requested_path
236
236
  end
237
237
  end
238
238
  end
@@ -25,16 +25,16 @@ module Karafka
25
25
  # Detect that the state of the cache has changed
26
26
  before do
27
27
  cache.clear_if_needed(
28
- session[:cache_hash],
29
- session[:cache_timestamp].to_i
28
+ session["cache_hash"],
29
+ session["cache_timestamp"].to_i
30
30
  )
31
31
  end
32
32
 
33
33
  after do
34
34
  next unless cache.exist?
35
35
 
36
- session[:cache_hash] = cache.hash
37
- session[:cache_timestamp] = cache.timestamp.to_i
36
+ session["cache_hash"] = cache.hash
37
+ session["cache_timestamp"] = cache.timestamp.to_i
38
38
  end
39
39
 
40
40
  # @param params [Karafka::Web::Ui::Controllers::Requests::Params] request parameters
@@ -58,31 +58,31 @@ module Karafka
58
58
  def render(attributes: {})
59
59
  attributes = attributes.dup
60
60
 
61
- full_parts = self.class.to_s.split('::')
62
- separator = full_parts.index('Controllers')
61
+ full_parts = self.class.to_s.split("::")
62
+ separator = full_parts.index("Controllers")
63
63
  base = full_parts[(separator + 1)..]
64
64
 
65
65
  base.map!.with_index do |path_part, index|
66
66
  if index == (base.size - 1)
67
- path_part.gsub(/(.)([A-Z])/, '\1_\2').downcase.gsub('_controller', '')
67
+ path_part.gsub(/(.)([A-Z])/, '\1_\2').downcase.gsub("_controller", "")
68
68
  else
69
69
  path_part.gsub(/(.)([A-Z])/, '\1_\2').downcase
70
70
  end
71
71
  end
72
72
 
73
- scope = base.join('/')
74
- action = caller_locations(1, 1)[0].label.split('#').last
73
+ scope = base.join("/")
74
+ action = caller_locations(1, 1)[0].label.split("#").last
75
75
 
76
76
  attributes[:breadcrums_scope] = scope
77
77
 
78
78
  @current_action_name = action.to_sym
79
- @current_controller_name = base.join('-')
79
+ @current_controller_name = base.join("-")
80
80
 
81
81
  instance_variables.each do |iv|
82
- next if iv.to_s.start_with?('@_')
83
- next if iv.to_s.start_with?('@params')
82
+ next if iv.to_s.start_with?("@_")
83
+ next if iv.to_s.start_with?("@params")
84
84
 
85
- attributes[iv.to_s.delete('@').to_sym] = instance_variable_get(iv)
85
+ attributes[iv.to_s.delete("@").to_sym] = instance_variable_get(iv)
86
86
  end
87
87
 
88
88
  Responses::Render.new(
@@ -108,7 +108,7 @@ module Karafka
108
108
  # @return [String] formatted string
109
109
  def format_flash(message, *args)
110
110
  args.each do |arg|
111
- message = message.sub('?', "<strong>#{arg}</strong>")
111
+ message = message.sub("?", "<strong>#{arg}</strong>")
112
112
  end
113
113
 
114
114
  message
@@ -143,15 +143,15 @@ module Karafka
143
143
  # @param args Any arguments accepted by the selected pagination engine
144
144
  def paginate(*args)
145
145
  engine = case args.count
146
- when 2
147
- Ui::Lib::Paginations::PageBased
148
- when 3
149
- Ui::Lib::Paginations::WatermarkOffsetsBased
150
- when 4
151
- Ui::Lib::Paginations::OffsetBased
152
- else
153
- raise ::Karafka::Errors::UnsupportedCaseError, args.count
154
- end
146
+ when 2
147
+ Ui::Lib::Paginations::PageBased
148
+ when 3
149
+ Ui::Lib::Paginations::WatermarkOffsetsBased
150
+ when 4
151
+ Ui::Lib::Paginations::OffsetBased
152
+ else
153
+ raise ::Karafka::Errors::UnsupportedCaseError, args.count
154
+ end
155
155
 
156
156
  @pagination = engine.new(*args)
157
157
  end
@@ -160,7 +160,7 @@ module Karafka
160
160
  #
161
161
  # @param resource_id [String] resource id that was not found
162
162
  # @raise [::Karafka::Web::Errors::Ui::NotFoundError]
163
- def not_found!(resource_id = '')
163
+ def not_found!(resource_id = "")
164
164
  raise(::Karafka::Web::Errors::Ui::NotFoundError, resource_id)
165
165
  end
166
166
  end
@@ -63,12 +63,12 @@ module Karafka
63
63
  # order
64
64
  def displayable_topics(cluster_info)
65
65
  all = cluster_info
66
- .topics
67
- .sort_by { |topic| topic[:topic_name] }
66
+ .topics
67
+ .sort_by { |topic| topic[:topic_name] }
68
68
 
69
69
  return all if ::Karafka::Web.config.ui.visibility.internal_topics
70
70
 
71
- all.reject { |topic| topic[:topic_name].start_with?('__') }
71
+ all.reject { |topic| topic[:topic_name].start_with?("__") }
72
72
  end
73
73
  end
74
74
  end