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
@@ -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('scheduled_messages') %>">
3
6
  Scheduled Messages
@@ -6,7 +9,7 @@
6
9
 
7
10
  <% if current_path.include?('/explorer') %>
8
11
  <li>
9
- <a href="<%= root_path("scheduled_messages/explorer/#{@topic_id}") %>">
12
+ <a href="<%= root_path("scheduled_messages/explorer/topics/#{@topic_id}") %>">
10
13
  Messages
11
14
  </a>
12
15
  </li>
@@ -14,7 +17,7 @@
14
17
 
15
18
  <% if @topic_id %>
16
19
  <li>
17
- <a href="<%= root_path("scheduled_messages/explorer/#{@topic_id}") %>">
20
+ <a href="<%= root_path("scheduled_messages/explorer/topics/#{@topic_id}") %>">
18
21
  <%= @topic_id %>
19
22
  </a>
20
23
  </li>
@@ -22,7 +25,7 @@
22
25
 
23
26
  <% if @partition_id %>
24
27
  <li>
25
- <a href="<%= root_path("scheduled_messages/explorer/#{@topic_id}/#{@partition_id}") %>">
28
+ <a href="<%= root_path("scheduled_messages/explorer/topics/#{@topic_id}/#{@partition_id}") %>">
26
29
  Partition
27
30
  <%= @partition_id %>
28
31
  </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
  <% if @visibility_filter.key?(message) %>
2
5
  <% if safe_key.success? %>
3
6
  <%= safe_key.result %>
@@ -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
  <% safe_key = ::Karafka::Web::Pro::Ui::Lib::SafeRunner.new { message.key } %>
2
5
 
3
6
  <% if message.is_a?(Array) %>
@@ -113,7 +116,7 @@
113
116
  <%==
114
117
  link_button_primary_sm(
115
118
  icon(:info_circle),
116
- explorer_path(message.topic, message.partition, message.offset),
119
+ explorer_topics_path(message.topic, message.partition, message.offset),
117
120
  title: 'Display details of this message'
118
121
  )
119
122
  %>
@@ -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="data-table-wrapper">
2
5
  <table class="data-table">
3
6
  <thead>
@@ -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 "#{@topic_id} partition #{@partition_id}" %>
2
5
 
3
6
  <% @selector_path_method = :scheduled_messages_explorer_path %>
@@ -6,7 +9,7 @@
6
9
  <section class="actions">
7
10
  <% if @messages && !@messages.empty? %>
8
11
  <a
9
- href="<%= explorer_path(@topic_id, @partition_id, 'recent') %>"
12
+ href="<%= explorer_topics_path(@topic_id, @partition_id, 'recent') %>"
10
13
  class="btn-action"
11
14
  title="Display the most recent message for this partition with auto-refresh"
12
15
  >
@@ -21,36 +24,40 @@
21
24
  <%== icon(:magnifying_glass) %>
22
25
  </a>
23
26
 
24
- <% closest_path = scheduled_messages_explorer_path(@topic_id, @partition_id) %>
25
- <input
26
- type="image"
27
- src="<%= asset_path('images/calendar.svg') %>"
28
- width="45"
29
- height="32"
30
- class="btn-action p-1 opacity-60"
31
- id="offset-lookup-datepicker"
32
- value=""
33
- data-target="<%= closest_path %>"
34
- />
27
+ <% closest_path = scheduled_messages_explorer_path(@topic_id, @partition_id, 'closest') %>
28
+
29
+ <%==
30
+ partial(
31
+ 'explorer/explorer/partition/time_selector',
32
+ locals: { target: closest_path }
33
+ )
34
+ %>
35
+
36
+ <%==
37
+ partial(
38
+ 'explorer/explorer/partition/timestamp_selector',
39
+ locals: { target: closest_path }
40
+ )
41
+ %>
35
42
  <% end %>
36
43
  </section>
37
44
  </div>
38
45
 
39
46
  <div class="col-span-8 mb-3">
40
47
  <section class="actions">
41
- <%== partial 'explorer/selector' %>
48
+ <%== partial 'explorer/explorer/selector' %>
42
49
  </section>
43
50
  </div>
44
51
 
45
52
  <div class="col-span-12">
46
53
  <% if @limited %>
47
- <%== partial('explorer/topic/limited') %>
54
+ <%== partial('explorer/explorer/topic/limited') %>
48
55
  <% end %>
49
56
 
50
57
  <% if @watermark_offsets.empty? && params.current_page == 1 %>
51
- <%== partial 'explorer/partition/empty' %>
58
+ <%== partial 'explorer/explorer/partition/empty' %>
52
59
  <% elsif @watermark_offsets.cleaned? && params.current_page == 1 %>
53
- <%== partial 'explorer/partition/cleaned' %>
60
+ <%== partial 'explorer/explorer/partition/cleaned' %>
54
61
  <% elsif @messages.empty? %>
55
62
  <%== partial 'shared/no_paginated_data' %>
56
63
  <% else %>
@@ -1,18 +1,21 @@
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 @topic_id %>
2
5
 
3
6
  <% @selector_path_method = :scheduled_messages_explorer_path %>
4
7
 
5
- <%== partial 'explorer/topic/actions' %>
8
+ <%== partial 'explorer/explorer/topic/actions' %>
6
9
 
7
10
  <div class="col-span-12">
8
11
  <% if @limited %>
9
12
  <div class="mb-6">
10
- <%== partial('explorer/topic/limited') %>
13
+ <%== partial('explorer/explorer/topic/limited') %>
11
14
  </div>
12
15
  <% end %>
13
16
 
14
17
  <% if @messages.empty? && params.current_page == 1 %>
15
- <%== partial 'explorer/topic/empty' %>
18
+ <%== partial 'explorer/explorer/topic/empty' %>
16
19
  <% elsif @messages.empty? %>
17
20
  <%== partial 'shared/no_paginated_data' %>
18
21
  <% else %>
@@ -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('scheduled_messages') %>">
3
6
  Scheduled Messages
@@ -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_info 'Scheduled Messages Data Not Available' do %>
2
5
  <p class="mb-2">
3
6
  We are unable to display data related to scheduled messages. Please ensure that:
@@ -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 'Schedules' %>
2
5
 
3
6
  <div class="col-span-12">
@@ -25,7 +28,7 @@
25
28
  </a>
26
29
 
27
30
  <a
28
- href="<%= root_path("scheduled_messages/explorer/#{topic.topic_name}") %>"
31
+ href="<%= root_path("scheduled_messages/explorer/topics/#{topic.topic_name}") %>"
29
32
  class="btn btn-primary btn-sm flex-1"
30
33
  >
31
34
  Messages
@@ -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 @schedule_name %>
2
5
 
3
6
  <% @states.each do |partition, details| %>
@@ -1,11 +1,14 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <nav class="sidebar-nav">
2
5
  <%== partial 'shared/brand' %>
3
6
  <%== partial 'shared/branding/label' %>
4
7
 
5
- <ul class="menu grow">
8
+ <ul class="menu menu-md grow w-auto">
6
9
  <li>
7
10
  <a
8
- class="sidebar-nav-item <%= nav_class(start_with: '/dashboard') %>"
11
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/dashboard') %>"
9
12
  href="<%= root_path('dashboard') %>"
10
13
  >
11
14
  <%== icon(:home) %>
@@ -15,7 +18,7 @@
15
18
 
16
19
  <li>
17
20
  <a
18
- class="sidebar-nav-item <%= nav_class(match: /\A\/(consumers|commands)/) %>"
21
+ class="sidebar-nav-item menu-<%= nav_class(match: /\A\/(consumers|commands)/) %>"
19
22
  href="<%= root_path('consumers') %>"
20
23
  >
21
24
  <%== icon(:cpu) %>
@@ -25,7 +28,7 @@
25
28
 
26
29
  <li>
27
30
  <a
28
- class="sidebar-nav-item <%= nav_class(start_with: '/jobs') %>"
31
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/jobs') %>"
29
32
  href="<%= root_path('jobs/running') %>"
30
33
  >
31
34
  <%== icon(:arrow_on_squares) %>
@@ -35,7 +38,7 @@
35
38
 
36
39
  <li>
37
40
  <a
38
- class="sidebar-nav-item <%= nav_class(start_with: '/health') %>"
41
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/health') %>"
39
42
  href="<%= root_path('health/overview') %>"
40
43
  >
41
44
  <%== icon(:heart) %>
@@ -45,7 +48,7 @@
45
48
 
46
49
  <li>
47
50
  <a
48
- class="sidebar-nav-item <%= nav_class(start_with: '/routing') %>"
51
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/routing') %>"
49
52
  href="<%= root_path('routing') %>"
50
53
  >
51
54
  <%== icon(:queue_list) %>
@@ -55,8 +58,8 @@
55
58
 
56
59
  <li>
57
60
  <a
58
- class="sidebar-nav-item <%= nav_class(start_with: '/explorer') %>"
59
- href="<%= root_path('explorer') %>"
61
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/explorer') %>"
62
+ href="<%= explorer_path %>"
60
63
  >
61
64
  <%== icon(:document_glass) %>
62
65
  <span class="sidebar-nav-item-label">Explorer</span>
@@ -65,7 +68,7 @@
65
68
 
66
69
  <li>
67
70
  <a
68
- class="sidebar-nav-item <%= nav_class(start_with: '/recurring_tasks') %>"
71
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/recurring_tasks') %>"
69
72
  href="<%= root_path('recurring_tasks') %>"
70
73
  >
71
74
  <%== icon(:arrow_path_rounded) %>
@@ -75,7 +78,7 @@
75
78
 
76
79
  <li>
77
80
  <a
78
- class="sidebar-nav-item <%= nav_class(start_with: '/scheduled_messages') %>"
81
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/scheduled_messages') %>"
79
82
  href="<%= root_path('scheduled_messages') %>"
80
83
  >
81
84
  <%== icon(:calendar) %>
@@ -85,7 +88,7 @@
85
88
 
86
89
  <li>
87
90
  <a
88
- class="sidebar-nav-item <%= nav_class(start_with: '/errors') %>"
91
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/errors') %>"
89
92
  href="<%= root_path('errors') %>"
90
93
  >
91
94
  <%== icon(:bug) %>
@@ -95,7 +98,7 @@
95
98
 
96
99
  <li>
97
100
  <a
98
- class="sidebar-nav-item <%= nav_class(start_with: '/dlq') %>"
101
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/dlq') %>"
99
102
  href="<%= root_path('dlq') %>"
100
103
  >
101
104
  <%== icon(:x_circle) %>
@@ -105,7 +108,7 @@
105
108
 
106
109
  <li>
107
110
  <a
108
- class="sidebar-nav-item <%= nav_class(start_with: '/cluster') %>"
111
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/cluster') %>"
109
112
  href="<%= root_path('cluster') %>"
110
113
  >
111
114
  <%== icon(:blocks) %>
@@ -115,7 +118,7 @@
115
118
 
116
119
  <li>
117
120
  <a
118
- class="sidebar-nav-item <%= nav_class(start_with: '/topics') %>"
121
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/topics') %>"
119
122
  href="<%= root_path('topics') %>"
120
123
  >
121
124
  <%== icon(:list_bullets) %>
@@ -125,7 +128,7 @@
125
128
 
126
129
  <li>
127
130
  <a
128
- class="sidebar-nav-item <%= nav_class(start_with: '/status') %>"
131
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/status') %>"
129
132
  href="<%= root_path('status') %>"
130
133
  >
131
134
  <%== icon(:check_badge) %>
@@ -135,16 +138,21 @@
135
138
 
136
139
  <li>
137
140
  <a
138
- class="sidebar-nav-item <%= nav_class(start_with: '/support') %>"
141
+ class="sidebar-nav-item menu-<%= nav_class(start_with: '/support') %>"
139
142
  href="<%= root_path('support') %>"
140
143
  >
141
144
  <%== icon(:lifebuoy) %>
142
145
  <span class="sidebar-nav-item-label">Support</span>
143
146
  </a>
144
147
  </li>
148
+
149
+ <%== partial 'shared/custom_nav' %>
145
150
  </ul>
146
151
 
147
- <button type="button" class="btn-toggle-nav-collapsed grid gap-2 grid-flow-col items-center justify-start ml-6 text-sm invisible lg:visible" data-toggle-target="drawer-side">
152
+ <button
153
+ type="button"
154
+ class="cursor-pointer btn-toggle-nav-collapsed grid gap-2 grid-flow-col items-center justify-start ml-6 text-sm invisible lg:visible" data-toggle-target="drawer-side"
155
+ >
148
156
  <%== icon(:chevron) %>
149
157
  </button>
150
158
  </nav>
@@ -0,0 +1,16 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="mb-6">
5
+ <% alert_box_error('Please Correct the Following Errors Before Continuing') do %>
6
+ <ul class="list-disc m-5 mb-0 mt-0">
7
+ <% unless @form_error.message.to_s.empty? %>
8
+ <li><%= @form_error.message %></li>
9
+ <% end %>
10
+
11
+ <% if @form_error.respond_to?(:broker_message) && !@form_error.broker_message.to_s.empty? %>
12
+ <li><%= @form_error.broker_message %></li>
13
+ <% end %>
14
+ </ul>
15
+ <% end %>
16
+ </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
  <% branding_cfg = Karafka::Web.config.ui.branding %>
2
5
  <% if branding_cfg.label %>
3
6
  <div class="branding-label text-left mt-4 ml-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
  <% branding_cfg = Karafka::Web.config.ui.branding %>
2
5
  <% if branding_cfg.notice %>
3
6
  <div id="branding" class="col-span-12">
@@ -0,0 +1,34 @@
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="<%= topics_path %>">
6
+ Topics
7
+ </a>
8
+ </li>
9
+
10
+ <li>
11
+ <a href="<%= topics_path(@topic.topic_name, 'config') %>">
12
+ <%= @topic.topic_name %>
13
+ </a>
14
+ </li>
15
+
16
+ <li>
17
+ <a href="<%= topics_path(@topic.topic_name, 'config') %>">
18
+ Configuration
19
+ </a>
20
+ </li>
21
+
22
+ <% if action?(:edit, :update) %>
23
+ <li>
24
+ <a href="<%= topics_path(@topic.topic_name, 'config', @property.name, 'edit') %>">
25
+ <%= @property.name %>
26
+ </a>
27
+ </li>
28
+
29
+ <li>
30
+ <a href="<%= topics_path(@topic.topic_name, 'config', @property.name, 'edit') %>">
31
+ Edit
32
+ </a>
33
+ </li>
34
+ <% end %>
@@ -0,0 +1,26 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <tr>
5
+ <td class="wrap-text">
6
+ <% all_names = ([config.name] + config.synonyms.map(&:name)).uniq %>
7
+ <% all_names.each do |name| %>
8
+ <%= name %>
9
+ <br/>
10
+ <% end %>
11
+ </td>
12
+ <td class="wrap-text"><%= config.value %></td>
13
+ <td><%== config.default? ? badge_success(true) : badge_secondary(false) %></td>
14
+ <td><%== config.sensitive? ? badge_success(true) : badge_secondary(false) %></td>
15
+ <td><%== config.read_only? ? badge_success(true) : badge_secondary(false) %></td>
16
+ <td>
17
+ <% link_class = config.read_only? ? 'btn-disabled' : '' %>
18
+ <a
19
+ href="<%= topics_path(@topic.topic_name, 'config', config.name, 'edit') %>"
20
+ class="btn btn-info btn-sm <%= link_class %>"
21
+ title="Edit this property value"
22
+ >
23
+ <%== icon(:pencil_square) %>
24
+ </a>
25
+ </td>
26
+ </tr>
@@ -0,0 +1,13 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="col-span-12 flex justify-end space-x-2 mt-6">
5
+ <a
6
+ class="btn btn-error btn-sm <%= 'btn-disabled' unless features.topics_management? %>"
7
+ href="<%= topics_path(@topic.topic_name, 'delete') %>"
8
+ title="Delete this topic"
9
+ >
10
+ <%== icon(:trash) %>
11
+ Delete Topic
12
+ </a>
13
+ </div>
@@ -0,0 +1,50 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="card bg-base-100">
5
+ <div class="card-body">
6
+ <% form_path = topics_path(@topic.topic_name, 'config', @property.name) %>
7
+ <form method="post" action="<%= form_path %>" data-turbo="false">
8
+ <%== csrf_tag(form_path, 'PUT') %>
9
+ <input type="hidden" name="_method" value="put">
10
+
11
+ <div class="flex items-center w-full mb-4">
12
+ <label class="w-1/4 text-gray-700">Property:</label>
13
+ <div class="w-3/4">
14
+ <code class="bg-base-200 px-2 py-1 rounded-sm"><%= @property.name %></code>
15
+ </div>
16
+ </div>
17
+
18
+ <div class="flex items-center w-full mb-4">
19
+ <label class="w-1/4 text-gray-700">Current Value:</label>
20
+ <div class="w-3/4">
21
+ <code class="bg-base-200 px-2 py-1 rounded-sm"><%= @property.value %></code>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="flex items-center w-full mb-8">
26
+ <label class="w-1/4 text-gray-700">New Value:</label>
27
+ <div class="w-3/4">
28
+ <input
29
+ type="<%= @property.sensitive? ? 'password' : 'text' %>"
30
+ name="property_value"
31
+ class="block input input-bordered w-full"
32
+ placeholder="Enter new value for <%= @property.name %>"
33
+ value="<%= params.fetch(:property_value, @property.value) %>"
34
+ />
35
+ </div>
36
+ </div>
37
+
38
+ <div class="flex justify-end gap-4 mt-4">
39
+ <a href="<%= topics_path(@topic.topic_name, 'config') %>" class="btn btn-ghost">
40
+ Cancel
41
+ </a>
42
+
43
+ <button type="submit" class="btn btn-primary gap-2 btn-lockable">
44
+ <%== icon(:pencil_square) %>
45
+ Update Property
46
+ </button>
47
+ </div>
48
+ </form>
49
+ </div>
50
+ </div>
@@ -0,0 +1,16 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="alert">
5
+ <div class="space-y-2">
6
+ <p>Before updating this configuration:</p>
7
+ <ul class="list-disc ml-6">
8
+ <li>Ensure you understand the impact of changing this value</li>
9
+ <li>Consider testing the change in a non-production environment first</li>
10
+ <li>Monitor the topic after the change to ensure expected behavior</li>
11
+ <% if @property.sensitive? %>
12
+ <li>Keep this value secure and only share with authorized team members</li>
13
+ <% end %>
14
+ </ul>
15
+ </div>
16
+ </div>
@@ -0,0 +1,12 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <% alert_box_warning('Configuration Update Warning') do %>
5
+ <div class="space-y-4">
6
+ <ul class="list-disc ml-6">
7
+ <li>Changing topic configurations may affect topic behavior and performance</li>
8
+ <li>Some changes may take time to propagate across the cluster</li>
9
+ <li>Applications consuming from this topic may be impacted</li>
10
+ </ul>
11
+ </div>
12
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <% view_title "Topic #{@topic.topic_name} - Edit #{@property.name}" %>
5
+
6
+ <div class="space-y-4">
7
+
8
+ <%== partial('topics/configs/edit_warning') %>
9
+
10
+ <% if @form_error %>
11
+ <%== partial 'shared/rdkafka_form_error_alert_box' %>
12
+ <% else %>
13
+ <%== partial 'topics/configs/edit_plan' %>
14
+ <% end %>
15
+
16
+ <%== partial 'topics/configs/edit_form' %>
@@ -1,6 +1,9 @@
1
- <% view_title @topic.topic_name %>
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
2
3
 
3
- <%== partial 'topics/tabs' %>
4
+ <% view_title "#{@topic.topic_name} Configuraton" %>
5
+
6
+ <%== partial 'topics/topics/tabs' %>
4
7
 
5
8
  <div class="data-table-wrapper">
6
9
  <table class="data-table">
@@ -11,15 +14,18 @@
11
14
  <th><%== sort_link(:default?) %></th>
12
15
  <th><%== sort_link(:sensitive?) %></th>
13
16
  <th><%== sort_link(:read_only?) %></th>
17
+ <th>Options</th>
14
18
  </tr>
15
19
  </thead>
16
20
  <tbody>
17
21
  <%==
18
22
  each_partial(
19
23
  @configs,
20
- 'cluster/config'
24
+ 'topics/configs/config'
21
25
  )
22
26
  %>
23
27
  </tbody>
24
28
  </table>
25
29
  </div>
30
+
31
+ <%== partial 'topics/configs/delete_button' %>
@@ -0,0 +1,13 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="col-span-12 flex justify-end space-x-2 mb-6">
5
+ <a
6
+ class="btn btn-primary btn-sm <%= 'btn-disabled' unless features.topics_management? %>"
7
+ href="<%= topics_path(@topic.topic_name, 'distribution', 'edit') %>"
8
+ title="Add more partitions to this topic"
9
+ >
10
+ <%== icon(:plus) %>
11
+ Increase Partitions
12
+ </a>
13
+ </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
  <p class="text-end mb-5">
2
5
  <%==
3
6
  value = number_with_delimiter @aggregated.sum.round, ' '
@@ -0,0 +1,28 @@
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="<%= topics_path %>">
6
+ Topics
7
+ </a>
8
+ </li>
9
+
10
+ <li>
11
+ <a href="<%= topics_path(@topic.topic_name, 'config') %>">
12
+ <%= @topic.topic_name %>
13
+ </a>
14
+ </li>
15
+
16
+ <li>
17
+ <a href="<%= topics_path(@topic.topic_name, 'distribution') %>">
18
+ Distribution
19
+ </a>
20
+ </li>
21
+
22
+ <% if action?(:edit, :update) %>
23
+ <li>
24
+ <a href="<%= topics_path(@topic.topic_name, 'distribution', 'edit') %>">
25
+ Increasing Number of Partitions
26
+ </a>
27
+ </li>
28
+ <% 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
  <% data = { 'Estimated count': @distribution.map { [_1.partition_id, _1.count] } }.to_json %>
2
5
  <div class="mb-5">
3
6
  <%== partial 'shared/charts/bar', locals: { data: data, id: 'distribution' } %>