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
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Runs all specs in parallel using timing-based load balancing
4
+ # Uses bin/balance_specs to distribute files across workers
5
+ #
6
+ # Environment variables:
7
+ # REGULAR_WORKERS - number of workers for regular specs (default: 4)
8
+ # PRO_WORKERS - number of workers for pro specs (default: 4)
9
+
10
+ set -e
11
+
12
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+
14
+ # Number of workers per spec type
15
+ REGULAR_WORKERS="${REGULAR_WORKERS:-4}"
16
+ PRO_WORKERS="${PRO_WORKERS:-4}"
17
+
18
+ echo "Running specs in parallel mode..."
19
+ echo " Regular workers: $REGULAR_WORKERS"
20
+ echo " Pro workers: $PRO_WORKERS"
21
+
22
+ # Create temp directory for logs
23
+ TMPDIR=$(mktemp -d)
24
+ trap "rm -rf $TMPDIR" EXIT
25
+
26
+ # Get balanced file lists from the balancer (JSON output parsed with jq)
27
+ echo ""
28
+ echo "=== Balancing Regular Specs ==="
29
+ REGULAR_JSON=$("$SCRIPT_DIR/balance_specs" regular "$REGULAR_WORKERS")
30
+ readarray -t REGULAR_GROUPS < <(echo "$REGULAR_JSON" | jq -r '.[] | join(" ")')
31
+
32
+ echo ""
33
+ echo "=== Balancing Pro Specs ==="
34
+ PRO_JSON=$("$SCRIPT_DIR/balance_specs" pro "$PRO_WORKERS")
35
+ readarray -t PRO_GROUPS < <(echo "$PRO_JSON" | jq -r '.[] | join(" ")')
36
+
37
+ echo ""
38
+ echo "Starting parallel execution..."
39
+
40
+ # Launch regular spec workers
41
+ PIDS=()
42
+ for i in $(seq 0 $((REGULAR_WORKERS - 1))); do
43
+ if [ -n "${REGULAR_GROUPS[$i]}" ]; then
44
+ PARALLEL=true PARALLEL_GROUP_ID="regular_$i" SPECS_TYPE=regular \
45
+ bundle exec rspec ${REGULAR_GROUPS[$i]} --format progress \
46
+ > "$TMPDIR/regular_$i.log" 2>&1 &
47
+ PIDS+=($!)
48
+ echo " Started regular worker $((i + 1)) (PID ${PIDS[-1]}): $(echo ${REGULAR_GROUPS[$i]} | wc -w) files"
49
+ fi
50
+ done
51
+
52
+ # Launch pro spec workers
53
+ for i in $(seq 0 $((PRO_WORKERS - 1))); do
54
+ if [ -n "${PRO_GROUPS[$i]}" ]; then
55
+ PARALLEL=true PARALLEL_GROUP_ID="pro_$i" SPECS_TYPE=pro \
56
+ bundle exec rspec ${PRO_GROUPS[$i]} --format progress \
57
+ > "$TMPDIR/pro_$i.log" 2>&1 &
58
+ PIDS+=($!)
59
+ echo " Started pro worker $((i + 1)) (PID ${PIDS[-1]}): $(echo ${PRO_GROUPS[$i]} | wc -w) files"
60
+ fi
61
+ done
62
+
63
+ echo ""
64
+ echo "Waiting for ${#PIDS[@]} workers to complete..."
65
+
66
+ # Wait for all processes and collect exit codes
67
+ FAILED=0
68
+ for idx in "${!PIDS[@]}"; do
69
+ PID="${PIDS[$idx]}"
70
+ if ! wait "$PID"; then
71
+ FAILED=1
72
+ fi
73
+ done
74
+
75
+ # Show all logs
76
+ echo ""
77
+ echo "=========================================="
78
+ echo " RESULTS "
79
+ echo "=========================================="
80
+
81
+ for i in $(seq 0 $((REGULAR_WORKERS - 1))); do
82
+ if [ -f "$TMPDIR/regular_$i.log" ]; then
83
+ echo ""
84
+ echo "=== Regular Worker $((i + 1)) ==="
85
+ cat "$TMPDIR/regular_$i.log"
86
+ fi
87
+ done
88
+
89
+ for i in $(seq 0 $((PRO_WORKERS - 1))); do
90
+ if [ -f "$TMPDIR/pro_$i.log" ]; then
91
+ echo ""
92
+ echo "=== Pro Worker $((i + 1)) ==="
93
+ cat "$TMPDIR/pro_$i.log"
94
+ fi
95
+ done
96
+
97
+ if [ $FAILED -eq 1 ]; then
98
+ echo ""
99
+ echo "=========================================="
100
+ echo " SOME SPECS FAILED! "
101
+ echo "=========================================="
102
+ exit 1
103
+ fi
104
+
105
+ echo ""
106
+ echo "=========================================="
107
+ echo " ALL SPECS PASSED! "
108
+ echo "=========================================="
109
+
110
+ # Run coverage check
111
+ "$SCRIPT_DIR/check_coverage"
data/docker-compose.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  services:
2
2
  kafka:
3
3
  container_name: kafka
4
- image: confluentinc/cp-kafka:8.1.0
4
+ image: confluentinc/cp-kafka:8.1.1
5
5
 
6
6
  ports:
7
7
  - 9092:9092
data/karafka-web.gemspec CHANGED
@@ -1,48 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('lib', __dir__)
3
+ lib = File.expand_path("lib", __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
- require 'karafka/web/version'
6
+ require "karafka/web/version"
7
7
 
8
8
  Gem::Specification.new do |spec|
9
- spec.name = 'karafka-web'
10
- spec.version = ::Karafka::Web::VERSION
11
- spec.platform = Gem::Platform::RUBY
12
- spec.authors = ['Maciej Mensfeld']
13
- spec.email = %w[contact@karafka.io]
14
- spec.homepage = 'https://karafka.io'
15
- spec.summary = 'Karafka ecosystem Web UI interface'
16
- spec.description = 'Karafka ecosystem plug-and-play Web UI'
17
- spec.licenses = %w[LGPL-3.0-only Commercial]
18
-
19
- spec.add_dependency 'erubi', '~> 1.4'
20
- spec.add_dependency 'karafka', '>= 2.5.2', '< 2.6.0'
21
- spec.add_dependency 'karafka-core', '>= 2.5.0', '< 2.6.0'
22
- spec.add_dependency 'roda', '~> 3.69', '>= 3.69'
23
- spec.add_dependency 'tilt', '~> 2.0'
24
-
25
- spec.add_development_dependency 'rackup', '~> 0.2'
26
-
27
- spec.required_ruby_version = '>= 3.2.0'
28
-
29
- spec.executables = %w[karafka-web]
9
+ spec.name = "karafka-web"
10
+ spec.version = ::Karafka::Web::VERSION
11
+ spec.platform = Gem::Platform::RUBY
12
+ spec.authors = ["Maciej Mensfeld"]
13
+ spec.email = %w[contact@karafka.io]
14
+ spec.homepage = "https://karafka.io"
15
+ spec.summary = "Karafka ecosystem Web UI interface"
16
+ spec.description = "Karafka ecosystem plug-and-play Web UI"
17
+ spec.licenses = %w[LGPL-3.0-only Commercial]
18
+
19
+ spec.add_dependency "erubi", "~> 1.4"
20
+ spec.add_dependency "karafka", ">= 2.5.2", "< 2.6.0"
21
+ spec.add_dependency "karafka-core", ">= 2.5.0", "< 2.6.0"
22
+ spec.add_dependency "roda", "~> 3.69", ">= 3.69"
23
+ spec.add_dependency "tilt", "~> 2.0"
24
+
25
+ spec.add_development_dependency "rackup", "~> 0.2"
26
+
27
+ spec.required_ruby_version = ">= 3.2.0"
28
+
29
+ spec.executables = %w[karafka-web]
30
30
  spec.require_paths = %w[lib]
31
31
 
32
32
  spec.files = `git ls-files -z`
33
- .split("\x0")
34
- .reject { |f| f.match(%r{^(spec)/}) }
35
- .reject { |f| f.include?('.github') }
36
- .reject { |f| f.start_with?('.') }
37
- .reject { |f| f.end_with?('.map') }
33
+ .split("\x0")
34
+ .reject { |f| f.match(%r{^(spec)/}) }
35
+ .reject { |f| f.include?(".github") }
36
+ .reject { |f| f.start_with?(".") }
37
+ .reject { |f| f.end_with?(".map") }
38
38
 
39
39
  spec.metadata = {
40
- 'funding_uri' => 'https://karafka.io/#become-pro',
41
- 'homepage_uri' => 'https://karafka.io',
42
- 'changelog_uri' => 'https://karafka.io/docs/Changelog-Karafka-Web-UI',
43
- 'bug_tracker_uri' => 'https://github.com/karafka/karafka-web/issues',
44
- 'source_code_uri' => 'https://github.com/karafka/karafka-web',
45
- 'documentation_uri' => 'https://karafka.io/docs',
46
- 'rubygems_mfa_required' => 'true'
40
+ "funding_uri" => "https://karafka.io/#become-pro",
41
+ "homepage_uri" => "https://karafka.io",
42
+ "changelog_uri" => "https://karafka.io/docs/Changelog-Karafka-Web-UI",
43
+ "bug_tracker_uri" => "https://github.com/karafka/karafka-web/issues",
44
+ "source_code_uri" => "https://github.com/karafka/karafka-web",
45
+ "documentation_uri" => "https://karafka.io/docs",
46
+ "rubygems_mfa_required" => "true"
47
47
  }
48
48
  end
@@ -13,7 +13,7 @@ module Karafka
13
13
  ObjectSpace
14
14
  .each_object(Class)
15
15
  .select { |klass| klass.superclass == Karafka::Web::Cli::Base }
16
- .reject { |klass| klass.to_s.end_with?('::Base') }
16
+ .reject { |klass| klass.to_s.end_with?("::Base") }
17
17
  .sort_by(&:name)
18
18
  end
19
19
  end
@@ -27,7 +27,7 @@ module Karafka
27
27
  # if we are supposed to compute the factor automatically
28
28
  # @return [Integer] replication factor for Karafka Web UI topics
29
29
  def compute_replication_factor(cli_replication_factor)
30
- cli_replication_factor || (Ui::Models::ClusterInfo.fetch.brokers.size > 1 ? 2 : 1)
30
+ cli_replication_factor || ((Ui::Models::ClusterInfo.fetch.brokers.size > 1) ? 2 : 1)
31
31
  end
32
32
  end
33
33
  end
@@ -5,14 +5,14 @@ module Karafka
5
5
  class Cli
6
6
  # Displays help
7
7
  class Help < Base
8
- desc 'Describes available commands'
8
+ desc "Describes available commands"
9
9
 
10
10
  # Print available commands
11
11
  def call
12
12
  # Find the longest command for alignment purposes
13
13
  max_command_length = self.class.commands.map { |command| command.name.size }.max
14
14
 
15
- puts 'Karafka Web UI commands:'
15
+ puts "Karafka Web UI commands:"
16
16
 
17
17
  # Print each command formatted with its description
18
18
  self.class.commands.each do |command|
@@ -5,13 +5,13 @@ module Karafka
5
5
  class Cli
6
6
  # Installs Web UI
7
7
  class Install < Base
8
- desc 'Installs the Web UI'
8
+ desc "Installs the Web UI"
9
9
 
10
10
  option(
11
11
  :replication_factor,
12
- 'Replication factor for created topics',
12
+ "Replication factor for created topics",
13
13
  Integer,
14
- ['--replication_factor [FACTOR]']
14
+ ["--replication_factor [FACTOR]"]
15
15
  )
16
16
 
17
17
  # Installs Karafka Web. Creates all needed topics, populates the data and adds the needed
@@ -5,13 +5,13 @@ module Karafka
5
5
  class Cli
6
6
  # Migrates the Web UI topics and states if needed
7
7
  class Migrate < Base
8
- desc 'Runs necessary migrations of Web UI topics and states'
8
+ desc "Runs necessary migrations of Web UI topics and states"
9
9
 
10
10
  option(
11
11
  :replication_factor,
12
- 'Replication factor for created topics',
12
+ "Replication factor for created topics",
13
13
  Integer,
14
- ['--replication_factor [FACTOR]']
14
+ ["--replication_factor [FACTOR]"]
15
15
  )
16
16
 
17
17
  # Creates new topics (if any) and populates missing data.
@@ -5,13 +5,13 @@ module Karafka
5
5
  class Cli
6
6
  # Resets the Web UI
7
7
  class Reset < Base
8
- desc 'Resets the Web UI by removing all the Web topics and creating them again'
8
+ desc "Resets the Web UI by removing all the Web topics and creating them again"
9
9
 
10
10
  option(
11
11
  :replication_factor,
12
- 'Replication factor for created topics',
12
+ "Replication factor for created topics",
13
13
  Integer,
14
- ['--replication_factor [FACTOR]']
14
+ ["--replication_factor [FACTOR]"]
15
15
  )
16
16
 
17
17
  # Resets Karafka Web. Removes the topics, creates them again and populates the initial
@@ -5,7 +5,7 @@ module Karafka
5
5
  class Cli
6
6
  # Uninstalls the Web UI
7
7
  class Uninstall < Base
8
- desc 'Removes all the Web UI topics and the enabled code'
8
+ desc "Removes all the Web UI topics and the enabled code"
9
9
 
10
10
  # Uninstalls Karafka Web
11
11
  def call
@@ -15,14 +15,22 @@ module Karafka
15
15
  # This is used both in the processing for eviction and in the UI
16
16
  setting :ttl, default: 30_000
17
17
 
18
- # Producer for the Web UI. By default it is a `Karafka.producer`, however it may be
19
- # overwritten if we want to use a separate instance in case of heavy usage of the
20
- # transactional producer as a default. In cases like this, Karafka may not be able to report
21
- # data because it uses this producer and it may be locked because of the transaction in a
22
- # user space.
18
+ # Producer for the Web UI.
19
+ #
20
+ # By default it uses a low-intensity variant of `Karafka.producer` with reduced
21
+ # acknowledgment requirements (acks: 0) since Web UI reporting is not mission-critical
22
+ # and serves primarily analytical purposes. This minimizes overhead by using
23
+ # fire-and-forget semantics where occasional message loss is acceptable.
24
+ #
25
+ # For idempotent or transactional producers, the default producer is used unchanged
26
+ # since acks settings cannot be altered for these producer types.
27
+ #
28
+ # This setting may be overwritten if you want to use a completely separate producer
29
+ # instance, for example in case of heavy usage of the transactional producer as a default
30
+ # where Karafka may not be able to report data because it is locked in a user transaction.
23
31
  setting(
24
32
  :producer,
25
- constructor: -> { ::Karafka.producer },
33
+ constructor: -> { Producer.new },
26
34
  lazy: true
27
35
  )
28
36
 
@@ -30,18 +38,18 @@ module Karafka
30
38
  # Karafka Web UI uses the Admin API for many operations, but there are few
31
39
  # (like states materialization) where a distinct consumer group is needed. In cases like that
32
40
  # this group id will be used
33
- setting :group_id, default: 'karafka_web'
41
+ setting :group_id, default: "karafka_web"
34
42
 
35
43
  # Topics naming - used for processing and UI
36
44
  setting :topics do
37
45
  # All the errors encountered will be dispatched to this topic for inspection
38
46
  setting :errors do
39
- setting :name, default: 'karafka_errors'
47
+ setting :name, default: "karafka_errors"
40
48
 
41
49
  # Remove really old errors (older than 3 months just to preserve space)
42
50
  setting :config, default: {
43
- 'cleanup.policy': 'delete',
44
- 'retention.ms': 3 * 31 * 24 * 60 * 60 * 1_000 # 3 months
51
+ "cleanup.policy": "delete",
52
+ "retention.ms": 3 * 31 * 24 * 60 * 60 * 1_000 # 3 months
45
53
  }
46
54
  end
47
55
 
@@ -50,7 +58,7 @@ module Karafka
50
58
  # information sent from each consumer process.
51
59
  setting :reports do
52
60
  # Name of the topic
53
- setting :name, default: 'karafka_consumers_reports'
61
+ setting :name, default: "karafka_consumers_reports"
54
62
 
55
63
  # We do not need to to store this data for longer than 1 day as this data is only
56
64
  # used to materialize the end states
@@ -61,36 +69,36 @@ module Karafka
61
69
  # In case its not consumed because no processes are running, it also usually means
62
70
  # there's no data to consume because no karafka servers report
63
71
  setting :config, default: {
64
- 'cleanup.policy': 'delete',
65
- 'retention.ms': 24 * 60 * 60 * 1_000 # 1 day
72
+ "cleanup.policy": "delete",
73
+ "retention.ms": 24 * 60 * 60 * 1_000 # 1 day
66
74
  }
67
75
  end
68
76
 
69
77
  # Topic for storing states aggregated info
70
78
  setting :states do
71
- setting :name, default: 'karafka_consumers_states'
79
+ setting :name, default: "karafka_consumers_states"
72
80
 
73
81
  # We care only about the most recent state, previous are irrelevant. So we can
74
82
  # easily compact after one minute. We do not use this beyond the most recent
75
83
  # collective state, hence it all can easily go away. We also limit the segment
76
84
  # size to at most 100MB not to use more space ever.
77
85
  setting :config, default: {
78
- 'cleanup.policy': 'compact',
79
- 'retention.ms': 60 * 60 * 1_000,
80
- 'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
81
- 'segment.bytes': 104_857_600 # 100MB
86
+ "cleanup.policy": "compact",
87
+ "retention.ms": 60 * 60 * 1_000,
88
+ "segment.ms": 24 * 60 * 60 * 1_000, # 1 day
89
+ "segment.bytes": 104_857_600 # 100MB
82
90
  }
83
91
  end
84
92
 
85
93
  # Topic for storing consumers historical metrics info
86
94
  setting :metrics do
87
- setting :name, default: 'karafka_consumers_metrics'
95
+ setting :name, default: "karafka_consumers_metrics"
88
96
 
89
97
  setting :config, default: {
90
- 'cleanup.policy': 'compact',
91
- 'retention.ms': 24 * 60 * 60 * 1_000, # 1 day
92
- 'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
93
- 'segment.bytes': 104_857_600 # 100MB
98
+ "cleanup.policy": "compact",
99
+ "retention.ms": 24 * 60 * 60 * 1_000, # 1 day
100
+ "segment.ms": 24 * 60 * 60 * 1_000, # 1 day
101
+ "segment.bytes": 104_857_600 # 100MB
94
102
  }
95
103
  end
96
104
 
@@ -99,13 +107,13 @@ module Karafka
99
107
  # transition from one to another is smooth. Otherwise upgrade would require changes
100
108
  # to topics (migration) which may be more complex
101
109
  setting :commands do
102
- setting :name, default: 'karafka_consumers_commands'
110
+ setting :name, default: "karafka_consumers_commands"
103
111
 
104
112
  setting :config, default: {
105
- 'cleanup.policy': 'delete',
106
- 'retention.ms': 7 * 24 * 60 * 60 * 1_000, # 7 days
107
- 'segment.ms': 24 * 60 * 60 * 1_000, # 1 day
108
- 'segment.bytes': 104_857_600 # 100MB
113
+ "cleanup.policy": "delete",
114
+ "retention.ms": 7 * 24 * 60 * 60 * 1_000, # 7 days
115
+ "segment.ms": 24 * 60 * 60 * 1_000, # 1 day
116
+ "segment.bytes": 104_857_600 # 100MB
109
117
  }
110
118
  end
111
119
  end
@@ -199,7 +207,7 @@ module Karafka
199
207
  setting :kafka, default: {
200
208
  # We do not use at the moment the `#eofed` flag for anything, thus there is no point in
201
209
  # having it set to true if user users it.
202
- 'enable.partition.eof': false
210
+ "enable.partition.eof": false
203
211
  }.freeze
204
212
  end
205
213
 
@@ -208,13 +216,13 @@ module Karafka
208
216
  # Should be set per ENV.
209
217
  setting :sessions do
210
218
  # Cookie key name
211
- setting :key, default: '_karafka_session'
219
+ setting :key, default: "_karafka_session"
212
220
 
213
221
  # Rack middleware session env key. We use independent key from "rack.session" here to
214
222
  # prevent our data from leaking to the main app (when mounted) and the other way around.
215
223
  # This also prevents us from overloading the session object with extra data that could
216
224
  # cause it to go beyond a cookie limit.
217
- setting :env_key, default: 'karafka.session'
225
+ setting :env_key, default: "karafka.session"
218
226
 
219
227
  # Secret for the session cookie
220
228
  setting :secret, default: SecureRandom.hex(32)
@@ -299,7 +307,7 @@ module Karafka
299
307
  # that might have been committed via transactional producer, we would wait for 1 second
300
308
  # to get needed data. If you are experiencing timeouts or other issues with the Web IU
301
309
  # interface, you can increase this.
302
- 'fetch.wait.max.ms': 100
310
+ "fetch.wait.max.ms": 100
303
311
  }
304
312
  end
305
313
  end
@@ -14,8 +14,8 @@ module Karafka
14
14
 
15
15
  super do |config|
16
16
  config.error_messages = YAML.safe_load_file(
17
- File.join(Karafka::Web.gem_root, 'config', 'locales', 'errors.yml')
18
- ).fetch('en').fetch('validations').fetch('web')
17
+ File.join(Karafka::Web.gem_root, "config", "locales", "errors.yml")
18
+ ).fetch("en").fetch("validations").fetch("web")
19
19
  end
20
20
  end
21
21
  end
@@ -13,11 +13,11 @@ module Karafka
13
13
  # @param message [::Karafka::Messages::Message]
14
14
  # @return [Object] deserialized data
15
15
  def call(message)
16
- raw_payload = if message.headers.key?('zlib')
17
- Zlib::Inflate.inflate(message.raw_payload)
18
- else
19
- message.raw_payload
20
- end
16
+ raw_payload = if message.headers.key?("zlib")
17
+ Zlib::Inflate.inflate(message.raw_payload)
18
+ else
19
+ message.raw_payload
20
+ end
21
21
 
22
22
  ::JSON.parse(
23
23
  raw_payload,
@@ -14,20 +14,20 @@ module Karafka
14
14
  def install(replication_factor: 1)
15
15
  enable!
16
16
  puts
17
- puts 'Installing Karafka Web UI...'
17
+ puts "Installing Karafka Web UI..."
18
18
  puts
19
19
  Management::Actions::ExtendBootFile.new.call
20
20
  puts
21
- puts 'Creating necessary topics and populating state data...'
21
+ puts "Creating necessary topics and populating state data..."
22
22
  puts
23
23
  Management::Actions::CreateTopics.new.call(replication_factor)
24
24
  wait_for_topics
25
25
  Management::Actions::CreateInitialStates.new.call
26
26
  puts
27
- puts 'Running data migrations...'
27
+ puts "Running data migrations..."
28
28
  Management::Actions::MigrateStatesData.new.call
29
29
  puts
30
- puts("Installation #{green('completed')}. Have fun!")
30
+ puts("Installation #{green("completed")}. Have fun!")
31
31
  puts
32
32
  end
33
33
 
@@ -38,16 +38,16 @@ module Karafka
38
38
  def migrate(replication_factor: 1)
39
39
  enable!
40
40
  puts
41
- puts 'Creating necessary topics and populating state data...'
41
+ puts "Creating necessary topics and populating state data..."
42
42
  puts
43
43
  Management::Actions::CreateTopics.new.call(replication_factor)
44
44
  wait_for_topics
45
45
  Management::Actions::CreateInitialStates.new.call
46
46
  puts
47
- puts 'Running data migrations...'
47
+ puts "Running data migrations..."
48
48
  Management::Actions::MigrateStatesData.new.call
49
49
  puts
50
- puts("Migration #{green('completed')}. Have fun!")
50
+ puts("Migration #{green("completed")}. Have fun!")
51
51
  puts
52
52
  end
53
53
 
@@ -56,7 +56,7 @@ module Karafka
56
56
  def reset(replication_factor: 1)
57
57
  enable!
58
58
  puts
59
- puts 'Resetting Karafka Web UI...'
59
+ puts "Resetting Karafka Web UI..."
60
60
  puts
61
61
  Management::Actions::DeleteTopics.new.call
62
62
  puts
@@ -64,10 +64,10 @@ module Karafka
64
64
  wait_for_topics
65
65
  Management::Actions::CreateInitialStates.new.call
66
66
  puts
67
- puts 'Running data migrations...'
67
+ puts "Running data migrations..."
68
68
  Management::Actions::MigrateStatesData.new.call
69
69
  puts
70
- puts("Resetting #{green('completed')}. Have fun!")
70
+ puts("Resetting #{green("completed")}. Have fun!")
71
71
  puts
72
72
  end
73
73
 
@@ -75,12 +75,12 @@ module Karafka
75
75
  def uninstall
76
76
  enable!
77
77
  puts
78
- puts 'Uninstalling Karafka Web UI...'
78
+ puts "Uninstalling Karafka Web UI..."
79
79
  puts
80
80
  Management::Actions::DeleteTopics.new.call
81
81
  Management::Actions::CleanBootFile.new.call
82
82
  puts
83
- puts("Uninstalling #{green('completed')}. Goodbye!")
83
+ puts("Uninstalling #{green("completed")}. Goodbye!")
84
84
  puts
85
85
  end
86
86
 
@@ -97,7 +97,7 @@ module Karafka
97
97
  # bit of time just in case.
98
98
  def wait_for_topics
99
99
  puts
100
- print 'Waiting for the topics to synchronize in the cluster'
100
+ print "Waiting for the topics to synchronize in the cluster"
101
101
  wait(5)
102
102
  puts
103
103
  end
@@ -107,7 +107,7 @@ module Karafka
107
107
  def wait(time_in_seconds)
108
108
  time_in_seconds.times do
109
109
  sleep(1)
110
- print '.'
110
+ print "."
111
111
  end
112
112
 
113
113
  print "\n"
@@ -14,20 +14,20 @@ module Karafka
14
14
 
15
15
  # @return [String] green colored word "successfully"
16
16
  def successfully
17
- green('successfully')
17
+ green("successfully")
18
18
  end
19
19
 
20
20
  # @return [String] green colored word "already"
21
21
  def already
22
- green('already')
22
+ green("already")
23
23
  end
24
24
 
25
25
  # @return [Array<String>] topics available in the cluster
26
26
  def existing_topics_names
27
27
  @existing_topics_names ||= ::Karafka::Admin
28
- .cluster_info
29
- .topics
30
- .map { |topic| topic[:topic_name] }
28
+ .cluster_info
29
+ .topics
30
+ .map { |topic| topic[:topic_name] }
31
31
  end
32
32
  end
33
33
  end
@@ -16,14 +16,14 @@ module Karafka
16
16
  karafka_rb = File.readlines(Karafka.boot_file)
17
17
 
18
18
  if karafka_rb.any? { |line| line.include?(ENABLER_CODE) }
19
- puts 'Updating the Karafka boot file...'
19
+ puts "Updating the Karafka boot file..."
20
20
  karafka_rb.delete_if { |line| line.include?(ENABLER_CODE) }
21
21
 
22
22
  File.write(Karafka.boot_file, karafka_rb.join)
23
23
  puts "Karafka boot file #{successfully} updated."
24
- puts 'Make sure to remove configuration and other customizations as well.'
24
+ puts "Make sure to remove configuration and other customizations as well."
25
25
  else
26
- puts 'Karafka Web UI components not found in the boot file.'
26
+ puts "Karafka Web UI components not found in the boot file."
27
27
  end
28
28
  end
29
29
  end