karafka-web 0.10.4 → 0.11.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) 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 -0
  16. data/lib/karafka/web/management/actions/create_initial_states.rb +6 -6
  17. data/lib/karafka/web/management/actions/create_topics.rb +30 -64
  18. data/lib/karafka/web/management/actions/delete_topics.rb +5 -5
  19. data/lib/karafka/web/management/actions/enable.rb +5 -5
  20. data/lib/karafka/web/pro/commanding/commands/base.rb +37 -13
  21. data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +33 -0
  22. data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +32 -0
  23. data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +37 -0
  24. data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +30 -0
  25. data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +30 -0
  26. data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +30 -0
  27. data/lib/karafka/web/pro/commanding/config.rb +6 -10
  28. data/lib/karafka/web/pro/commanding/contracts/config.rb +2 -10
  29. data/lib/karafka/web/pro/commanding/dispatcher.rb +45 -24
  30. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +67 -0
  31. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +44 -0
  32. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +29 -0
  33. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +86 -0
  34. data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +56 -0
  35. data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +55 -0
  36. data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +62 -0
  37. data/lib/karafka/web/pro/commanding/listener.rb +4 -12
  38. data/lib/karafka/web/pro/commanding/manager.rb +36 -24
  39. data/lib/karafka/web/pro/commanding/matcher.rb +7 -17
  40. data/lib/karafka/web/pro/commanding/request.rb +39 -0
  41. data/lib/karafka/web/pro/commanding.rb +2 -10
  42. data/lib/karafka/web/pro/loader.rb +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 +101 -0
  50. data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +36 -0
  51. data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +57 -0
  52. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +86 -0
  53. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +75 -0
  54. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +110 -0
  55. data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +2 -10
  56. data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +2 -10
  57. data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +3 -11
  58. data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +21 -0
  59. data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +215 -0
  60. data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +145 -0
  61. data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +68 -0
  62. data/lib/karafka/web/pro/ui/controllers/health_controller.rb +2 -10
  63. data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +2 -10
  64. data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +12 -13
  65. data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +2 -10
  66. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +2 -10
  67. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +8 -16
  68. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +9 -15
  69. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +2 -10
  70. data/lib/karafka/web/pro/ui/controllers/status_controller.rb +2 -10
  71. data/lib/karafka/web/pro/ui/controllers/support_controller.rb +2 -10
  72. data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +21 -0
  73. data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +86 -0
  74. data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +91 -0
  75. data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +55 -0
  76. data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +37 -0
  77. data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +101 -0
  78. data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +2 -10
  79. data/lib/karafka/web/pro/ui/lib/branding/config.rb +2 -10
  80. data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +2 -10
  81. data/lib/karafka/web/pro/ui/lib/branding.rb +2 -10
  82. data/lib/karafka/web/pro/ui/lib/features.rb +53 -0
  83. data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +2 -10
  84. data/lib/karafka/web/pro/ui/lib/policies/config.rb +2 -10
  85. data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +2 -10
  86. data/lib/karafka/web/pro/ui/lib/policies/messages.rb +2 -10
  87. data/lib/karafka/web/pro/ui/lib/policies/requests.rb +2 -10
  88. data/lib/karafka/web/pro/ui/lib/policies.rb +2 -10
  89. data/lib/karafka/web/pro/ui/lib/safe_runner.rb +5 -0
  90. data/lib/karafka/web/pro/ui/lib/search/config.rb +2 -10
  91. data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +2 -10
  92. data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +2 -10
  93. data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +2 -10
  94. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +10 -11
  95. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +2 -10
  96. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +23 -11
  97. data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +2 -10
  98. data/lib/karafka/web/pro/ui/lib/search/runner.rb +3 -11
  99. data/lib/karafka/web/pro/ui/lib/search.rb +2 -10
  100. data/lib/karafka/web/pro/ui/routes/base.rb +19 -0
  101. data/lib/karafka/web/pro/ui/routes/cluster.rb +37 -0
  102. data/lib/karafka/web/pro/ui/routes/consumers.rb +145 -0
  103. data/lib/karafka/web/pro/ui/routes/dashboard.rb +25 -0
  104. data/lib/karafka/web/pro/ui/routes/dlq.rb +24 -0
  105. data/lib/karafka/web/pro/ui/routes/errors.rb +39 -0
  106. data/lib/karafka/web/pro/ui/routes/explorer.rb +118 -0
  107. data/lib/karafka/web/pro/ui/routes/health.rb +47 -0
  108. data/lib/karafka/web/pro/ui/routes/jobs.rb +33 -0
  109. data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +59 -0
  110. data/lib/karafka/web/pro/ui/routes/routing.rb +31 -0
  111. data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +75 -0
  112. data/lib/karafka/web/pro/ui/routes/status.rb +24 -0
  113. data/lib/karafka/web/pro/ui/routes/support.rb +24 -0
  114. data/lib/karafka/web/pro/ui/routes/topics.rb +90 -0
  115. data/lib/karafka/web/pro/ui/routes/ux.rb +24 -0
  116. data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +3 -0
  117. data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +3 -0
  118. data/lib/karafka/web/pro/ui/views/cluster/_config.erb +3 -0
  119. data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +3 -0
  120. data/lib/karafka/web/pro/ui/views/cluster/index.erb +4 -1
  121. data/lib/karafka/web/pro/ui/views/cluster/show.erb +3 -0
  122. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_backtrace.erb +3 -0
  123. data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +24 -0
  124. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_command.erb +22 -6
  125. data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +4 -0
  126. data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +6 -0
  127. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_incompatible_schema.erb +3 -0
  128. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_metadata.erb +4 -1
  129. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_table.erb +5 -2
  130. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/index.erb +7 -4
  131. data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +32 -0
  132. data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +46 -0
  133. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +59 -0
  134. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +71 -0
  135. data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +38 -0
  136. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +80 -0
  137. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +11 -0
  138. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_metrics.erb +3 -0
  139. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +10 -0
  140. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_partition.erb +16 -0
  141. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +33 -0
  142. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_stopped.erb +3 -0
  143. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_subscription_group.erb +7 -3
  144. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_tabs.erb +7 -4
  145. data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +15 -0
  146. data/lib/karafka/web/pro/ui/views/consumers/{index.erb → consumers/index.erb} +6 -3
  147. data/lib/karafka/web/pro/ui/views/consumers/{performance.erb → consumers/performance.erb} +6 -3
  148. data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +24 -0
  149. data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +16 -0
  150. data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +107 -0
  151. data/lib/karafka/web/pro/ui/views/consumers/{controls.erb → controls/index.erb} +8 -5
  152. data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +36 -0
  153. data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_job.erb +3 -0
  154. data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_no_jobs.erb +3 -0
  155. data/lib/karafka/web/pro/ui/views/consumers/{pending_jobs.erb → jobs/pending.erb} +7 -8
  156. data/lib/karafka/web/pro/ui/views/consumers/{running_jobs.erb → jobs/running.erb} +7 -8
  157. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +77 -0
  158. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +58 -0
  159. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +109 -0
  160. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +16 -0
  161. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +15 -0
  162. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +12 -0
  163. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +22 -0
  164. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +27 -0
  165. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +60 -0
  166. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +59 -0
  167. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +24 -0
  168. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +78 -0
  169. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +16 -0
  170. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +20 -0
  171. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +16 -0
  172. data/lib/karafka/web/pro/ui/views/dashboard/index.erb +4 -1
  173. data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +3 -0
  174. data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +3 -0
  175. data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +4 -1
  176. data/lib/karafka/web/pro/ui/views/dlq/index.erb +3 -0
  177. data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +3 -0
  178. data/lib/karafka/web/pro/ui/views/errors/_error.erb +3 -0
  179. data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +3 -0
  180. data/lib/karafka/web/pro/ui/views/errors/_selector.erb +3 -0
  181. data/lib/karafka/web/pro/ui/views/errors/_table.erb +4 -1
  182. data/lib/karafka/web/pro/ui/views/errors/index.erb +6 -3
  183. data/lib/karafka/web/pro/ui/views/errors/partition.erb +5 -2
  184. data/lib/karafka/web/pro/ui/views/errors/show.erb +3 -0
  185. data/lib/karafka/web/pro/ui/views/explorer/{_breadcrumbs.erb → explorer/_breadcrumbs.erb} +7 -4
  186. data/lib/karafka/web/pro/ui/views/explorer/{_failed_deserialization.erb → explorer/_failed_deserialization.erb} +3 -0
  187. data/lib/karafka/web/pro/ui/views/explorer/{_filtered.erb → explorer/_filtered.erb} +3 -0
  188. data/lib/karafka/web/pro/ui/views/explorer/{_message.erb → explorer/_message.erb} +4 -1
  189. data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +4 -0
  190. data/lib/karafka/web/pro/ui/views/explorer/{_partition_option.erb → explorer/_partition_option.erb} +4 -1
  191. data/lib/karafka/web/pro/ui/views/explorer/{_selector.erb → explorer/_selector.erb} +4 -1
  192. data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +13 -0
  193. data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +17 -0
  194. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_metadata.erb +10 -7
  195. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_payload.erb +6 -3
  196. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_resources_utilization.erb +7 -4
  197. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_too_big_to_be_displayed.erb +3 -0
  198. data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_detail.erb +3 -0
  199. data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +51 -0
  200. data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_key.erb +3 -0
  201. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_cleaned.erb +6 -0
  202. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_empty.erb +6 -0
  203. data/lib/karafka/web/pro/ui/views/explorer/{partition → explorer/partition}/_messages.erb +4 -1
  204. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +16 -0
  205. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +33 -0
  206. data/lib/karafka/web/pro/ui/views/explorer/{partition.erb → explorer/partition.erb} +24 -17
  207. data/lib/karafka/web/pro/ui/views/explorer/{show.erb → explorer/show.erb} +17 -19
  208. data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_actions.erb +5 -2
  209. data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +6 -0
  210. data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_limited.erb +3 -0
  211. data/lib/karafka/web/pro/ui/views/explorer/{topic.erb → explorer/topic.erb} +7 -4
  212. data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +32 -0
  213. data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +143 -0
  214. data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +4 -0
  215. data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +6 -0
  216. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_metadata.erb +3 -0
  217. data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +6 -0
  218. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_no_search_criteria.erb +3 -0
  219. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_criteria.erb +3 -0
  220. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_modal.erb +5 -2
  221. data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +6 -0
  222. data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +32 -0
  223. data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +3 -0
  224. data/lib/karafka/web/pro/ui/views/health/_no_data.erb +3 -0
  225. data/lib/karafka/web/pro/ui/views/health/_partition.erb +16 -1
  226. data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +3 -0
  227. data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +3 -0
  228. data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +3 -0
  229. data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +4 -1
  230. data/lib/karafka/web/pro/ui/views/health/_tabs.erb +3 -0
  231. data/lib/karafka/web/pro/ui/views/health/changes.erb +4 -1
  232. data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +3 -0
  233. data/lib/karafka/web/pro/ui/views/health/lags.erb +5 -2
  234. data/lib/karafka/web/pro/ui/views/health/offsets.erb +4 -1
  235. data/lib/karafka/web/pro/ui/views/health/overview.erb +8 -3
  236. data/lib/karafka/web/pro/ui/views/jobs/_job.erb +50 -38
  237. data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +3 -0
  238. data/lib/karafka/web/pro/ui/views/jobs/pending.erb +4 -1
  239. data/lib/karafka/web/pro/ui/views/jobs/running.erb +4 -1
  240. data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +3 -0
  241. data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +3 -0
  242. data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +3 -0
  243. data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +3 -0
  244. data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +3 -0
  245. data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +3 -0
  246. data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +3 -0
  247. data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +3 -0
  248. data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +3 -0
  249. data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +3 -0
  250. data/lib/karafka/web/pro/ui/views/routing/_detail.erb +3 -0
  251. data/lib/karafka/web/pro/ui/views/routing/_topic.erb +3 -0
  252. data/lib/karafka/web/pro/ui/views/routing/index.erb +3 -0
  253. data/lib/karafka/web/pro/ui/views/routing/show.erb +3 -0
  254. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +6 -3
  255. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +3 -0
  256. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +4 -1
  257. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +3 -0
  258. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +23 -16
  259. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +6 -3
  260. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +3 -0
  261. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +3 -0
  262. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +4 -1
  263. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +3 -0
  264. data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +25 -17
  265. data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +16 -0
  266. data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +3 -0
  267. data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +3 -0
  268. data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +34 -0
  269. data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +26 -0
  270. data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +13 -0
  271. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +50 -0
  272. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +16 -0
  273. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +12 -0
  274. data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +16 -0
  275. data/lib/karafka/web/pro/ui/views/topics/{config.erb → configs/index.erb} +9 -3
  276. data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +13 -0
  277. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_badges.erb +3 -0
  278. data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +28 -0
  279. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_chart.erb +3 -0
  280. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +47 -0
  281. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +15 -0
  282. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +14 -0
  283. data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +4 -0
  284. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_limited.erb +3 -0
  285. data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +13 -0
  286. data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +16 -0
  287. data/lib/karafka/web/pro/ui/views/topics/{distribution.erb → distributions/show.erb} +11 -7
  288. data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +20 -0
  289. data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +13 -0
  290. data/lib/karafka/web/pro/ui/views/topics/{offsets.erb → offsets/show.erb} +6 -3
  291. data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +20 -0
  292. data/lib/karafka/web/pro/ui/views/topics/{_partition.erb → replications/_partition.erb} +4 -1
  293. data/lib/karafka/web/pro/ui/views/topics/{replication.erb → replications/show.erb} +6 -3
  294. data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +32 -0
  295. data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +13 -0
  296. data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +15 -0
  297. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +36 -0
  298. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +15 -0
  299. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +13 -0
  300. data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +80 -0
  301. data/lib/karafka/web/pro/ui/views/topics/{_tabs.erb → topics/_tabs.erb} +7 -4
  302. data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +12 -0
  303. data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +10 -0
  304. data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +19 -0
  305. data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +12 -0
  306. data/lib/karafka/web/processing/consumers/metrics.rb +1 -1
  307. data/lib/karafka/web/processing/consumers/state.rb +1 -1
  308. data/lib/karafka/web/processing/publisher.rb +4 -4
  309. data/lib/karafka/web/tracking/consumers/contracts/partition.rb +1 -0
  310. data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +2 -2
  311. data/lib/karafka/web/tracking/consumers/listeners/transactions.rb +44 -0
  312. data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
  313. data/lib/karafka/web/tracking/consumers/sampler.rb +81 -14
  314. data/lib/karafka/web/tracking/helpers/sysconf.rb +33 -0
  315. data/lib/karafka/web/tracking/producers/reporter.rb +1 -1
  316. data/lib/karafka/web/ui/app.rb +19 -112
  317. data/lib/karafka/web/ui/base.rb +63 -4
  318. data/lib/karafka/web/ui/controllers/base_controller.rb +43 -1
  319. data/lib/karafka/web/ui/controllers/cluster_controller.rb +5 -2
  320. data/lib/karafka/web/ui/controllers/errors_controller.rb +1 -1
  321. data/lib/karafka/web/ui/controllers/requests/execution_wrapper.rb +52 -0
  322. data/lib/karafka/web/ui/controllers/requests/hookable.rb +99 -0
  323. data/lib/karafka/web/ui/controllers/requests/params.rb +39 -1
  324. data/lib/karafka/web/ui/controllers/responses/redirect.rb +0 -5
  325. data/lib/karafka/web/ui/controllers/status_controller.rb +3 -0
  326. data/lib/karafka/web/ui/helpers/application_helper.rb +10 -1
  327. data/lib/karafka/web/ui/helpers/paths_helper.rb +54 -10
  328. data/lib/karafka/web/ui/lib/admin.rb +1 -1
  329. data/lib/karafka/web/ui/lib/cache.rb +135 -0
  330. data/lib/karafka/web/ui/models/broker.rb +1 -2
  331. data/lib/karafka/web/ui/models/cluster_info.rb +15 -21
  332. data/lib/karafka/web/ui/models/consumers_metrics.rb +1 -1
  333. data/lib/karafka/web/ui/models/consumers_state.rb +1 -1
  334. data/lib/karafka/web/ui/models/counters.rb +1 -1
  335. data/lib/karafka/web/ui/models/health.rb +9 -7
  336. data/lib/karafka/web/ui/models/process.rb +14 -0
  337. data/lib/karafka/web/ui/models/processes.rb +2 -2
  338. data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +1 -1
  339. data/lib/karafka/web/ui/models/status.rb +27 -8
  340. data/lib/karafka/web/ui/models/topic.rb +1 -2
  341. data/lib/karafka/web/ui/public/javascripts/application.js +8 -98
  342. data/lib/karafka/web/ui/public/javascripts/application.min.js +12 -4
  343. data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
  344. data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
  345. data/lib/karafka/web/ui/public/javascripts/components/action_confirmation_manager.js +30 -0
  346. data/lib/karafka/web/ui/public/javascripts/components/alerts.js +39 -0
  347. data/lib/karafka/web/ui/public/javascripts/components/button_lock_manager.js +50 -0
  348. data/lib/karafka/web/ui/public/javascripts/components/live_poll.js +71 -19
  349. data/lib/karafka/web/ui/public/javascripts/components/message_republish_manager.js +50 -0
  350. data/lib/karafka/web/ui/public/javascripts/components/page_title_tracker.js +21 -0
  351. data/lib/karafka/web/ui/public/javascripts/components/partition_redirect_manager.js +21 -0
  352. data/lib/karafka/web/ui/public/javascripts/components/time_ago_manager.js +25 -0
  353. data/lib/karafka/web/ui/public/javascripts/components/timestamp_selector.js +30 -0
  354. data/lib/karafka/web/ui/public/javascripts/libs/datepicker.js +2 -2
  355. data/lib/karafka/web/ui/public/stylesheets/application.css +30 -0
  356. data/lib/karafka/web/ui/public/stylesheets/application.min.css +5122 -13
  357. data/lib/karafka/web/ui/public/stylesheets/application.min.css.br +0 -0
  358. data/lib/karafka/web/ui/public/stylesheets/application.min.css.gz +0 -0
  359. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.gz +0 -0
  360. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.gz +0 -0
  361. data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +512 -213
  362. data/lib/karafka/web/ui/routes/assets.rb +53 -0
  363. data/lib/karafka/web/ui/routes/base.rb +36 -0
  364. data/lib/karafka/web/ui/routes/cluster.rb +28 -0
  365. data/lib/karafka/web/ui/routes/consumers.rb +35 -0
  366. data/lib/karafka/web/ui/routes/dashboard.rb +20 -0
  367. data/lib/karafka/web/ui/routes/errors.rb +26 -0
  368. data/lib/karafka/web/ui/routes/jobs.rb +28 -0
  369. data/lib/karafka/web/ui/routes/pro_only.rb +27 -0
  370. data/lib/karafka/web/ui/routes/routing.rb +26 -0
  371. data/lib/karafka/web/ui/routes/status.rb +19 -0
  372. data/lib/karafka/web/ui/routes/support.rb +19 -0
  373. data/lib/karafka/web/ui/routes/ux.rb +19 -0
  374. data/lib/karafka/web/ui/views/cluster/_partition.erb +2 -2
  375. data/lib/karafka/web/ui/views/cluster/brokers.erb +1 -1
  376. data/lib/karafka/web/ui/views/consumers/_breadcrumbs.erb +7 -1
  377. data/lib/karafka/web/ui/views/consumers/_consumer.erb +39 -30
  378. data/lib/karafka/web/ui/views/consumers/_incompatible.erb +13 -0
  379. data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +2 -2
  380. data/lib/karafka/web/ui/views/consumers/_tabs.erb +4 -4
  381. data/lib/karafka/web/ui/views/consumers/index.erb +1 -1
  382. data/lib/karafka/web/ui/views/dashboard/_feature_pro.erb +1 -1
  383. data/lib/karafka/web/ui/views/dashboard/_not_enough_data.erb +2 -2
  384. data/lib/karafka/web/ui/views/dashboard/_ranges_selector.erb +1 -1
  385. data/lib/karafka/web/ui/views/dashboard/index.erb +6 -49
  386. data/lib/karafka/web/ui/views/errors/_detail.erb +3 -3
  387. data/lib/karafka/web/ui/views/errors/index.erb +1 -1
  388. data/lib/karafka/web/ui/views/jobs/_job.erb +38 -29
  389. data/lib/karafka/web/ui/views/jobs/pending.erb +1 -1
  390. data/lib/karafka/web/ui/views/jobs/running.erb +1 -1
  391. data/lib/karafka/web/ui/views/layout.erb +7 -5
  392. data/lib/karafka/web/ui/views/shared/_become_pro.erb +1 -1
  393. data/lib/karafka/web/ui/views/shared/_brand.erb +1 -1
  394. data/lib/karafka/web/ui/views/shared/_breadcrumbs.erb +1 -1
  395. data/lib/karafka/web/ui/views/shared/_content.erb +1 -1
  396. data/lib/karafka/web/ui/views/shared/_controls.erb +10 -3
  397. data/lib/karafka/web/ui/views/shared/_custom_nav.erb +9 -0
  398. data/lib/karafka/web/ui/views/shared/_flashes.erb +3 -5
  399. data/lib/karafka/web/ui/views/shared/_header.erb +25 -2
  400. data/lib/karafka/web/ui/views/shared/_navigation.erb +17 -15
  401. data/lib/karafka/web/ui/views/shared/alerts/_error.erb +8 -0
  402. data/lib/karafka/web/ui/views/shared/alerts/_info.erb +8 -0
  403. data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +8 -0
  404. data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +8 -0
  405. data/lib/karafka/web/ui/views/shared/alerts/_success.erb +8 -0
  406. data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +8 -0
  407. data/lib/karafka/web/ui/views/shared/exceptions/incompatible_schema.erb +34 -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/ui/views/ux/_status_rows.erb +6 -0
  427. data/lib/karafka/web/version.rb +1 -1
  428. data/lib/karafka/web.rb +3 -0
  429. data/package-lock.json +776 -1208
  430. data/package.json +3 -4
  431. data/postcss.config.js +1 -2
  432. data/renovate.json +13 -1
  433. data/tailwind.config.js +0 -4
  434. data.tar.gz.sig +0 -0
  435. metadata +232 -108
  436. metadata.gz.sig +0 -0
  437. data/lib/karafka/web/pro/commanding/commands/quiet.rb +0 -34
  438. data/lib/karafka/web/pro/commanding/commands/stop.rb +0 -34
  439. data/lib/karafka/web/pro/commanding/commands/trace.rb +0 -41
  440. data/lib/karafka/web/pro/ui/controllers/commanding_controller.rb +0 -118
  441. data/lib/karafka/web/pro/ui/controllers/commands_controller.rb +0 -96
  442. data/lib/karafka/web/pro/ui/controllers/consumers_controller.rb +0 -138
  443. data/lib/karafka/web/pro/ui/controllers/explorer_controller.rb +0 -220
  444. data/lib/karafka/web/pro/ui/controllers/messages_controller.rb +0 -107
  445. data/lib/karafka/web/pro/ui/controllers/search_controller.rb +0 -73
  446. data/lib/karafka/web/pro/ui/controllers/topics_controller.rb +0 -130
  447. data/lib/karafka/web/pro/ui/views/commands/_breadcrumbs.erb +0 -21
  448. data/lib/karafka/web/pro/ui/views/commands/_command_details.erb +0 -1
  449. data/lib/karafka/web/pro/ui/views/commands/_empty.erb +0 -3
  450. data/lib/karafka/web/pro/ui/views/commands/show.erb +0 -33
  451. data/lib/karafka/web/pro/ui/views/consumers/_breadcrumbs.erb +0 -55
  452. data/lib/karafka/web/pro/ui/views/consumers/_consumer.erb +0 -47
  453. data/lib/karafka/web/pro/ui/views/consumers/_consumer_controls.erb +0 -95
  454. data/lib/karafka/web/pro/ui/views/consumers/_consumer_performance.erb +0 -59
  455. data/lib/karafka/web/pro/ui/views/consumers/_tabs.erb +0 -33
  456. data/lib/karafka/web/pro/ui/views/consumers/consumer/_commands.erb +0 -72
  457. data/lib/karafka/web/pro/ui/views/consumers/consumer/_consumer_group.erb +0 -8
  458. data/lib/karafka/web/pro/ui/views/consumers/consumer/_no_subscriptions.erb +0 -7
  459. data/lib/karafka/web/pro/ui/views/consumers/details.erb +0 -13
  460. data/lib/karafka/web/pro/ui/views/consumers/subscriptions.erb +0 -25
  461. data/lib/karafka/web/pro/ui/views/explorer/_no_topics.erb +0 -1
  462. data/lib/karafka/web/pro/ui/views/explorer/_topic.erb +0 -10
  463. data/lib/karafka/web/pro/ui/views/explorer/index.erb +0 -14
  464. data/lib/karafka/web/pro/ui/views/explorer/messages/_headers.erb +0 -33
  465. data/lib/karafka/web/pro/ui/views/explorer/partition/_cleaned.erb +0 -3
  466. data/lib/karafka/web/pro/ui/views/explorer/partition/_empty.erb +0 -3
  467. data/lib/karafka/web/pro/ui/views/explorer/topic/_empty.erb +0 -3
  468. data/lib/karafka/web/pro/ui/views/search/_breadcrumbs.erb +0 -1
  469. data/lib/karafka/web/pro/ui/views/search/_fix_errors.erb +0 -3
  470. data/lib/karafka/web/pro/ui/views/search/_no_results.erb +0 -3
  471. data/lib/karafka/web/pro/ui/views/search/_timeout.erb +0 -3
  472. data/lib/karafka/web/pro/ui/views/search/index.erb +0 -29
  473. data/lib/karafka/web/pro/ui/views/topics/_breadcrumbs.erb +0 -45
  474. data/lib/karafka/web/pro/ui/views/topics/_partition_offsets.erb +0 -10
  475. data/lib/karafka/web/pro/ui/views/topics/_topic.erb +0 -9
  476. data/lib/karafka/web/pro/ui/views/topics/distribution/_empty_partitions.erb +0 -1
  477. data/lib/karafka/web/pro/ui/views/topics/distribution/_partition.erb +0 -10
  478. data/lib/karafka/web/pro/ui/views/topics/index.erb +0 -14
  479. data/lib/karafka/web/ui/lib/ttl_cache.rb +0 -82
@@ -0,0 +1,77 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <div class="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-4 gap-4 mb-6 mt-6">
5
+ <div class="card-metric">
6
+ <h3>Basic Info</h3>
7
+ <ul>
8
+ <li>
9
+ Process ID:
10
+ <%== badge_primary @process.id %>
11
+ </li>
12
+ <li>
13
+ Topic:
14
+ <%== badge_info @topic %>
15
+ </li>
16
+ <li>
17
+ Partition:
18
+ <%== badge_info @partition_id %>
19
+ </li>
20
+ </ul>
21
+ </div>
22
+
23
+ <div class="card-metric">
24
+ <h3>Consumer Details</h3>
25
+ <ul>
26
+ <li>
27
+ Consumer Group:
28
+ <%== badge_secondary @consumer_group.id %>
29
+ </li>
30
+ <li>
31
+ Subscription Group:
32
+ <%== badge_secondary @subscription_group.id %>
33
+ </li>
34
+ <li>
35
+ Poll State:
36
+ <%== poll_state_with_change_time_label(@partition_stats.poll_state, @partition_stats.poll_state_ch) %>
37
+ </li>
38
+ </ul>
39
+ </div>
40
+
41
+ <div class="card-metric">
42
+ <h3>Current Position</h3>
43
+ <ul>
44
+ <li>
45
+ Committed Offset:
46
+ <%== badge_secondary(normalized_metric(@partition_stats.committed_offset)) %>
47
+ </li>
48
+ <li>
49
+ Stored Offset:
50
+ <%== badge_secondary(normalized_metric(@partition_stats.stored_offset)) %>
51
+ </li>
52
+ <li>
53
+ Lag:
54
+
55
+ <%== badge_secondary(normalized_metric(@partition_stats.lag_hybrid)) %>
56
+ </li>
57
+ </ul>
58
+ </div>
59
+
60
+ <div class="card-metric">
61
+ <h3>Partition Details</h3>
62
+ <ul>
63
+ <li>
64
+ High Offset:
65
+ <%== badge_info(normalized_metric(@partition_stats.hi_offset)) %>
66
+ </li>
67
+ <li>
68
+ Low Offset:
69
+ <%== badge_info(normalized_metric(@partition_stats.lo_offset)) %>
70
+ </li>
71
+ <li>
72
+ EOF Offset:
73
+ <%== badge_info(normalized_metric(@partition_stats.eof_offset)) %>
74
+ </li>
75
+ </ul>
76
+ </div>
77
+ </div>
@@ -0,0 +1,58 @@
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
+ <li>
11
+ <a href="<%= consumer_path(@process.id, 'subscriptions') %>">
12
+ <%== truncate(@process.id, strategy: :middle) %>
13
+ </a>
14
+ </li>
15
+
16
+ <% if @subscription_group_id %>
17
+ <li>
18
+ <a href="<%= consumer_path(@process.id, "subscriptions##{@subscription_group_id}") %>">
19
+ <%= @subscription_group_id %>
20
+ </a>
21
+ </li>
22
+
23
+ <%
24
+ edit_path = consumer_path(
25
+ @process.id,
26
+ 'partitions',
27
+ @subscription_group_id,
28
+ @topic,
29
+ @partition_id,
30
+ 'offset',
31
+ 'edit'
32
+ )
33
+ %>
34
+
35
+ <li>
36
+ <a href="<%= edit_path %>">
37
+ <%= @topic %>
38
+ </a>
39
+ </li>
40
+
41
+ <li>
42
+ <a href="<%= edit_path %>">
43
+ <%= @partition_id %>
44
+ </a>
45
+ </li>
46
+
47
+ <li>
48
+ <a href="<%= edit_path %>">
49
+ Offsets
50
+ </a>
51
+ </li>
52
+
53
+ <li>
54
+ <a href="<%= edit_path %>">
55
+ Edit
56
+ </a>
57
+ </li>
58
+ <% end %>
@@ -0,0 +1,109 @@
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 mt-4">
5
+ <div class="card-body">
6
+ <%
7
+ update_path = consumer_path(
8
+ @process.id,
9
+ 'partitions',
10
+ @subscription_group.id,
11
+ @topic,
12
+ @partition_id,
13
+ 'offset'
14
+ )
15
+ %>
16
+
17
+ <form
18
+ class="space-y-4 mt-4 w-full"
19
+ method="post"
20
+ action="<%= update_path %>"
21
+ >
22
+ <%== csrf_tag(update_path, 'PUT') %>
23
+ <input type="hidden" name="_method" value="PUT">
24
+ <input type="hidden" name="referrer" value="<%= request.referrer %>">
25
+
26
+ <div class="flex items-center w-full mb-8">
27
+ <label class="w-1/4 text-gray-700">New Offset:</label>
28
+ <div class="w-3/4">
29
+ <input
30
+ type="number"
31
+ min="<%== @partition_stats.lo_offset %>"
32
+ max="<%= @partition_stats.hi_offset %>"
33
+ name="offset"
34
+ class="block input input-bordered w-full"
35
+ placeholder="Enter new offset position"
36
+ required
37
+ />
38
+ </div>
39
+ </div>
40
+
41
+ <div class="flex items-center w-full">
42
+ <label class="w-1/4 text-gray-700">Prevent Overtaking:</label>
43
+ <div class="w-3/4">
44
+ <label class="flex items-center gap-4 cursor-pointer">
45
+ <input type="hidden" name="prevent_overtaking" value="off">
46
+
47
+ <input
48
+ name="prevent_overtaking"
49
+ type="checkbox"
50
+ class="checkbox checkbox-warning"
51
+ checked
52
+ />
53
+
54
+ <div class="space-y-1">
55
+ <div class="flex items-center gap-2">
56
+ Only adjust if consumer hasn't moved beyond requested offset already
57
+ </div>
58
+ <div class="text-sm text-gray-500">
59
+ Prevents seeking back in case the consumer moved forward
60
+ </div>
61
+ </div>
62
+ </label>
63
+ </div>
64
+ </div>
65
+
66
+ <div class="flex items-center w-full mt-4 <%= 'text-muted' if @topic_lrj %>">
67
+ <label class="w-1/4 text-gray-700">Resume Immediately:</label>
68
+ <div class="w-3/4">
69
+ <label class="flex items-center gap-4 cursor-pointer">
70
+ <input type="hidden" name="force_resume" value="off">
71
+ <input
72
+ name="force_resume"
73
+ type="checkbox"
74
+ class="checkbox checkbox-warning"
75
+ <%= 'disabled' if @topic_lrj %>
76
+ />
77
+ <div class="space-y-1">
78
+ <div class="flex items-center gap-2">
79
+ If partition is currently paused, resume processing immediately
80
+ </div>
81
+ <div class="text-sm text-gray-500">
82
+ <% if @topic_lrj %>
83
+ Option not available for Long-Running Jobs topics
84
+ <% elsif @routing_topic %>
85
+ Has no effect if partition is not paused
86
+ <% else %>
87
+ Option not available, since topic not visible in the Web UI routing
88
+ <% end %>
89
+ </div>
90
+ </div>
91
+ </label>
92
+ </div>
93
+ </div>
94
+
95
+ <div class="fieldset text-center mt-6 ">
96
+ <div class="flex gap-4 justify-end">
97
+ <a href="<%= root_path('health', 'overview') %>" class="btn btn-ghost">
98
+ Cancel
99
+ </a>
100
+
101
+ <button type="submit" class="btn btn-warning gap-2 btn-lockable">
102
+ <%== icon(:pencil_square) %>
103
+ Adjust Offset
104
+ </button>
105
+ </div>
106
+ </div>
107
+ </form>
108
+ </div>
109
+ </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
+ <% alert_box_error 'This Operation Cannot Be Performed' do %>
5
+ <p>
6
+ Consumer offsets can only be modified using Web UI when the consumer is in a running state.
7
+ </p>
8
+ <% end %>
9
+
10
+ <div class="fieldset text-center mt-6">
11
+ <div class="flex justify-end">
12
+ <a href="<%= root_path('health', 'overview') %>" class="btn btn-ghost">
13
+ Cancel
14
+ </a>
15
+ </div>
16
+ </div>
@@ -0,0 +1,15 @@
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('Running Consumer Process Operation') do %>
5
+ <p>
6
+ You are about to modify offset for an actively running consumer. This operation:
7
+ </p>
8
+
9
+ <ul class="list-disc ml-6 mt-2">
10
+ <li>Takes effect during the next poll operation</li>
11
+ <li>May affect message processing</li>
12
+ <li>Cannot be undone</li>
13
+ <li>Will take effect only if the current process still owns the assignment</li>
14
+ </ul>
15
+ <% end %>
@@ -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
+ <% view_title "#{@process.id} - Offset Adjustment - #{@subscription_group_id} - #{@topic}##{@partition_id}" %>
5
+
6
+ <% if @process.status != 'running' %>
7
+ <%== partial 'consumers/partitions/offsets/not_running_error' %>
8
+ <% else %>
9
+ <%== partial 'consumers/partitions/offsets/running_warning' %>
10
+ <%== partial 'consumers/partitions/offsets/basics' %>
11
+ <%== partial 'consumers/partitions/offsets/form' %>
12
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <% alert_box_error 'Cannot Configure Pause Settings' do %>
5
+ <p class="mb-2">
6
+ This partition is currently active and processing messages.
7
+ </p>
8
+ <p class="mb-2">
9
+ Pause settings can only be configured for partitions that are already in a paused state.
10
+ </p>
11
+ <p>
12
+ You can pause this partition first using the pause action from the partitions list.
13
+ </p>
14
+ <% end %>
15
+
16
+ <div class="fieldset text-center mt-6">
17
+ <div class="flex justify-end">
18
+ <a href="<%= root_path('health', 'overview') %>" class="btn btn-ghost">
19
+ Cancel
20
+ </a>
21
+ </div>
22
+ </div>
@@ -0,0 +1,27 @@
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('Running Consumer Process Operation') do %>
5
+ <p>
6
+ You are about to adjust pause for an actively running consumer. This operation:
7
+ </p>
8
+
9
+ <ul class="list-disc ml-6 mt-2 mb-2">
10
+ <li>Takes effect during the next poll operation</li>
11
+ <li>May affect message processing</li>
12
+ <li>Cannot be undone</li>
13
+ <li>Will take effect only if the current process still owns the assignment</li>
14
+ </ul>
15
+
16
+ <hr/>
17
+
18
+ <p class="mt-2">
19
+ During long pauses, lag reporting on this topic partition may stop as librdkafka freezes the last known high watermark.
20
+ </p>
21
+
22
+ <p class="mt-2">
23
+ Real-time, state-independent lag metrics can always be checked in the
24
+ <a href="<%= root_path('health', 'cluster_lags') %>">Cluster Lags</a> tab
25
+ of the <a href="<%= root_path('health') %>">Health</a> section.
26
+ </p>
27
+ <% end %>
@@ -0,0 +1,60 @@
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
+ <li>
11
+ <a href="<%= consumer_path(@process.id, 'subscriptions') %>">
12
+ <%== truncate(@process.id, strategy: :middle) %>
13
+ </a>
14
+ </li>
15
+
16
+ <% if @subscription_group_id %>
17
+ <li>
18
+ <a href="<%= consumer_path(@process.id, "subscriptions##{@subscription_group_id}") %>">
19
+ <%= @subscription_group_id %>
20
+ </a>
21
+ </li>
22
+
23
+ <%
24
+ action = current_path.include?('/new') ? 'new' : 'edit'
25
+
26
+ target_path = consumer_path(
27
+ @process.id,
28
+ 'partitions',
29
+ @subscription_group_id,
30
+ @topic,
31
+ @partition_id,
32
+ 'pause',
33
+ action
34
+ )
35
+ %>
36
+
37
+ <li>
38
+ <a href="<%= target_path %>">
39
+ <%= @topic %>
40
+ </a>
41
+ </li>
42
+
43
+ <li>
44
+ <a href="<%= target_path %>">
45
+ <%= @partition_id %>
46
+ </a>
47
+ </li>
48
+
49
+ <li>
50
+ <a href="<%= target_path %>">
51
+ Pauses
52
+ </a>
53
+ </li>
54
+
55
+ <li>
56
+ <a href="<%= target_path %>">
57
+ <%= action.capitalize %>
58
+ </a>
59
+ </li>
60
+ <% end %>
@@ -0,0 +1,59 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <%
5
+ resume_path = consumer_path(
6
+ @process.id,
7
+ 'partitions',
8
+ @subscription_group.id,
9
+ @topic,
10
+ @partition_id,
11
+ 'pause'
12
+ )
13
+ %>
14
+
15
+ <div class="card bg-base-100 mt-4">
16
+ <div class="card-body">
17
+ <form
18
+ class="space-y-4 w-full"
19
+ method="post"
20
+ action="<%= resume_path %>"
21
+ >
22
+ <%== csrf_tag(resume_path, 'DELETE') %>
23
+ <input type="hidden" name="_method" value="delete">
24
+
25
+ <div class="flex items-center w-full">
26
+ <label class="w-1/4 text-gray-700">Reset Counter:</label>
27
+
28
+ <div class="w-3/4">
29
+ <label class="flex items-center gap-4 cursor-pointer">
30
+ <input type="hidden" name="reset_attempts" value="off">
31
+ <input type="checkbox" name="reset_attempts" class="checkbox checkbox-warning" />
32
+ <div class="space-y-1">
33
+ <div class="flex items-center gap-2">
34
+ Reset the processing attempts counter when resuming
35
+ </div>
36
+
37
+ <div class="text-sm text-gray-500">
38
+ Resets retries counter for features like DLQ dispatching. Does not affect message offset position.
39
+ </div>
40
+ </div>
41
+ </label>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="fieldset text-center mt-6">
46
+ <div class="flex gap-4 justify-end">
47
+ <a href="<%= root_path('health', 'overview') %>" class="btn btn-ghost">
48
+ Cancel
49
+ </a>
50
+
51
+ <button type="submit" class="btn btn-warning gap-2 btn-lockable">
52
+ <%== icon(:play) %>
53
+ Resume Processing
54
+ </button>
55
+ </div>
56
+ </div>
57
+ </form>
58
+ </div>
59
+ </div>
@@ -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
+ <% alert_box_error 'Cannot Manage Long-Running Job Partitions Pausing' do %>
5
+ <p class="mb-2">
6
+ Manual pause/resume operations are not supported for topics using Long-Running Jobs.
7
+ </p>
8
+
9
+ <p class="mb-2">
10
+ These topics partitions are automatically paused and resumed based on the message processing flow to ensure reliable and consistent behavior.
11
+ </p>
12
+
13
+ <p>
14
+ Long-Running Jobs handle partition pausing internally to maintain processing stability and prevent message duplication or loss.
15
+ </p>
16
+ <% end %>
17
+
18
+ <div class="fieldset text-center mt-6">
19
+ <div class="flex justify-end">
20
+ <a href="<%= root_path('health', 'overview') %>" class="btn btn-ghost">
21
+ Cancel
22
+ </a>
23
+ </div>
24
+ </div>
@@ -0,0 +1,78 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <%
5
+ pause_path = consumer_path(
6
+ @process.id,
7
+ 'partitions',
8
+ @subscription_group.id,
9
+ @topic,
10
+ @partition_id,
11
+ 'pause'
12
+ )
13
+ %>
14
+
15
+ <div class="card bg-base-100 mt-4">
16
+ <div class="card-body">
17
+ <form class="space-y-4 w-full" method="post" action="<%= pause_path %>">
18
+ <%== csrf_tag(pause_path) %>
19
+
20
+ <div class="flex items-center w-full mb-8">
21
+ <label class="w-1/4 text-gray-700">Pause Duration:</label>
22
+ <div class="w-3/4">
23
+ <input
24
+ type="number"
25
+ min="0"
26
+ max="31536000"
27
+ name="duration"
28
+ class="block input input-bordered w-full"
29
+ placeholder="Enter pause duration in seconds (0 for indefinite)"
30
+ required
31
+ />
32
+
33
+ <div class="text-sm text-gray-500 mt-1">
34
+ Set to 0 for indefinite pause or specify time in seconds
35
+ </div>
36
+ </div>
37
+ </div>
38
+
39
+ <div class="flex items-center w-full">
40
+ <label class="w-1/4 text-gray-700">Safety Check:</label>
41
+ <div class="w-3/4">
42
+ <label class="flex items-center gap-4 cursor-pointer">
43
+ <input type="hidden" name="prevent_override" value="off">
44
+
45
+ <input
46
+ type="checkbox"
47
+ name="prevent_override"
48
+ class="checkbox checkbox-warning"
49
+ checked
50
+ />
51
+
52
+ <div class="space-y-1">
53
+ <div class="flex items-center gap-2">
54
+ Only pause if partition is not already paused
55
+ </div>
56
+ <div class="text-sm text-gray-500">
57
+ Prevents accidental override of existing pause
58
+ </div>
59
+ </div>
60
+ </label>
61
+ </div>
62
+ </div>
63
+
64
+ <div class="fieldset text-center mt-6">
65
+ <div class="flex gap-4 justify-end">
66
+ <a href="<%= root_path('health', 'overview') %>" class="btn btn-ghost">
67
+ Cancel
68
+ </a>
69
+
70
+ <button type="submit" class="btn btn-warning gap-2 btn-lockable">
71
+ <%== icon(:pause) %>
72
+ Set or Update Pause
73
+ </button>
74
+ </div>
75
+ </div>
76
+ </form>
77
+ </div>
78
+ </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
+ <% alert_box_error 'This Operation Cannot Be Performed' do %>
5
+ <p>
6
+ Consumer pauses can only be managed using Web UI when the consumer is in a running state.
7
+ </p>
8
+ <% end %>
9
+
10
+ <div class="fieldset text-center mt-6">
11
+ <div class="flex justify-end">
12
+ <a href="<%= root_path('health', 'overview') %>" class="btn btn-ghost">
13
+ Cancel
14
+ </a>
15
+ </div>
16
+ </div>
@@ -0,0 +1,20 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <% view_title "#{@process.id} - Pause Adjustment - #{@subscription_group_id} - #{@topic}##{@partition_id}" %>
5
+
6
+ <% if @topic_lrj %>
7
+ <%== partial 'consumers/partitions/pauses/lrj_not_manageable' %>
8
+ <% else %>
9
+ <% if @process.status == 'running' %>
10
+ <% if @partition_stats.poll_state == 'active' %>
11
+ <%== partial 'consumers/partitions/pauses/active_not_editable' %>
12
+ <% else %>
13
+ <%== partial 'consumers/partitions/pauses/adjusting_warning' %>
14
+ <%== partial 'consumers/partitions/offsets/basics' %>
15
+ <%== partial 'consumers/partitions/pauses/edit_form' %>
16
+ <% end %>
17
+ <% else %>
18
+ <%== partial 'consumers/partitions/pauses/not_running' %>
19
+ <% end %>
20
+ <% 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 "#{@process.id} - Pause Adjustment - #{@subscription_group_id} - #{@topic}##{@partition_id}" %>
5
+
6
+ <% if @topic_lrj %>
7
+ <%== partial 'consumers/partitions/pauses/lrj_not_manageable' %>
8
+ <% else %>
9
+ <% if @process.status == 'running' %>
10
+ <%== partial 'consumers/partitions/pauses/adjusting_warning' %>
11
+ <%== partial 'consumers/partitions/offsets/basics' %>
12
+ <%== partial 'consumers/partitions/pauses/new_form' %>
13
+ <% else %>
14
+ <%== partial 'consumers/partitions/pauses/not_running' %>
15
+ <% end %>
16
+ <% 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
  <% view_title 'Dashboard' %>
2
5
 
3
6
  <%== partial 'dashboard/counters' %>
@@ -41,7 +44,7 @@
41
44
  </div>
42
45
  </div>
43
46
 
44
- <h2 class="h2">Utilization Metrics</h2>
47
+ <h2 class="h2 mt-4">Utilization Metrics</h2>
45
48
 
46
49
  <div class="tab-container-wrapper" id="graphs2">
47
50
  <div class="tab-container inline-tabs">
@@ -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('dlq') %>">
3
6
  Dead Letter Queue topics
@@ -1 +1,4 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <%== alert_info('No Dead Letter Queue topics exist in Kafka.') %>
@@ -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
  <div class="topic-tile">
2
5
  <div class="topic-tile-body">
3
6
  <p class="topic-tile-text">
4
- <a href="<%= explorer_path(topic[:topic_name]) %>" class="topic-tile-link">
7
+ <a href="<%= explorer_topics_path(topic[:topic_name]) %>" class="topic-tile-link">
5
8
  <%= topic[:topic_name] %> / <%= topic[:partition_count] %>
6
9
  </a>
7
10
  </p>
@@ -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 'Dead Letter Queue Topics' %>
2
5
 
3
6
  <% if @dlq_topics.empty? %>