karafka-web 0.10.3 → 0.11.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +64 -176
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +88 -44
  6. data/LICENSE +6 -2
  7. data/bin/verify_kafka_warnings +35 -0
  8. data/bin/verify_topics_naming +35 -0
  9. data/config/locales/pro_errors.yml +1 -0
  10. data/docker-compose.yml +1 -1
  11. data/gulpfile.js +0 -2
  12. data/karafka-web.gemspec +3 -5
  13. data/lib/karafka/web/config.rb +86 -10
  14. data/lib/karafka/web/contracts/config.rb +45 -5
  15. data/lib/karafka/web/errors.rb +10 -0
  16. data/lib/karafka/web/management/actions/create_initial_states.rb +6 -6
  17. data/lib/karafka/web/management/actions/create_topics.rb +30 -64
  18. data/lib/karafka/web/management/actions/delete_topics.rb +5 -5
  19. data/lib/karafka/web/management/actions/enable.rb +5 -5
  20. data/lib/karafka/web/pro/commanding/commands/base.rb +37 -13
  21. data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +33 -0
  22. data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +32 -0
  23. data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +37 -0
  24. data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +30 -0
  25. data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +30 -0
  26. data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +30 -0
  27. data/lib/karafka/web/pro/commanding/config.rb +6 -10
  28. data/lib/karafka/web/pro/commanding/contracts/config.rb +2 -10
  29. data/lib/karafka/web/pro/commanding/dispatcher.rb +45 -24
  30. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +67 -0
  31. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +44 -0
  32. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +29 -0
  33. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +86 -0
  34. data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +56 -0
  35. data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +55 -0
  36. data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +62 -0
  37. data/lib/karafka/web/pro/commanding/listener.rb +4 -12
  38. data/lib/karafka/web/pro/commanding/manager.rb +36 -24
  39. data/lib/karafka/web/pro/commanding/matcher.rb +7 -17
  40. data/lib/karafka/web/pro/commanding/request.rb +39 -0
  41. data/lib/karafka/web/pro/commanding.rb +2 -10
  42. data/lib/karafka/web/pro/loader.rb +32 -10
  43. data/lib/karafka/web/pro/ui/app.rb +31 -390
  44. data/lib/karafka/web/pro/ui/controllers/base_controller.rb +8 -10
  45. data/lib/karafka/web/pro/ui/controllers/cluster_controller.rb +2 -10
  46. data/lib/karafka/web/pro/ui/controllers/consumers/base_controller.rb +21 -0
  47. data/lib/karafka/web/pro/ui/controllers/consumers/commanding_controller.rb +148 -0
  48. data/lib/karafka/web/pro/ui/controllers/consumers/commands_controller.rb +96 -0
  49. data/lib/karafka/web/pro/ui/controllers/consumers/consumers_controller.rb +101 -0
  50. data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +36 -0
  51. data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +57 -0
  52. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +86 -0
  53. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +75 -0
  54. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +110 -0
  55. data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +2 -10
  56. data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +2 -10
  57. data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +3 -11
  58. data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +21 -0
  59. data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +215 -0
  60. data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +145 -0
  61. data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +68 -0
  62. data/lib/karafka/web/pro/ui/controllers/health_controller.rb +2 -10
  63. data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +2 -10
  64. data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +12 -13
  65. data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +2 -10
  66. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +2 -10
  67. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +8 -16
  68. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +9 -15
  69. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +2 -10
  70. data/lib/karafka/web/pro/ui/controllers/status_controller.rb +2 -10
  71. data/lib/karafka/web/pro/ui/controllers/support_controller.rb +2 -10
  72. data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +21 -0
  73. data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +86 -0
  74. data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +91 -0
  75. data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +55 -0
  76. data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +37 -0
  77. data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +101 -0
  78. data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +2 -10
  79. data/lib/karafka/web/pro/ui/lib/branding/config.rb +2 -10
  80. data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +2 -10
  81. data/lib/karafka/web/pro/ui/lib/branding.rb +2 -10
  82. data/lib/karafka/web/pro/ui/lib/features.rb +53 -0
  83. data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +2 -10
  84. data/lib/karafka/web/pro/ui/lib/policies/config.rb +2 -10
  85. data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +2 -10
  86. data/lib/karafka/web/pro/ui/lib/policies/messages.rb +2 -10
  87. data/lib/karafka/web/pro/ui/lib/policies/requests.rb +2 -10
  88. data/lib/karafka/web/pro/ui/lib/policies.rb +2 -10
  89. data/lib/karafka/web/pro/ui/lib/safe_runner.rb +5 -0
  90. data/lib/karafka/web/pro/ui/lib/search/config.rb +2 -10
  91. data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +2 -10
  92. data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +2 -10
  93. data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +2 -10
  94. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +10 -11
  95. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +2 -10
  96. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +23 -11
  97. data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +2 -10
  98. data/lib/karafka/web/pro/ui/lib/search/runner.rb +3 -11
  99. data/lib/karafka/web/pro/ui/lib/search.rb +2 -10
  100. data/lib/karafka/web/pro/ui/routes/base.rb +19 -0
  101. data/lib/karafka/web/pro/ui/routes/cluster.rb +37 -0
  102. data/lib/karafka/web/pro/ui/routes/consumers.rb +145 -0
  103. data/lib/karafka/web/pro/ui/routes/dashboard.rb +25 -0
  104. data/lib/karafka/web/pro/ui/routes/dlq.rb +24 -0
  105. data/lib/karafka/web/pro/ui/routes/errors.rb +39 -0
  106. data/lib/karafka/web/pro/ui/routes/explorer.rb +118 -0
  107. data/lib/karafka/web/pro/ui/routes/health.rb +47 -0
  108. data/lib/karafka/web/pro/ui/routes/jobs.rb +33 -0
  109. data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +59 -0
  110. data/lib/karafka/web/pro/ui/routes/routing.rb +31 -0
  111. data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +75 -0
  112. data/lib/karafka/web/pro/ui/routes/status.rb +24 -0
  113. data/lib/karafka/web/pro/ui/routes/support.rb +24 -0
  114. data/lib/karafka/web/pro/ui/routes/topics.rb +90 -0
  115. data/lib/karafka/web/pro/ui/routes/ux.rb +24 -0
  116. data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +3 -0
  117. data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +3 -0
  118. data/lib/karafka/web/pro/ui/views/cluster/_config.erb +3 -0
  119. data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +3 -0
  120. data/lib/karafka/web/pro/ui/views/cluster/index.erb +4 -1
  121. data/lib/karafka/web/pro/ui/views/cluster/show.erb +3 -0
  122. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_backtrace.erb +3 -0
  123. data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +24 -0
  124. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_command.erb +22 -6
  125. data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +4 -0
  126. data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +6 -0
  127. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_incompatible_schema.erb +3 -0
  128. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_metadata.erb +4 -1
  129. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_table.erb +5 -2
  130. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/index.erb +7 -4
  131. data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +32 -0
  132. data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +46 -0
  133. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +59 -0
  134. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +71 -0
  135. data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +38 -0
  136. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +80 -0
  137. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +11 -0
  138. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_metrics.erb +3 -0
  139. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +10 -0
  140. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_partition.erb +16 -0
  141. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +33 -0
  142. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_stopped.erb +3 -0
  143. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_subscription_group.erb +7 -3
  144. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_tabs.erb +7 -4
  145. data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +15 -0
  146. data/lib/karafka/web/pro/ui/views/consumers/{index.erb → consumers/index.erb} +6 -3
  147. data/lib/karafka/web/pro/ui/views/consumers/{performance.erb → consumers/performance.erb} +6 -3
  148. data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +24 -0
  149. data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +16 -0
  150. data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +107 -0
  151. data/lib/karafka/web/pro/ui/views/consumers/{controls.erb → controls/index.erb} +8 -5
  152. data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +36 -0
  153. data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_job.erb +3 -0
  154. data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_no_jobs.erb +3 -0
  155. data/lib/karafka/web/pro/ui/views/consumers/{pending_jobs.erb → jobs/pending.erb} +7 -8
  156. data/lib/karafka/web/pro/ui/views/consumers/{running_jobs.erb → jobs/running.erb} +7 -8
  157. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +77 -0
  158. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +58 -0
  159. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +109 -0
  160. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +16 -0
  161. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +15 -0
  162. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +12 -0
  163. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +22 -0
  164. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +27 -0
  165. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +60 -0
  166. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +59 -0
  167. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +24 -0
  168. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +78 -0
  169. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +16 -0
  170. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +20 -0
  171. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +16 -0
  172. data/lib/karafka/web/pro/ui/views/dashboard/index.erb +4 -1
  173. data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +3 -0
  174. data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +3 -0
  175. data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +4 -1
  176. data/lib/karafka/web/pro/ui/views/dlq/index.erb +3 -0
  177. data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +3 -0
  178. data/lib/karafka/web/pro/ui/views/errors/_error.erb +3 -0
  179. data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +3 -0
  180. data/lib/karafka/web/pro/ui/views/errors/_selector.erb +3 -0
  181. data/lib/karafka/web/pro/ui/views/errors/_table.erb +4 -1
  182. data/lib/karafka/web/pro/ui/views/errors/index.erb +6 -3
  183. data/lib/karafka/web/pro/ui/views/errors/partition.erb +5 -2
  184. data/lib/karafka/web/pro/ui/views/errors/show.erb +3 -0
  185. data/lib/karafka/web/pro/ui/views/explorer/{_breadcrumbs.erb → explorer/_breadcrumbs.erb} +7 -4
  186. data/lib/karafka/web/pro/ui/views/explorer/{_failed_deserialization.erb → explorer/_failed_deserialization.erb} +3 -0
  187. data/lib/karafka/web/pro/ui/views/explorer/{_filtered.erb → explorer/_filtered.erb} +3 -0
  188. data/lib/karafka/web/pro/ui/views/explorer/{_message.erb → explorer/_message.erb} +4 -1
  189. data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +4 -0
  190. data/lib/karafka/web/pro/ui/views/explorer/{_partition_option.erb → explorer/_partition_option.erb} +4 -1
  191. data/lib/karafka/web/pro/ui/views/explorer/{_selector.erb → explorer/_selector.erb} +4 -1
  192. data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +13 -0
  193. data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +17 -0
  194. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_metadata.erb +10 -7
  195. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_payload.erb +6 -3
  196. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_resources_utilization.erb +7 -4
  197. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_too_big_to_be_displayed.erb +3 -0
  198. data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_detail.erb +3 -0
  199. data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +51 -0
  200. data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_key.erb +3 -0
  201. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_cleaned.erb +6 -0
  202. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_empty.erb +6 -0
  203. data/lib/karafka/web/pro/ui/views/explorer/{partition → explorer/partition}/_messages.erb +4 -1
  204. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +16 -0
  205. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +33 -0
  206. data/lib/karafka/web/pro/ui/views/explorer/{partition.erb → explorer/partition.erb} +24 -17
  207. data/lib/karafka/web/pro/ui/views/explorer/{show.erb → explorer/show.erb} +17 -19
  208. data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_actions.erb +5 -2
  209. data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +6 -0
  210. data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_limited.erb +3 -0
  211. data/lib/karafka/web/pro/ui/views/explorer/{topic.erb → explorer/topic.erb} +7 -4
  212. data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +32 -0
  213. data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +143 -0
  214. data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +4 -0
  215. data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +6 -0
  216. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_metadata.erb +3 -0
  217. data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +6 -0
  218. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_no_search_criteria.erb +3 -0
  219. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_criteria.erb +3 -0
  220. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_modal.erb +5 -2
  221. data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +6 -0
  222. data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +32 -0
  223. data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +3 -0
  224. data/lib/karafka/web/pro/ui/views/health/_no_data.erb +3 -0
  225. data/lib/karafka/web/pro/ui/views/health/_partition.erb +16 -1
  226. data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +3 -0
  227. data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +3 -0
  228. data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +3 -0
  229. data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +4 -1
  230. data/lib/karafka/web/pro/ui/views/health/_tabs.erb +3 -0
  231. data/lib/karafka/web/pro/ui/views/health/changes.erb +4 -1
  232. data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +3 -0
  233. data/lib/karafka/web/pro/ui/views/health/lags.erb +5 -2
  234. data/lib/karafka/web/pro/ui/views/health/offsets.erb +4 -1
  235. data/lib/karafka/web/pro/ui/views/health/overview.erb +8 -3
  236. data/lib/karafka/web/pro/ui/views/jobs/_job.erb +50 -38
  237. data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +3 -0
  238. data/lib/karafka/web/pro/ui/views/jobs/pending.erb +4 -1
  239. data/lib/karafka/web/pro/ui/views/jobs/running.erb +4 -1
  240. data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +3 -0
  241. data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +3 -0
  242. data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +3 -0
  243. data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +3 -0
  244. data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +3 -0
  245. data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +3 -0
  246. data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +3 -0
  247. data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +3 -0
  248. data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +3 -0
  249. data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +3 -0
  250. data/lib/karafka/web/pro/ui/views/routing/_detail.erb +3 -0
  251. data/lib/karafka/web/pro/ui/views/routing/_topic.erb +3 -0
  252. data/lib/karafka/web/pro/ui/views/routing/index.erb +3 -0
  253. data/lib/karafka/web/pro/ui/views/routing/show.erb +3 -0
  254. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +6 -3
  255. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +3 -0
  256. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +4 -1
  257. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +3 -0
  258. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +23 -16
  259. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +6 -3
  260. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +3 -0
  261. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +3 -0
  262. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +4 -1
  263. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +3 -0
  264. data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +25 -17
  265. data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +16 -0
  266. data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +3 -0
  267. data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +3 -0
  268. data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +34 -0
  269. data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +26 -0
  270. data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +13 -0
  271. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +50 -0
  272. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +16 -0
  273. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +12 -0
  274. data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +16 -0
  275. data/lib/karafka/web/pro/ui/views/topics/{config.erb → configs/index.erb} +9 -3
  276. data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +13 -0
  277. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_badges.erb +3 -0
  278. data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +28 -0
  279. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_chart.erb +3 -0
  280. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +47 -0
  281. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +15 -0
  282. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +14 -0
  283. data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +4 -0
  284. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_limited.erb +3 -0
  285. data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +13 -0
  286. data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +16 -0
  287. data/lib/karafka/web/pro/ui/views/topics/{distribution.erb → distributions/show.erb} +11 -7
  288. data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +20 -0
  289. data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +13 -0
  290. data/lib/karafka/web/pro/ui/views/topics/{offsets.erb → offsets/show.erb} +6 -3
  291. data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +20 -0
  292. data/lib/karafka/web/pro/ui/views/topics/{_partition.erb → replications/_partition.erb} +4 -1
  293. data/lib/karafka/web/pro/ui/views/topics/{replication.erb → replications/show.erb} +6 -3
  294. data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +32 -0
  295. data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +13 -0
  296. data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +15 -0
  297. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +36 -0
  298. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +15 -0
  299. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +13 -0
  300. data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +80 -0
  301. data/lib/karafka/web/pro/ui/views/topics/{_tabs.erb → topics/_tabs.erb} +7 -4
  302. data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +12 -0
  303. data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +10 -0
  304. data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +19 -0
  305. data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +12 -0
  306. data/lib/karafka/web/processing/consumers/metrics.rb +1 -1
  307. data/lib/karafka/web/processing/consumers/state.rb +1 -1
  308. data/lib/karafka/web/processing/publisher.rb +4 -4
  309. data/lib/karafka/web/tracking/consumers/contracts/partition.rb +1 -0
  310. data/lib/karafka/web/tracking/consumers/listeners/errors.rb +38 -9
  311. data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +2 -2
  312. data/lib/karafka/web/tracking/consumers/listeners/transactions.rb +44 -0
  313. data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
  314. data/lib/karafka/web/tracking/consumers/sampler.rb +81 -14
  315. data/lib/karafka/web/tracking/helpers/sysconf.rb +33 -0
  316. data/lib/karafka/web/tracking/producers/reporter.rb +2 -9
  317. data/lib/karafka/web/ui/app.rb +19 -112
  318. data/lib/karafka/web/ui/base.rb +63 -4
  319. data/lib/karafka/web/ui/controllers/base_controller.rb +43 -1
  320. data/lib/karafka/web/ui/controllers/cluster_controller.rb +5 -2
  321. data/lib/karafka/web/ui/controllers/errors_controller.rb +1 -1
  322. data/lib/karafka/web/ui/controllers/requests/execution_wrapper.rb +52 -0
  323. data/lib/karafka/web/ui/controllers/requests/hookable.rb +99 -0
  324. data/lib/karafka/web/ui/controllers/requests/params.rb +39 -1
  325. data/lib/karafka/web/ui/controllers/responses/redirect.rb +0 -5
  326. data/lib/karafka/web/ui/controllers/status_controller.rb +3 -0
  327. data/lib/karafka/web/ui/helpers/application_helper.rb +10 -1
  328. data/lib/karafka/web/ui/helpers/paths_helper.rb +54 -10
  329. data/lib/karafka/web/ui/lib/admin.rb +1 -1
  330. data/lib/karafka/web/ui/lib/cache.rb +135 -0
  331. data/lib/karafka/web/ui/models/broker.rb +1 -2
  332. data/lib/karafka/web/ui/models/cluster_info.rb +15 -21
  333. data/lib/karafka/web/ui/models/consumers_metrics.rb +1 -1
  334. data/lib/karafka/web/ui/models/consumers_state.rb +1 -1
  335. data/lib/karafka/web/ui/models/counters.rb +1 -1
  336. data/lib/karafka/web/ui/models/health.rb +9 -7
  337. data/lib/karafka/web/ui/models/process.rb +14 -0
  338. data/lib/karafka/web/ui/models/processes.rb +2 -2
  339. data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +1 -1
  340. data/lib/karafka/web/ui/models/status.rb +27 -8
  341. data/lib/karafka/web/ui/models/topic.rb +1 -2
  342. data/lib/karafka/web/ui/public/javascripts/application.js +8 -98
  343. data/lib/karafka/web/ui/public/javascripts/application.min.js +15 -6
  344. data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
  345. data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
  346. data/lib/karafka/web/ui/public/javascripts/components/action_confirmation_manager.js +30 -0
  347. data/lib/karafka/web/ui/public/javascripts/components/alerts.js +39 -0
  348. data/lib/karafka/web/ui/public/javascripts/components/btn_toggle_manager.js +17 -7
  349. data/lib/karafka/web/ui/public/javascripts/components/button_lock_manager.js +50 -0
  350. data/lib/karafka/web/ui/public/javascripts/components/live_poll.js +71 -19
  351. data/lib/karafka/web/ui/public/javascripts/components/message_republish_manager.js +50 -0
  352. data/lib/karafka/web/ui/public/javascripts/components/page_title_tracker.js +21 -0
  353. data/lib/karafka/web/ui/public/javascripts/components/partition_redirect_manager.js +21 -0
  354. data/lib/karafka/web/ui/public/javascripts/components/time_ago_manager.js +25 -0
  355. data/lib/karafka/web/ui/public/javascripts/components/timestamp_selector.js +30 -0
  356. data/lib/karafka/web/ui/public/javascripts/libs/datepicker.js +2 -2
  357. data/lib/karafka/web/ui/public/stylesheets/application.css +30 -0
  358. data/lib/karafka/web/ui/public/stylesheets/application.min.css +5123 -13
  359. data/lib/karafka/web/ui/public/stylesheets/application.min.css.br +0 -0
  360. data/lib/karafka/web/ui/public/stylesheets/application.min.css.gz +0 -0
  361. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.gz +0 -0
  362. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.gz +0 -0
  363. data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +512 -213
  364. data/lib/karafka/web/ui/routes/assets.rb +53 -0
  365. data/lib/karafka/web/ui/routes/base.rb +36 -0
  366. data/lib/karafka/web/ui/routes/cluster.rb +28 -0
  367. data/lib/karafka/web/ui/routes/consumers.rb +35 -0
  368. data/lib/karafka/web/ui/routes/dashboard.rb +20 -0
  369. data/lib/karafka/web/ui/routes/errors.rb +26 -0
  370. data/lib/karafka/web/ui/routes/jobs.rb +28 -0
  371. data/lib/karafka/web/ui/routes/pro_only.rb +27 -0
  372. data/lib/karafka/web/ui/routes/routing.rb +26 -0
  373. data/lib/karafka/web/ui/routes/status.rb +19 -0
  374. data/lib/karafka/web/ui/routes/support.rb +19 -0
  375. data/lib/karafka/web/ui/routes/ux.rb +19 -0
  376. data/lib/karafka/web/ui/views/cluster/_partition.erb +2 -2
  377. data/lib/karafka/web/ui/views/cluster/brokers.erb +1 -1
  378. data/lib/karafka/web/ui/views/consumers/_breadcrumbs.erb +7 -1
  379. data/lib/karafka/web/ui/views/consumers/_consumer.erb +39 -30
  380. data/lib/karafka/web/ui/views/consumers/_incompatible.erb +13 -0
  381. data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +2 -2
  382. data/lib/karafka/web/ui/views/consumers/_tabs.erb +4 -4
  383. data/lib/karafka/web/ui/views/consumers/index.erb +1 -1
  384. data/lib/karafka/web/ui/views/dashboard/_feature_pro.erb +1 -1
  385. data/lib/karafka/web/ui/views/dashboard/_not_enough_data.erb +2 -2
  386. data/lib/karafka/web/ui/views/dashboard/_ranges_selector.erb +1 -1
  387. data/lib/karafka/web/ui/views/dashboard/index.erb +6 -49
  388. data/lib/karafka/web/ui/views/errors/_detail.erb +3 -3
  389. data/lib/karafka/web/ui/views/errors/index.erb +1 -1
  390. data/lib/karafka/web/ui/views/jobs/_job.erb +38 -29
  391. data/lib/karafka/web/ui/views/jobs/pending.erb +1 -1
  392. data/lib/karafka/web/ui/views/jobs/running.erb +1 -1
  393. data/lib/karafka/web/ui/views/layout.erb +7 -5
  394. data/lib/karafka/web/ui/views/shared/_become_pro.erb +1 -1
  395. data/lib/karafka/web/ui/views/shared/_brand.erb +1 -1
  396. data/lib/karafka/web/ui/views/shared/_breadcrumbs.erb +1 -1
  397. data/lib/karafka/web/ui/views/shared/_content.erb +1 -1
  398. data/lib/karafka/web/ui/views/shared/_controls.erb +10 -3
  399. data/lib/karafka/web/ui/views/shared/_custom_nav.erb +9 -0
  400. data/lib/karafka/web/ui/views/shared/_flashes.erb +3 -5
  401. data/lib/karafka/web/ui/views/shared/_header.erb +25 -2
  402. data/lib/karafka/web/ui/views/shared/_navigation.erb +17 -15
  403. data/lib/karafka/web/ui/views/shared/alerts/_error.erb +8 -0
  404. data/lib/karafka/web/ui/views/shared/alerts/_info.erb +8 -0
  405. data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +8 -0
  406. data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +8 -0
  407. data/lib/karafka/web/ui/views/shared/alerts/_success.erb +8 -0
  408. data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +8 -0
  409. data/lib/karafka/web/ui/views/shared/exceptions/incompatible_schema.erb +34 -0
  410. data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +4 -0
  411. data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +5 -1
  412. data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +4 -0
  413. data/lib/karafka/web/ui/views/shared/icons/_arrow_left.erb +3 -0
  414. data/lib/karafka/web/ui/views/shared/icons/_arrow_up_tray.erb +3 -0
  415. data/lib/karafka/web/ui/views/shared/icons/_clock.erb +3 -0
  416. data/lib/karafka/web/ui/views/shared/icons/_pencil.erb +3 -0
  417. data/lib/karafka/web/ui/views/shared/icons/_pencil_square.erb +3 -0
  418. data/lib/karafka/web/ui/views/shared/icons/_play_pause.erb +3 -0
  419. data/lib/karafka/web/ui/views/shared/icons/_plus.erb +3 -0
  420. data/lib/karafka/web/ui/views/shared/icons/_trash.erb +3 -0
  421. data/lib/karafka/web/ui/views/status/failures/_live_reporting.erb +1 -1
  422. data/lib/karafka/web/ui/views/status/failures/_partitions.erb +3 -3
  423. data/lib/karafka/web/ui/views/status/failures/_state_calculation.erb +2 -2
  424. data/lib/karafka/web/ui/views/status/info/_components.erb +6 -6
  425. data/lib/karafka/web/ui/views/status/show.erb +15 -0
  426. data/lib/karafka/web/ui/views/status/warnings/_consumers_schemas.erb +31 -0
  427. data/lib/karafka/web/ui/views/ux/_icons.erb +1 -1
  428. data/lib/karafka/web/ui/views/ux/_status_rows.erb +6 -0
  429. data/lib/karafka/web/version.rb +1 -1
  430. data/lib/karafka/web.rb +9 -1
  431. data/package-lock.json +799 -1226
  432. data/package.json +3 -4
  433. data/postcss.config.js +1 -2
  434. data/renovate.json +13 -1
  435. data/tailwind.config.js +0 -4
  436. data.tar.gz.sig +0 -0
  437. metadata +233 -109
  438. metadata.gz.sig +0 -0
  439. data/lib/karafka/web/pro/commanding/commands/quiet.rb +0 -34
  440. data/lib/karafka/web/pro/commanding/commands/stop.rb +0 -34
  441. data/lib/karafka/web/pro/commanding/commands/trace.rb +0 -41
  442. data/lib/karafka/web/pro/ui/controllers/commanding_controller.rb +0 -118
  443. data/lib/karafka/web/pro/ui/controllers/commands_controller.rb +0 -96
  444. data/lib/karafka/web/pro/ui/controllers/consumers_controller.rb +0 -138
  445. data/lib/karafka/web/pro/ui/controllers/explorer_controller.rb +0 -220
  446. data/lib/karafka/web/pro/ui/controllers/messages_controller.rb +0 -107
  447. data/lib/karafka/web/pro/ui/controllers/search_controller.rb +0 -73
  448. data/lib/karafka/web/pro/ui/controllers/topics_controller.rb +0 -130
  449. data/lib/karafka/web/pro/ui/views/commands/_breadcrumbs.erb +0 -21
  450. data/lib/karafka/web/pro/ui/views/commands/_command_details.erb +0 -1
  451. data/lib/karafka/web/pro/ui/views/commands/_empty.erb +0 -3
  452. data/lib/karafka/web/pro/ui/views/commands/show.erb +0 -33
  453. data/lib/karafka/web/pro/ui/views/consumers/_breadcrumbs.erb +0 -55
  454. data/lib/karafka/web/pro/ui/views/consumers/_consumer.erb +0 -47
  455. data/lib/karafka/web/pro/ui/views/consumers/_consumer_controls.erb +0 -95
  456. data/lib/karafka/web/pro/ui/views/consumers/_consumer_performance.erb +0 -59
  457. data/lib/karafka/web/pro/ui/views/consumers/_tabs.erb +0 -33
  458. data/lib/karafka/web/pro/ui/views/consumers/consumer/_commands.erb +0 -72
  459. data/lib/karafka/web/pro/ui/views/consumers/consumer/_consumer_group.erb +0 -8
  460. data/lib/karafka/web/pro/ui/views/consumers/consumer/_no_subscriptions.erb +0 -7
  461. data/lib/karafka/web/pro/ui/views/consumers/details.erb +0 -13
  462. data/lib/karafka/web/pro/ui/views/consumers/subscriptions.erb +0 -25
  463. data/lib/karafka/web/pro/ui/views/explorer/_no_topics.erb +0 -1
  464. data/lib/karafka/web/pro/ui/views/explorer/_topic.erb +0 -10
  465. data/lib/karafka/web/pro/ui/views/explorer/index.erb +0 -14
  466. data/lib/karafka/web/pro/ui/views/explorer/messages/_headers.erb +0 -33
  467. data/lib/karafka/web/pro/ui/views/explorer/partition/_cleaned.erb +0 -3
  468. data/lib/karafka/web/pro/ui/views/explorer/partition/_empty.erb +0 -3
  469. data/lib/karafka/web/pro/ui/views/explorer/topic/_empty.erb +0 -3
  470. data/lib/karafka/web/pro/ui/views/search/_breadcrumbs.erb +0 -1
  471. data/lib/karafka/web/pro/ui/views/search/_fix_errors.erb +0 -3
  472. data/lib/karafka/web/pro/ui/views/search/_no_results.erb +0 -3
  473. data/lib/karafka/web/pro/ui/views/search/_timeout.erb +0 -3
  474. data/lib/karafka/web/pro/ui/views/search/index.erb +0 -29
  475. data/lib/karafka/web/pro/ui/views/topics/_breadcrumbs.erb +0 -45
  476. data/lib/karafka/web/pro/ui/views/topics/_partition_offsets.erb +0 -10
  477. data/lib/karafka/web/pro/ui/views/topics/_topic.erb +0 -9
  478. data/lib/karafka/web/pro/ui/views/topics/distribution/_empty_partitions.erb +0 -1
  479. data/lib/karafka/web/pro/ui/views/topics/distribution/_partition.erb +0 -10
  480. data/lib/karafka/web/pro/ui/views/topics/index.erb +0 -14
  481. data/lib/karafka/web/ui/lib/ttl_cache.rb +0 -82
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
3
6
  module Karafka
4
7
  module Web
5
8
  module Pro
@@ -49,6 +52,7 @@ module Karafka
49
52
  @executed = true
50
53
 
51
54
  if objspace?
55
+ GC.disable
52
56
  ObjectSpace.trace_object_allocations_start
53
57
  before = ObjectSpace.each_object.count
54
58
  end
@@ -76,6 +80,7 @@ module Karafka
76
80
  if objspace?
77
81
  @allocations = ObjectSpace.each_object.count - before
78
82
  ObjectSpace.trace_object_allocations_stop
83
+ GC.enable
79
84
  end
80
85
  end
81
86
 
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -30,7 +22,14 @@ module Karafka
30
22
  def call(message, phrase)
31
23
  message.raw_headers.each do |raw_header_key, raw_header_value|
32
24
  return true if safe_include?(raw_header_key, phrase)
33
- return true if safe_include?(raw_header_value, phrase)
25
+
26
+ if raw_header_value.is_a?(Array)
27
+ raw_header_value.each do |raw_header_sub_value|
28
+ return true if safe_include?(raw_header_sub_value, phrase)
29
+ end
30
+ elsif safe_include?(raw_header_value, phrase)
31
+ return true
32
+ end
34
33
  end
35
34
 
36
35
  false
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -19,9 +11,13 @@ module Karafka
19
11
  module Search
20
12
  module Matchers
21
13
  # Checks for phrase existence in the raw payload
14
+ # If raw payload has a `zlib` header, it tries to decompress it
15
+ # (without de-serializing). We decompress because internal web ui topics (including
16
+ # errors topic) use Ruby specific zlib compression.
22
17
  #
23
18
  # @note It is case sensitive
24
19
  # @note Ignores encoding issues
20
+ # @note Decompresses if zlib is used
25
21
  class RawPayloadIncludes < Base
26
22
  # @param message [Karafka::Messages::Message]
27
23
  # @param phrase [String]
@@ -30,11 +26,27 @@ module Karafka
30
26
  # raw payload can be nil for tombstone events
31
27
  return false unless message.raw_payload
32
28
 
33
- message.raw_payload.include?(phrase)
29
+ build_matchable_payload(message).include?(phrase)
34
30
  # String matching on compressed data may fail
35
31
  rescue Encoding::CompatibilityError
36
32
  false
37
33
  end
34
+
35
+ private
36
+
37
+ # Checks whether decompression is needed and if yes does it. Does not deserialize
38
+ # the payload itself.
39
+ # @param message [Karafka::Messages::Message]
40
+ # @return [String] decompressed payload
41
+ def build_matchable_payload(message)
42
+ raw_payload = message.raw_payload
43
+
44
+ return raw_payload unless message.raw_headers.key?('zlib')
45
+
46
+ Zlib::Inflate.inflate(raw_payload)
47
+ rescue Zlib::Error
48
+ raw_payload
49
+ end
38
50
  end
39
51
  end
40
52
  end
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -187,7 +179,7 @@ module Karafka
187
179
  @totals_stats[:matched] += 1
188
180
  end
189
181
 
190
- message.clean!
182
+ message.clean!(metadata: false)
191
183
  end
192
184
 
193
185
  @stop_reason ||= :eof
@@ -1,15 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This Karafka component is a Pro component under a commercial license.
4
- # This Karafka component is NOT licensed under LGPL.
5
- #
6
- # All of the commercial components are present in the lib/karafka/pro directory of this
7
- # repository and their usage requires commercial license agreement.
8
- #
9
- # Karafka has also commercial-friendly license, commercial support and commercial components.
10
- #
11
- # By sending a pull request to the pro components, you are agreeing to transfer the copyright of
12
- # your code to Maciej Mensfeld.
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
13
5
 
14
6
  module Karafka
15
7
  module Web
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ # Namespace for Pro routes
11
+ module Routes
12
+ # Base class for Pro UI routing components
13
+ class Base < Web::Ui::Routes::Base
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the cluster related routes
12
+ class Cluster < Base
13
+ route do |r|
14
+ r.on 'cluster' do
15
+ controller = build(Controllers::ClusterController)
16
+
17
+ r.get 'replication' do
18
+ # We use the non-pro controller here because this action is the same
19
+ controller = build(Ui::Controllers::ClusterController)
20
+ controller.replication
21
+ end
22
+
23
+ r.get String do |broker_id|
24
+ controller.show(broker_id)
25
+ end
26
+
27
+ r.get do
28
+ controller.index
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the consumers related routes
12
+ class Consumers < Base
13
+ route do |r|
14
+ r.on 'consumers' do
15
+ controller = build(Controllers::Consumers::ConsumersController)
16
+
17
+ r.get 'overview' do
18
+ controller.index
19
+ end
20
+
21
+ r.get String, 'subscriptions' do |process_id|
22
+ controller.subscriptions(process_id)
23
+ end
24
+
25
+ r.get String, 'details' do |process_id|
26
+ controller.details(process_id)
27
+ end
28
+
29
+ r.get 'performance' do
30
+ controller.performance
31
+ end
32
+
33
+ r.on String, 'partitions' do |process_id|
34
+ controller = build(Controllers::Consumers::Partitions::PausesController)
35
+
36
+ r.get(
37
+ String, String, :partition_id, 'pause', 'new'
38
+ ) do |subscription_group_id, topic, partition_id|
39
+ controller.new(process_id, subscription_group_id, topic, partition_id)
40
+ end
41
+
42
+ r.post(
43
+ String, String, :partition_id, 'pause'
44
+ ) do |subscription_group_id, topic, partition_id|
45
+ controller.create(process_id, subscription_group_id, topic, partition_id)
46
+ end
47
+
48
+ r.get(
49
+ String, String, :partition_id, 'pause', 'edit'
50
+ ) do |subscription_group_id, topic, partition_id|
51
+ controller.edit(process_id, subscription_group_id, topic, partition_id)
52
+ end
53
+
54
+ r.delete(
55
+ String, String, :partition_id, 'pause'
56
+ ) do |subscription_group_id, topic, partition_id|
57
+ controller.delete(process_id, subscription_group_id, topic, partition_id)
58
+ end
59
+
60
+ controller = build(Controllers::Consumers::Partitions::OffsetsController)
61
+
62
+ r.get(
63
+ String, String, :partition_id, 'offset', 'edit'
64
+ ) do |subscription_group_id, topic, partition_id|
65
+ controller.edit(process_id, subscription_group_id, topic, partition_id)
66
+ end
67
+
68
+ r.put(
69
+ String, String, :partition_id, 'offset'
70
+ ) do |subscription_group_id, topic, partition_id|
71
+ controller.update(process_id, subscription_group_id, topic, partition_id)
72
+ end
73
+ end
74
+
75
+ r.on String, 'jobs' do |process_id|
76
+ controller = build(Controllers::Consumers::JobsController)
77
+
78
+ r.get 'running' do
79
+ controller.running(process_id)
80
+ end
81
+
82
+ r.get 'pending' do
83
+ controller.pending(process_id)
84
+ end
85
+
86
+ r.redirect root_path("consumers/#{process_id}/jobs/running")
87
+ end
88
+
89
+ r.get 'controls' do
90
+ controller = build(Controllers::Consumers::ControlsController)
91
+
92
+ controller.index
93
+ end
94
+
95
+ r.on 'commands' do
96
+ controller = build(Controllers::Consumers::CommandsController)
97
+
98
+ r.on Integer do |offset_id|
99
+ controller.show(offset_id)
100
+ end
101
+
102
+ r.get 'recent' do
103
+ controller.recent
104
+ end
105
+
106
+ r.get do
107
+ controller.index
108
+ end
109
+ end
110
+
111
+ r.on 'commanding' do
112
+ controller = build(Controllers::Consumers::CommandingController)
113
+
114
+ r.post 'quiet_all' do
115
+ controller.quiet_all
116
+ end
117
+
118
+ r.post 'stop_all' do
119
+ controller.stop_all
120
+ end
121
+
122
+ r.on String do |process_id|
123
+ r.post 'trace' do
124
+ controller.trace(process_id)
125
+ end
126
+
127
+ r.post 'quiet' do
128
+ controller.quiet(process_id)
129
+ end
130
+
131
+ r.post 'stop' do
132
+ controller.stop(process_id)
133
+ end
134
+ end
135
+ end
136
+
137
+ r.redirect root_path('consumers/overview')
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the dashboard related routes
12
+ class Dashboard < Base
13
+ route do |r|
14
+ r.get 'dashboard' do
15
+ @breadcrumbs = false
16
+ controller = build(Controllers::DashboardController)
17
+ controller.index
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the dlq related routes
12
+ class Dlq < Base
13
+ route do |r|
14
+ r.get 'dlq' do
15
+ controller = build(Controllers::DlqController)
16
+ controller.index
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the errors related routes
12
+ class Errors < Base
13
+ route do |r|
14
+ r.on 'errors' do
15
+ controller = build(Controllers::ErrorsController)
16
+
17
+ r.get :partition_id, Integer do |partition_id, offset|
18
+ if params.current_offset != -1
19
+ r.redirect root_path('errors', partition_id, params.current_offset)
20
+ else
21
+ controller.show(partition_id, offset)
22
+ end
23
+ end
24
+
25
+ r.get :partition_id do |partition_id|
26
+ controller.partition(partition_id)
27
+ end
28
+
29
+ r.get do
30
+ controller.index
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end