karafka-web 0.10.4 → 0.11.0.beta2

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 (475) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +54 -176
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +87 -43
  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 +2 -2
  13. data/lib/karafka/web/config.rb +80 -9
  14. data/lib/karafka/web/contracts/config.rb +44 -5
  15. data/lib/karafka/web/errors.rb +10 -12
  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 +13 -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 +99 -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/{_consumer.erb → consumers/_consumer.erb} +4 -1
  134. data/lib/karafka/web/pro/ui/views/consumers/{_consumer_performance.erb → consumers/_consumer_performance.erb} +4 -1
  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/{_consumer_controls.erb → controls/_controls.erb} +10 -7
  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 +4 -1
  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/consumer.rb +7 -7
  307. data/lib/karafka/web/processing/consumers/aggregators/state.rb +14 -14
  308. data/lib/karafka/web/processing/consumers/metrics.rb +1 -1
  309. data/lib/karafka/web/processing/consumers/state.rb +1 -1
  310. data/lib/karafka/web/processing/publisher.rb +4 -4
  311. data/lib/karafka/web/tracking/consumers/contracts/partition.rb +1 -0
  312. data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +2 -2
  313. data/lib/karafka/web/tracking/consumers/listeners/transactions.rb +44 -0
  314. data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
  315. data/lib/karafka/web/tracking/consumers/sampler.rb +81 -14
  316. data/lib/karafka/web/tracking/helpers/sysconf.rb +33 -0
  317. data/lib/karafka/web/tracking/producers/reporter.rb +1 -1
  318. data/lib/karafka/web/ui/app.rb +19 -112
  319. data/lib/karafka/web/ui/base.rb +58 -3
  320. data/lib/karafka/web/ui/controllers/base_controller.rb +43 -1
  321. data/lib/karafka/web/ui/controllers/cluster_controller.rb +5 -2
  322. data/lib/karafka/web/ui/controllers/errors_controller.rb +1 -1
  323. data/lib/karafka/web/ui/controllers/requests/execution_wrapper.rb +52 -0
  324. data/lib/karafka/web/ui/controllers/requests/hookable.rb +99 -0
  325. data/lib/karafka/web/ui/controllers/requests/params.rb +39 -1
  326. data/lib/karafka/web/ui/controllers/responses/redirect.rb +0 -5
  327. data/lib/karafka/web/ui/controllers/status_controller.rb +3 -0
  328. data/lib/karafka/web/ui/helpers/application_helper.rb +10 -1
  329. data/lib/karafka/web/ui/helpers/paths_helper.rb +54 -10
  330. data/lib/karafka/web/ui/lib/admin.rb +1 -1
  331. data/lib/karafka/web/ui/lib/cache.rb +135 -0
  332. data/lib/karafka/web/ui/models/broker.rb +1 -2
  333. data/lib/karafka/web/ui/models/cluster_info.rb +15 -21
  334. data/lib/karafka/web/ui/models/consumers_metrics.rb +1 -1
  335. data/lib/karafka/web/ui/models/consumers_state.rb +1 -1
  336. data/lib/karafka/web/ui/models/counters.rb +1 -1
  337. data/lib/karafka/web/ui/models/health.rb +9 -7
  338. data/lib/karafka/web/ui/models/process.rb +16 -0
  339. data/lib/karafka/web/ui/models/processes.rb +29 -8
  340. data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +1 -1
  341. data/lib/karafka/web/ui/models/status.rb +28 -9
  342. data/lib/karafka/web/ui/models/topic.rb +1 -2
  343. data/lib/karafka/web/ui/public/javascripts/application.js +8 -98
  344. data/lib/karafka/web/ui/public/javascripts/application.min.js +12 -4
  345. data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
  346. data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
  347. data/lib/karafka/web/ui/public/javascripts/components/action_confirmation_manager.js +30 -0
  348. data/lib/karafka/web/ui/public/javascripts/components/alerts.js +39 -0
  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 +5122 -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 +507 -214
  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 +1 -1
  380. data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +2 -2
  381. data/lib/karafka/web/ui/views/consumers/_tabs.erb +4 -4
  382. data/lib/karafka/web/ui/views/consumers/index.erb +1 -1
  383. data/lib/karafka/web/ui/views/dashboard/_feature_pro.erb +1 -1
  384. data/lib/karafka/web/ui/views/dashboard/_not_enough_data.erb +2 -2
  385. data/lib/karafka/web/ui/views/dashboard/_ranges_selector.erb +1 -1
  386. data/lib/karafka/web/ui/views/dashboard/index.erb +6 -49
  387. data/lib/karafka/web/ui/views/errors/_detail.erb +3 -3
  388. data/lib/karafka/web/ui/views/errors/index.erb +1 -1
  389. data/lib/karafka/web/ui/views/jobs/_job.erb +1 -1
  390. data/lib/karafka/web/ui/views/jobs/pending.erb +1 -1
  391. data/lib/karafka/web/ui/views/jobs/running.erb +1 -1
  392. data/lib/karafka/web/ui/views/layout.erb +7 -5
  393. data/lib/karafka/web/ui/views/shared/_become_pro.erb +1 -1
  394. data/lib/karafka/web/ui/views/shared/_brand.erb +1 -1
  395. data/lib/karafka/web/ui/views/shared/_breadcrumbs.erb +1 -1
  396. data/lib/karafka/web/ui/views/shared/_content.erb +1 -1
  397. data/lib/karafka/web/ui/views/shared/_controls.erb +10 -3
  398. data/lib/karafka/web/ui/views/shared/_custom_nav.erb +9 -0
  399. data/lib/karafka/web/ui/views/shared/_flashes.erb +3 -5
  400. data/lib/karafka/web/ui/views/shared/_header.erb +25 -2
  401. data/lib/karafka/web/ui/views/shared/_navigation.erb +17 -15
  402. data/lib/karafka/web/ui/views/shared/alerts/_error.erb +8 -0
  403. data/lib/karafka/web/ui/views/shared/alerts/_info.erb +8 -0
  404. data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +8 -0
  405. data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +8 -0
  406. data/lib/karafka/web/ui/views/shared/alerts/_success.erb +8 -0
  407. data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +8 -0
  408. data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +4 -0
  409. data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +5 -1
  410. data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +4 -0
  411. data/lib/karafka/web/ui/views/shared/icons/_arrow_left.erb +3 -0
  412. data/lib/karafka/web/ui/views/shared/icons/_arrow_up_tray.erb +3 -0
  413. data/lib/karafka/web/ui/views/shared/icons/_clock.erb +3 -0
  414. data/lib/karafka/web/ui/views/shared/icons/_pencil.erb +3 -0
  415. data/lib/karafka/web/ui/views/shared/icons/_pencil_square.erb +3 -0
  416. data/lib/karafka/web/ui/views/shared/icons/_play_pause.erb +3 -0
  417. data/lib/karafka/web/ui/views/shared/icons/_plus.erb +3 -0
  418. data/lib/karafka/web/ui/views/shared/icons/_trash.erb +3 -0
  419. data/lib/karafka/web/ui/views/status/failures/_live_reporting.erb +1 -1
  420. data/lib/karafka/web/ui/views/status/failures/_partitions.erb +3 -3
  421. data/lib/karafka/web/ui/views/status/failures/_state_calculation.erb +2 -2
  422. data/lib/karafka/web/ui/views/status/info/_components.erb +6 -6
  423. data/lib/karafka/web/ui/views/status/show.erb +15 -0
  424. data/lib/karafka/web/ui/views/status/warnings/_consumers_schemas.erb +31 -0
  425. data/lib/karafka/web/ui/views/ux/_icons.erb +1 -1
  426. data/lib/karafka/web/version.rb +1 -1
  427. data/lib/karafka/web.rb +3 -0
  428. data/package-lock.json +776 -1208
  429. data/package.json +3 -4
  430. data/postcss.config.js +1 -2
  431. data/renovate.json +13 -1
  432. data/tailwind.config.js +0 -4
  433. data.tar.gz.sig +0 -0
  434. metadata +225 -106
  435. metadata.gz.sig +0 -0
  436. data/lib/karafka/web/pro/commanding/commands/quiet.rb +0 -34
  437. data/lib/karafka/web/pro/commanding/commands/stop.rb +0 -34
  438. data/lib/karafka/web/pro/commanding/commands/trace.rb +0 -41
  439. data/lib/karafka/web/pro/ui/controllers/commanding_controller.rb +0 -118
  440. data/lib/karafka/web/pro/ui/controllers/commands_controller.rb +0 -96
  441. data/lib/karafka/web/pro/ui/controllers/consumers_controller.rb +0 -138
  442. data/lib/karafka/web/pro/ui/controllers/explorer_controller.rb +0 -220
  443. data/lib/karafka/web/pro/ui/controllers/messages_controller.rb +0 -107
  444. data/lib/karafka/web/pro/ui/controllers/search_controller.rb +0 -73
  445. data/lib/karafka/web/pro/ui/controllers/topics_controller.rb +0 -130
  446. data/lib/karafka/web/pro/ui/views/commands/_breadcrumbs.erb +0 -21
  447. data/lib/karafka/web/pro/ui/views/commands/_command_details.erb +0 -1
  448. data/lib/karafka/web/pro/ui/views/commands/_empty.erb +0 -3
  449. data/lib/karafka/web/pro/ui/views/commands/show.erb +0 -33
  450. data/lib/karafka/web/pro/ui/views/consumers/_breadcrumbs.erb +0 -55
  451. data/lib/karafka/web/pro/ui/views/consumers/_tabs.erb +0 -33
  452. data/lib/karafka/web/pro/ui/views/consumers/consumer/_commands.erb +0 -72
  453. data/lib/karafka/web/pro/ui/views/consumers/consumer/_consumer_group.erb +0 -8
  454. data/lib/karafka/web/pro/ui/views/consumers/consumer/_no_subscriptions.erb +0 -7
  455. data/lib/karafka/web/pro/ui/views/consumers/details.erb +0 -13
  456. data/lib/karafka/web/pro/ui/views/consumers/subscriptions.erb +0 -25
  457. data/lib/karafka/web/pro/ui/views/explorer/_no_topics.erb +0 -1
  458. data/lib/karafka/web/pro/ui/views/explorer/_topic.erb +0 -10
  459. data/lib/karafka/web/pro/ui/views/explorer/index.erb +0 -14
  460. data/lib/karafka/web/pro/ui/views/explorer/messages/_headers.erb +0 -33
  461. data/lib/karafka/web/pro/ui/views/explorer/partition/_cleaned.erb +0 -3
  462. data/lib/karafka/web/pro/ui/views/explorer/partition/_empty.erb +0 -3
  463. data/lib/karafka/web/pro/ui/views/explorer/topic/_empty.erb +0 -3
  464. data/lib/karafka/web/pro/ui/views/search/_breadcrumbs.erb +0 -1
  465. data/lib/karafka/web/pro/ui/views/search/_fix_errors.erb +0 -3
  466. data/lib/karafka/web/pro/ui/views/search/_no_results.erb +0 -3
  467. data/lib/karafka/web/pro/ui/views/search/_timeout.erb +0 -3
  468. data/lib/karafka/web/pro/ui/views/search/index.erb +0 -29
  469. data/lib/karafka/web/pro/ui/views/topics/_breadcrumbs.erb +0 -45
  470. data/lib/karafka/web/pro/ui/views/topics/_partition_offsets.erb +0 -10
  471. data/lib/karafka/web/pro/ui/views/topics/_topic.erb +0 -9
  472. data/lib/karafka/web/pro/ui/views/topics/distribution/_empty_partitions.erb +0 -1
  473. data/lib/karafka/web/pro/ui/views/topics/distribution/_partition.erb +0 -10
  474. data/lib/karafka/web/pro/ui/views/topics/index.erb +0 -14
  475. data/lib/karafka/web/ui/lib/ttl_cache.rb +0 -82
@@ -0,0 +1,90 @@
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 topics related routes
12
+ class Topics < Base
13
+ route do |r|
14
+ r.on 'topics' do
15
+ r.on String, 'distribution' do |topic_id|
16
+ controller = build(Controllers::Topics::DistributionsController)
17
+
18
+ r.get 'edit' do
19
+ controller.edit(topic_id)
20
+ end
21
+
22
+ r.put do
23
+ controller.update(topic_id)
24
+ end
25
+
26
+ r.get do
27
+ controller.show(topic_id)
28
+ end
29
+ end
30
+
31
+ r.get String, 'replication' do |topic_id|
32
+ controller = build(Controllers::Topics::ReplicationsController)
33
+ controller.show(topic_id)
34
+ end
35
+
36
+ r.get String, 'offsets' do |topic_id|
37
+ controller = build(Controllers::Topics::OffsetsController)
38
+ controller.show(topic_id)
39
+ end
40
+
41
+ r.on String, 'config' do |topic_id|
42
+ controller = build(Controllers::Topics::ConfigsController)
43
+
44
+ r.get String, 'edit' do |property_name|
45
+ controller.edit(topic_id, property_name)
46
+ end
47
+
48
+ r.put String do |property_name|
49
+ controller.update(topic_id, property_name)
50
+ end
51
+
52
+ r.get do
53
+ controller.index(topic_id)
54
+ end
55
+ end
56
+
57
+ controller = build(Controllers::Topics::TopicsController)
58
+
59
+ r.get 'new' do
60
+ controller.new
61
+ end
62
+
63
+ r.post do
64
+ controller.create
65
+ end
66
+
67
+ # Topic removal confirmation page since it's a sensitive operation
68
+ r.get String, 'delete' do |topic_id|
69
+ controller.edit(topic_id)
70
+ end
71
+
72
+ r.delete String do |topic_id|
73
+ controller.delete(topic_id)
74
+ end
75
+
76
+ r.get do
77
+ controller.index
78
+ end
79
+
80
+ r.get String do |topic_id|
81
+ r.redirect root_path('topics', topic_id, 'config')
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ 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 UX controller routes
12
+ class Ux < Base
13
+ route do |r|
14
+ r.get 'ux' do
15
+ controller = build(Controllers::UxController)
16
+ controller.show
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <li>
2
5
  <a href="<%= root_path('cluster') %>">
3
6
  Cluster informations
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <tr>
2
5
  <td>
3
6
  <a href="<%= root_path('cluster', broker.id) %>">
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <tr>
2
5
  <td class="wrap-text">
3
6
  <% all_names = ([config.name] + config.synonyms.map(&:name)).uniq %>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <div class="tab-container-wrapper">
2
5
  <div class="tab-container">
3
6
  <a
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% view_title 'Cluster Informations' %>
2
5
 
3
6
  <%== partial 'cluster/tabs' %>
@@ -7,7 +10,7 @@
7
10
  <table class="data-table">
8
11
  <thead>
9
12
  <tr>
10
- <th><%== sort_link(:id) %></th>
13
+ <th><%== sort_link('Node ID', :id) %></th>
11
14
  <th><%== sort_link(:name) %></th>
12
15
  <th><%== sort_link(:port) %></th>
13
16
  </tr>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% view_title @broker.full_name %>
2
5
 
3
6
  <div class="data-table-wrapper">
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <h3 class="h3 mt-6">
2
5
  <%= backtrace[:label] %>
3
6
  </h3>
@@ -0,0 +1,24 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <li>
5
+ <a href="<%= consumers_path('overview') %>">
6
+ Consumers
7
+ </a>
8
+ </li>
9
+
10
+ <% if current_path.include?('/commands') %>
11
+ <li>
12
+ <a href="<%= consumers_path('commands') %>">
13
+ Commands
14
+ </a>
15
+ </li>
16
+ <% end %>
17
+
18
+ <% if @command_message %>
19
+ <li>
20
+ <a href="<%= consumers_path('commands', @command_message.offset) %>">
21
+ <%= @command_message.offset %>
22
+ </a>
23
+ </li>
24
+ <% end %>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% if command_message.is_a?(Array) %>
2
5
  <%== partial 'shared/not_a_message' %>
3
6
  <% else %>
@@ -6,7 +9,13 @@
6
9
  <% if command[:schema_version] == @schema_version %>
7
10
  <tr>
8
11
  <td>
9
- <% color = command[:type] == 'result' ? 'success' : 'primary' %>
12
+ <%
13
+ type = command[:type]
14
+ color = 'primary'
15
+ color = 'success' if type == 'result'
16
+ color = 'secondary' if type == 'acceptance'
17
+ %>
18
+
10
19
  <span class="badge badge-<%= color %>">
11
20
  <%= command[:type] %>
12
21
  </span>
@@ -14,13 +23,20 @@
14
23
 
15
24
  <td>
16
25
  <%
26
+ scope = ::Karafka::Web::Pro::Commanding::Commands
17
27
  color = case command[:command][:name]
18
- when 'trace'
28
+ when scope::Consumers::Trace.name
19
29
  'info'
20
- when 'quiet'
30
+ when scope::Consumers::Quiet.name
21
31
  'warning'
22
- when 'stop'
32
+ when scope::Consumers::Stop.name
23
33
  'error'
34
+ when scope::Partitions::Seek.name
35
+ 'primary'
36
+ when scope::Partitions::Pause.name
37
+ 'warning'
38
+ when scope::Partitions::Resume.name
39
+ 'warning'
24
40
  else
25
41
  'secondary'
26
42
  end
@@ -34,7 +50,7 @@
34
50
  <% if command[:process][:id] == '*' %>
35
51
  *
36
52
  <% else %>
37
- <a href="<%= root_path('consumers', command[:process][:id], 'subscriptions') %>">
53
+ <a href="<%= consumer_path(command[:process][:id], 'subscriptions') %>">
38
54
  <%= truncate(command[:process][:id], strategy: :middle) %>
39
55
  </a>
40
56
  <% end %>
@@ -45,7 +61,7 @@
45
61
  </td>
46
62
 
47
63
  <td>
48
- <a href="<%= root_path('commands', command_message.offset) %>" class="btn btn-sm btn-primary">
64
+ <a href="<%= consumers_path('commands', command_message.offset) %>" class="btn btn-sm btn-primary">
49
65
  Details
50
66
  </a>
51
67
  </td>
@@ -0,0 +1,4 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <pre class="code"><code class="json"><%= JSON.pretty_generate command %></code></pre>
@@ -0,0 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <%==
5
+ alert_info('No commands found.')
6
+ %>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% alert_box_error('Incompatible Command Schema') do %>
2
5
  This issue occurs when the Web UI and consumer processes use different command schemas, preventing the display of command details. It arises from version mismatches, where either the Web UI or the consumer processes are outdated. To resolve this, ensure both components use compatible versions with the same schema.
3
6
  <% end %>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <%
2
5
  process_id = command[:process][:id]
3
6
  %>
@@ -30,7 +33,7 @@
30
33
  <% if process_id == '*' %>
31
34
  <%= process_id %>
32
35
  <% else %>
33
- <a href="<%= root_path('consumers', process_id, 'subscriptions') %>">
36
+ <a href="<%= consumer_path(process_id, 'subscriptions') %>">
34
37
  <%= process_id %>
35
38
  </a>
36
39
  <% end %>
@@ -1,10 +1,13 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <div class="data-table-wrapper">
2
5
  <table class="data-table">
3
6
  <thead>
4
7
  <tr>
5
8
  <th>Type</th>
6
9
  <th>Name</th>
7
- <th>ID</th>
10
+ <th>Process ID</th>
8
11
  <th>Dispatched</th>
9
12
  <th></th>
10
13
  </tr>
@@ -14,7 +17,7 @@
14
17
  <%==
15
18
  each_partial(
16
19
  @command_messages,
17
- 'commands/command',
20
+ 'consumers/commands/command',
18
21
  local: :command_message
19
22
  )
20
23
  %>
@@ -1,12 +1,15 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% view_title 'Consumers Commands and Responses' %>
2
5
 
3
- <%== partial 'consumers/tabs' %>
6
+ <%== partial 'consumers/consumers/tabs' %>
4
7
 
5
8
  <div class="col-span-12">
6
9
  <% if @command_messages && !@command_messages.empty? %>
7
10
  <section class="actions">
8
11
  <a
9
- href="<%= root_path('commands', 'recent') %>"
12
+ href="<%= consumers_path('commands', 'recent') %>"
10
13
  class="btn-action"
11
14
  title="Display the most recent command"
12
15
  >
@@ -16,8 +19,8 @@
16
19
  <% end %>
17
20
 
18
21
  <% if @command_messages.empty? && params.current_page == 1 %>
19
- <%== partial 'commands/empty' %>
22
+ <%== partial 'consumers/commands/empty' %>
20
23
  <% else %>
21
- <%== partial 'commands/table' %>
24
+ <%== partial 'consumers/commands/table' %>
22
25
  <% end %>
23
26
  </div>
@@ -0,0 +1,32 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <% command = @command_message.payload %>
5
+
6
+ <div class="col-span-12">
7
+ <% if command[:schema_version] == @schema_version %>
8
+ <% view_title "#{command[:command][:name]} #{command[:type]} #{@command_message.key}" %>
9
+
10
+ <%== partial 'consumers/consumers/tabs' %>
11
+
12
+ <%== partial 'consumers/commands/metadata', locals: { command: command } %>
13
+
14
+ <% if command[:type] == 'result' && command[:command][:name] == 'consumers.trace' %>
15
+ <h2 class="h2">Backtraces</h2>
16
+
17
+ <% command[:result].each_value do |backtrace| %>
18
+ <%== partial 'consumers/commands/backtrace', locals: { backtrace: backtrace } %>
19
+ <% end %>
20
+ <% else %>
21
+ <h2 class="h2">Details</h2>
22
+
23
+ <%== partial 'consumers/commands/command_details', locals: { command: command } %>
24
+ <% end %>
25
+ <% else %>
26
+ <% view_title 'Incompatible Command Schema' %>
27
+
28
+ <%== partial 'consumers/consumers/tabs' %>
29
+
30
+ <%== partial 'consumers/commands/incompatible_schema' %>
31
+ <% end %>
32
+ </div>
@@ -0,0 +1,46 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <li>
5
+ <a href="<%= consumers_path('overview') %>">
6
+ Consumers
7
+ </a>
8
+ </li>
9
+
10
+ <% if current_path.include?('/overview') %>
11
+ <li>
12
+ <a href="<%= consumers_path('overview') %>">
13
+ Overview
14
+ </a>
15
+ </li>
16
+ <% end %>
17
+
18
+ <% if current_path.include?('/performance') %>
19
+ <li>
20
+ <a href="<%= consumers_path('performance') %>">
21
+ Performance
22
+ </a>
23
+ </li>
24
+ <% end %>
25
+
26
+ <% if @process %>
27
+ <li>
28
+ <a href="<%= consumer_path(@process.id, 'subscriptions') %>">
29
+ <%== truncate(@process.id, strategy: :middle) %>
30
+ </a>
31
+ </li>
32
+
33
+ <% if current_path.include?('/subscriptions') %>
34
+ <li>
35
+ <a href="<%= consumer_path(@process.id, 'subscriptions') %>">
36
+ Subscriptions
37
+ </a>
38
+ </li>
39
+ <% else %>
40
+ <li>
41
+ <a href="<%= consumer_path(@process.id, 'details') %>">
42
+ Details
43
+ </a>
44
+ </li>
45
+ <% end %>
46
+ <% end %>
@@ -1,7 +1,10 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <tr class="status-row-<%= process.status %>">
2
5
  <td>
3
6
  <p>
4
- <a href="<%= root_path('consumers', process.id, 'subscriptions') %>">
7
+ <a href="<%= consumer_path(process.id, 'subscriptions') %>">
5
8
  <%== truncate(process.id, strategy: :middle) %>
6
9
  </a>
7
10
  </p>
@@ -1,6 +1,9 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <tr class="status-row-<%= process.status %>">
2
5
  <td>
3
- <a href="<%= root_path('consumers', process.id, 'subscriptions') %>">
6
+ <a href="<%= consumer_path(process.id, 'subscriptions') %>">
4
7
  <%== truncate(process.id, strategy: :middle) %>
5
8
  </a>
6
9
 
@@ -0,0 +1,38 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="tab-container-wrapper">
5
+ <div class="tab-container">
6
+ <a
7
+ href="<%= consumers_path('overview') %>"
8
+ class="custom-tab <%= nav_class(include: 'overview') %>"
9
+ >
10
+ Overview
11
+ </a>
12
+
13
+ <a
14
+ href="<%= consumers_path('performance') %>"
15
+ class="custom-tab <%= nav_class(include: 'performance') %>"
16
+ >
17
+ Performance
18
+ </a>
19
+
20
+ <%
21
+ disabled = 'disabled btn-disabled'
22
+ disabled = '' if features.commanding?
23
+ %>
24
+ <a
25
+ href="<%= consumers_path('controls') %>"
26
+ class="custom-tab <%= nav_class(include: 'controls') %> <%= disabled %>"
27
+ >
28
+ Controls
29
+ </a>
30
+
31
+ <a
32
+ href="<%= consumers_path('commands') %>"
33
+ class="custom-tab <%= nav_class(include: 'commands') %> <%= disabled %>"
34
+ >
35
+ Commands
36
+ </a>
37
+ </div>
38
+ </div>
@@ -0,0 +1,80 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <%
5
+ commanding_class = 'btn-disabled'
6
+ commanding_class = '' if features.commanding?
7
+ trace_class = 'btn-disabled'
8
+ trace_class = '' unless process.tags.include?('embedded')
9
+ %>
10
+
11
+ <div class="col-span-12 flex justify-end space-x-2 mb-6">
12
+ <%
13
+ trace_path = consumers_path('commanding', process.id, 'trace')
14
+ disabled_class = process.status != 'stopped' ? '' : 'btn-disabled'
15
+ %>
16
+ <form
17
+ action="<%= trace_path %>"
18
+ method="post"
19
+ class="inline-flex items-center"
20
+ >
21
+ <%== csrf_tag(trace_path) %>
22
+ <button
23
+ type="submit"
24
+ class="btn btn-info btn-sm btn-lockable <%= disabled_class %> <%= commanding_class %>"
25
+ >
26
+ <%== icon(:gear) %>
27
+ Trace
28
+ </button>
29
+ </form>
30
+
31
+ <%
32
+ quiet_path = consumers_path('commanding', process.id, 'quiet')
33
+ disabled_class = process.status == 'running' ? '' : 'btn-disabled'
34
+
35
+ unless process.execution_mode == 'standalone'
36
+ disabled_class = 'btn-disabled'
37
+ title = 'Supported only in standalone consumer processes'
38
+ end
39
+ %>
40
+ <form
41
+ action="<%= quiet_path %>"
42
+ method="post"
43
+ class="inline-flex items-center"
44
+ title="<%= title %>"
45
+ >
46
+ <%== csrf_tag(quiet_path) %>
47
+ <button
48
+ type="submit"
49
+ class="btn btn-warning btn-sm btn-lockable <%= disabled_class %> <%= commanding_class %> <%= trace_class %>"
50
+ >
51
+ <%== icon(:pause) %>
52
+ Quiet
53
+ </button>
54
+ </form>
55
+
56
+ <%
57
+ stop_path = consumers_path('commanding', process.id, 'stop')
58
+ disabled_class = process.status != 'stopping' && process.status != 'stopped' ? '' : 'btn-disabled'
59
+
60
+ unless process.execution_mode == 'standalone'
61
+ disabled_class = 'btn-disabled'
62
+ title = 'Supported only in standalone consumer processes'
63
+ end
64
+ %>
65
+ <form
66
+ action="<%= stop_path %>"
67
+ method="post"
68
+ class="inline-flex items-center"
69
+ title="<%= title %>"
70
+ >
71
+ <%== csrf_tag(stop_path) %>
72
+ <button
73
+ type="submit"
74
+ class="btn btn-error btn-sm btn-lockable <%= disabled_class %> <%= commanding_class %> <%= trace_class %>"
75
+ >
76
+ <%== icon(:stop) %>
77
+ Stop
78
+ </button>
79
+ </form>
80
+ </div>
@@ -0,0 +1,11 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <%==
5
+ render_each(
6
+ consumer_group.subscription_groups,
7
+ 'consumers/consumers/consumer/_subscription_group',
8
+ local: :subscription_group,
9
+ locals: { consumer_group: consumer_group }
10
+ )
11
+ %>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <div id="metrics" class="w-full">
2
5
  <div class="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-4 gap-4 mb-6">
3
6
  <div class="card-metric">
@@ -0,0 +1,10 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="container-wrapper mb-4">
5
+ <div class="row">
6
+ <div class="col-lg-12">
7
+ <%== alert_info('This process is not subscribed to any topics.') %>
8
+ </div>
9
+ </div>
10
+ </div>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <tr class="<%= lso_risk_state_bg(partition) %>">
2
5
  <td>
3
6
  <%= partition.id %>
@@ -33,4 +36,17 @@
33
36
  <%= partition.lso_risk_state %>
34
37
  </span>
35
38
  </td>
39
+
40
+ <td>
41
+ <%== partial(
42
+ 'consumers/consumers/consumer/partition_edit_options',
43
+ locals: {
44
+ process: @process,
45
+ subscription_group_id: subscription_group.id,
46
+ topic_name: topic.name,
47
+ partition: partition
48
+ }
49
+ )
50
+ %>
51
+ </td>
36
52
  </tr>