karafka-web 0.10.3 → 0.11.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +64 -176
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +88 -44
  6. data/LICENSE +6 -2
  7. data/bin/verify_kafka_warnings +35 -0
  8. data/bin/verify_topics_naming +35 -0
  9. data/config/locales/pro_errors.yml +1 -0
  10. data/docker-compose.yml +1 -1
  11. data/gulpfile.js +0 -2
  12. data/karafka-web.gemspec +3 -5
  13. data/lib/karafka/web/config.rb +86 -10
  14. data/lib/karafka/web/contracts/config.rb +45 -5
  15. data/lib/karafka/web/errors.rb +10 -0
  16. data/lib/karafka/web/management/actions/create_initial_states.rb +6 -6
  17. data/lib/karafka/web/management/actions/create_topics.rb +30 -64
  18. data/lib/karafka/web/management/actions/delete_topics.rb +5 -5
  19. data/lib/karafka/web/management/actions/enable.rb +5 -5
  20. data/lib/karafka/web/pro/commanding/commands/base.rb +37 -13
  21. data/lib/karafka/web/pro/commanding/commands/consumers/quiet.rb +33 -0
  22. data/lib/karafka/web/pro/commanding/commands/consumers/stop.rb +32 -0
  23. data/lib/karafka/web/pro/commanding/commands/consumers/trace.rb +37 -0
  24. data/lib/karafka/web/pro/commanding/commands/partitions/pause.rb +30 -0
  25. data/lib/karafka/web/pro/commanding/commands/partitions/resume.rb +30 -0
  26. data/lib/karafka/web/pro/commanding/commands/partitions/seek.rb +30 -0
  27. data/lib/karafka/web/pro/commanding/config.rb +6 -10
  28. data/lib/karafka/web/pro/commanding/contracts/config.rb +2 -10
  29. data/lib/karafka/web/pro/commanding/dispatcher.rb +45 -24
  30. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/base.rb +67 -0
  31. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/pause.rb +44 -0
  32. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/resume.rb +29 -0
  33. data/lib/karafka/web/pro/commanding/handlers/partitions/commands/seek.rb +86 -0
  34. data/lib/karafka/web/pro/commanding/handlers/partitions/executor.rb +56 -0
  35. data/lib/karafka/web/pro/commanding/handlers/partitions/listener.rb +55 -0
  36. data/lib/karafka/web/pro/commanding/handlers/partitions/tracker.rb +62 -0
  37. data/lib/karafka/web/pro/commanding/listener.rb +4 -12
  38. data/lib/karafka/web/pro/commanding/manager.rb +36 -24
  39. data/lib/karafka/web/pro/commanding/matcher.rb +7 -17
  40. data/lib/karafka/web/pro/commanding/request.rb +39 -0
  41. data/lib/karafka/web/pro/commanding.rb +2 -10
  42. data/lib/karafka/web/pro/loader.rb +32 -10
  43. data/lib/karafka/web/pro/ui/app.rb +31 -390
  44. data/lib/karafka/web/pro/ui/controllers/base_controller.rb +8 -10
  45. data/lib/karafka/web/pro/ui/controllers/cluster_controller.rb +2 -10
  46. data/lib/karafka/web/pro/ui/controllers/consumers/base_controller.rb +21 -0
  47. data/lib/karafka/web/pro/ui/controllers/consumers/commanding_controller.rb +148 -0
  48. data/lib/karafka/web/pro/ui/controllers/consumers/commands_controller.rb +96 -0
  49. data/lib/karafka/web/pro/ui/controllers/consumers/consumers_controller.rb +101 -0
  50. data/lib/karafka/web/pro/ui/controllers/consumers/controls_controller.rb +36 -0
  51. data/lib/karafka/web/pro/ui/controllers/consumers/jobs_controller.rb +57 -0
  52. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/base_controller.rb +86 -0
  53. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/offsets_controller.rb +75 -0
  54. data/lib/karafka/web/pro/ui/controllers/consumers/partitions/pauses_controller.rb +110 -0
  55. data/lib/karafka/web/pro/ui/controllers/dashboard_controller.rb +2 -10
  56. data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +2 -10
  57. data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +3 -11
  58. data/lib/karafka/web/pro/ui/controllers/explorer/base_controller.rb +21 -0
  59. data/lib/karafka/web/pro/ui/controllers/explorer/explorer_controller.rb +215 -0
  60. data/lib/karafka/web/pro/ui/controllers/explorer/messages_controller.rb +145 -0
  61. data/lib/karafka/web/pro/ui/controllers/explorer/search_controller.rb +68 -0
  62. data/lib/karafka/web/pro/ui/controllers/health_controller.rb +2 -10
  63. data/lib/karafka/web/pro/ui/controllers/jobs_controller.rb +2 -10
  64. data/lib/karafka/web/pro/ui/controllers/recurring_tasks_controller.rb +12 -13
  65. data/lib/karafka/web/pro/ui/controllers/routing_controller.rb +2 -10
  66. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/base_controller.rb +2 -10
  67. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/explorer_controller.rb +8 -16
  68. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/messages_controller.rb +9 -15
  69. data/lib/karafka/web/pro/ui/controllers/scheduled_messages/schedules_controller.rb +2 -10
  70. data/lib/karafka/web/pro/ui/controllers/status_controller.rb +2 -10
  71. data/lib/karafka/web/pro/ui/controllers/support_controller.rb +2 -10
  72. data/lib/karafka/web/pro/ui/controllers/topics/base_controller.rb +21 -0
  73. data/lib/karafka/web/pro/ui/controllers/topics/configs_controller.rb +86 -0
  74. data/lib/karafka/web/pro/ui/controllers/topics/distributions_controller.rb +91 -0
  75. data/lib/karafka/web/pro/ui/controllers/topics/offsets_controller.rb +55 -0
  76. data/lib/karafka/web/pro/ui/controllers/topics/replications_controller.rb +37 -0
  77. data/lib/karafka/web/pro/ui/controllers/topics/topics_controller.rb +101 -0
  78. data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +2 -10
  79. data/lib/karafka/web/pro/ui/lib/branding/config.rb +2 -10
  80. data/lib/karafka/web/pro/ui/lib/branding/contracts/config.rb +2 -10
  81. data/lib/karafka/web/pro/ui/lib/branding.rb +2 -10
  82. data/lib/karafka/web/pro/ui/lib/features.rb +53 -0
  83. data/lib/karafka/web/pro/ui/lib/patterns_detector.rb +2 -10
  84. data/lib/karafka/web/pro/ui/lib/policies/config.rb +2 -10
  85. data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +2 -10
  86. data/lib/karafka/web/pro/ui/lib/policies/messages.rb +2 -10
  87. data/lib/karafka/web/pro/ui/lib/policies/requests.rb +2 -10
  88. data/lib/karafka/web/pro/ui/lib/policies.rb +2 -10
  89. data/lib/karafka/web/pro/ui/lib/safe_runner.rb +5 -0
  90. data/lib/karafka/web/pro/ui/lib/search/config.rb +2 -10
  91. data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +2 -10
  92. data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +2 -10
  93. data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +2 -10
  94. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +10 -11
  95. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +2 -10
  96. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +23 -11
  97. data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +2 -10
  98. data/lib/karafka/web/pro/ui/lib/search/runner.rb +3 -11
  99. data/lib/karafka/web/pro/ui/lib/search.rb +2 -10
  100. data/lib/karafka/web/pro/ui/routes/base.rb +19 -0
  101. data/lib/karafka/web/pro/ui/routes/cluster.rb +37 -0
  102. data/lib/karafka/web/pro/ui/routes/consumers.rb +145 -0
  103. data/lib/karafka/web/pro/ui/routes/dashboard.rb +25 -0
  104. data/lib/karafka/web/pro/ui/routes/dlq.rb +24 -0
  105. data/lib/karafka/web/pro/ui/routes/errors.rb +39 -0
  106. data/lib/karafka/web/pro/ui/routes/explorer.rb +118 -0
  107. data/lib/karafka/web/pro/ui/routes/health.rb +47 -0
  108. data/lib/karafka/web/pro/ui/routes/jobs.rb +33 -0
  109. data/lib/karafka/web/pro/ui/routes/recurring_tasks.rb +59 -0
  110. data/lib/karafka/web/pro/ui/routes/routing.rb +31 -0
  111. data/lib/karafka/web/pro/ui/routes/scheduled_messages.rb +75 -0
  112. data/lib/karafka/web/pro/ui/routes/status.rb +24 -0
  113. data/lib/karafka/web/pro/ui/routes/support.rb +24 -0
  114. data/lib/karafka/web/pro/ui/routes/topics.rb +90 -0
  115. data/lib/karafka/web/pro/ui/routes/ux.rb +24 -0
  116. data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +3 -0
  117. data/lib/karafka/web/pro/ui/views/cluster/_broker.erb +3 -0
  118. data/lib/karafka/web/pro/ui/views/cluster/_config.erb +3 -0
  119. data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +3 -0
  120. data/lib/karafka/web/pro/ui/views/cluster/index.erb +4 -1
  121. data/lib/karafka/web/pro/ui/views/cluster/show.erb +3 -0
  122. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_backtrace.erb +3 -0
  123. data/lib/karafka/web/pro/ui/views/consumers/commands/_breadcrumbs.erb +24 -0
  124. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_command.erb +22 -6
  125. data/lib/karafka/web/pro/ui/views/consumers/commands/_command_details.erb +4 -0
  126. data/lib/karafka/web/pro/ui/views/consumers/commands/_empty.erb +6 -0
  127. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_incompatible_schema.erb +3 -0
  128. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_metadata.erb +4 -1
  129. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/_table.erb +5 -2
  130. data/lib/karafka/web/pro/ui/views/{commands → consumers/commands}/index.erb +7 -4
  131. data/lib/karafka/web/pro/ui/views/consumers/commands/show.erb +32 -0
  132. data/lib/karafka/web/pro/ui/views/consumers/consumers/_breadcrumbs.erb +46 -0
  133. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer.erb +59 -0
  134. data/lib/karafka/web/pro/ui/views/consumers/consumers/_consumer_performance.erb +71 -0
  135. data/lib/karafka/web/pro/ui/views/consumers/consumers/_tabs.erb +38 -0
  136. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_commands.erb +80 -0
  137. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_consumer_group.erb +11 -0
  138. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_metrics.erb +3 -0
  139. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_no_subscriptions.erb +10 -0
  140. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_partition.erb +16 -0
  141. data/lib/karafka/web/pro/ui/views/consumers/consumers/consumer/_partition_edit_options.erb +33 -0
  142. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_stopped.erb +3 -0
  143. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_subscription_group.erb +7 -3
  144. data/lib/karafka/web/pro/ui/views/consumers/{consumer → consumers/consumer}/_tabs.erb +7 -4
  145. data/lib/karafka/web/pro/ui/views/consumers/consumers/details.erb +15 -0
  146. data/lib/karafka/web/pro/ui/views/consumers/{index.erb → consumers/index.erb} +6 -3
  147. data/lib/karafka/web/pro/ui/views/consumers/{performance.erb → consumers/performance.erb} +6 -3
  148. data/lib/karafka/web/pro/ui/views/consumers/consumers/subscriptions.erb +24 -0
  149. data/lib/karafka/web/pro/ui/views/consumers/controls/_breadcrumbs.erb +16 -0
  150. data/lib/karafka/web/pro/ui/views/consumers/controls/_controls.erb +107 -0
  151. data/lib/karafka/web/pro/ui/views/consumers/{controls.erb → controls/index.erb} +8 -5
  152. data/lib/karafka/web/pro/ui/views/consumers/jobs/_breadcrumbs.erb +36 -0
  153. data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_job.erb +3 -0
  154. data/lib/karafka/web/pro/ui/views/consumers/{consumer → jobs}/_no_jobs.erb +3 -0
  155. data/lib/karafka/web/pro/ui/views/consumers/{pending_jobs.erb → jobs/pending.erb} +7 -8
  156. data/lib/karafka/web/pro/ui/views/consumers/{running_jobs.erb → jobs/running.erb} +7 -8
  157. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_basics.erb +77 -0
  158. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_breadcrumbs.erb +58 -0
  159. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_form.erb +109 -0
  160. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_not_running_error.erb +16 -0
  161. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/_running_warning.erb +15 -0
  162. data/lib/karafka/web/pro/ui/views/consumers/partitions/offsets/edit.erb +12 -0
  163. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_active_not_editable.erb +22 -0
  164. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_adjusting_warning.erb +27 -0
  165. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_breadcrumbs.erb +60 -0
  166. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_edit_form.erb +59 -0
  167. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_lrj_not_manageable.erb +24 -0
  168. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_new_form.erb +78 -0
  169. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/_not_running.erb +16 -0
  170. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/edit.erb +20 -0
  171. data/lib/karafka/web/pro/ui/views/consumers/partitions/pauses/new.erb +16 -0
  172. data/lib/karafka/web/pro/ui/views/dashboard/index.erb +4 -1
  173. data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +3 -0
  174. data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +3 -0
  175. data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +4 -1
  176. data/lib/karafka/web/pro/ui/views/dlq/index.erb +3 -0
  177. data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +3 -0
  178. data/lib/karafka/web/pro/ui/views/errors/_error.erb +3 -0
  179. data/lib/karafka/web/pro/ui/views/errors/_partition_option.erb +3 -0
  180. data/lib/karafka/web/pro/ui/views/errors/_selector.erb +3 -0
  181. data/lib/karafka/web/pro/ui/views/errors/_table.erb +4 -1
  182. data/lib/karafka/web/pro/ui/views/errors/index.erb +6 -3
  183. data/lib/karafka/web/pro/ui/views/errors/partition.erb +5 -2
  184. data/lib/karafka/web/pro/ui/views/errors/show.erb +3 -0
  185. data/lib/karafka/web/pro/ui/views/explorer/{_breadcrumbs.erb → explorer/_breadcrumbs.erb} +7 -4
  186. data/lib/karafka/web/pro/ui/views/explorer/{_failed_deserialization.erb → explorer/_failed_deserialization.erb} +3 -0
  187. data/lib/karafka/web/pro/ui/views/explorer/{_filtered.erb → explorer/_filtered.erb} +3 -0
  188. data/lib/karafka/web/pro/ui/views/explorer/{_message.erb → explorer/_message.erb} +4 -1
  189. data/lib/karafka/web/pro/ui/views/explorer/explorer/_no_topics.erb +4 -0
  190. data/lib/karafka/web/pro/ui/views/explorer/{_partition_option.erb → explorer/_partition_option.erb} +4 -1
  191. data/lib/karafka/web/pro/ui/views/explorer/{_selector.erb → explorer/_selector.erb} +4 -1
  192. data/lib/karafka/web/pro/ui/views/explorer/explorer/_topic.erb +13 -0
  193. data/lib/karafka/web/pro/ui/views/explorer/explorer/index.erb +17 -0
  194. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_metadata.erb +10 -7
  195. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_payload.erb +6 -3
  196. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_resources_utilization.erb +7 -4
  197. data/lib/karafka/web/pro/ui/views/explorer/{message → explorer/message}/_too_big_to_be_displayed.erb +3 -0
  198. data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_detail.erb +3 -0
  199. data/lib/karafka/web/pro/ui/views/explorer/explorer/messages/_headers.erb +51 -0
  200. data/lib/karafka/web/pro/ui/views/explorer/{messages → explorer/messages}/_key.erb +3 -0
  201. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_cleaned.erb +6 -0
  202. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_empty.erb +6 -0
  203. data/lib/karafka/web/pro/ui/views/explorer/{partition → explorer/partition}/_messages.erb +4 -1
  204. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_time_selector.erb +16 -0
  205. data/lib/karafka/web/pro/ui/views/explorer/explorer/partition/_timestamp_selector.erb +33 -0
  206. data/lib/karafka/web/pro/ui/views/explorer/{partition.erb → explorer/partition.erb} +24 -17
  207. data/lib/karafka/web/pro/ui/views/explorer/{show.erb → explorer/show.erb} +17 -19
  208. data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_actions.erb +5 -2
  209. data/lib/karafka/web/pro/ui/views/explorer/explorer/topic/_empty.erb +6 -0
  210. data/lib/karafka/web/pro/ui/views/explorer/{topic → explorer/topic}/_limited.erb +3 -0
  211. data/lib/karafka/web/pro/ui/views/explorer/{topic.erb → explorer/topic.erb} +7 -4
  212. data/lib/karafka/web/pro/ui/views/explorer/messages/_breadcrumbs.erb +32 -0
  213. data/lib/karafka/web/pro/ui/views/explorer/messages/forward.erb +143 -0
  214. data/lib/karafka/web/pro/ui/views/explorer/search/_breadcrumbs.erb +4 -0
  215. data/lib/karafka/web/pro/ui/views/explorer/search/_fix_errors.erb +6 -0
  216. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_metadata.erb +3 -0
  217. data/lib/karafka/web/pro/ui/views/explorer/search/_no_results.erb +6 -0
  218. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_no_search_criteria.erb +3 -0
  219. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_criteria.erb +3 -0
  220. data/lib/karafka/web/pro/ui/views/{search → explorer/search}/_search_modal.erb +5 -2
  221. data/lib/karafka/web/pro/ui/views/explorer/search/_timeout.erb +6 -0
  222. data/lib/karafka/web/pro/ui/views/explorer/search/index.erb +32 -0
  223. data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +3 -0
  224. data/lib/karafka/web/pro/ui/views/health/_no_data.erb +3 -0
  225. data/lib/karafka/web/pro/ui/views/health/_partition.erb +16 -1
  226. data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +3 -0
  227. data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +3 -0
  228. data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +3 -0
  229. data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +4 -1
  230. data/lib/karafka/web/pro/ui/views/health/_tabs.erb +3 -0
  231. data/lib/karafka/web/pro/ui/views/health/changes.erb +4 -1
  232. data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +3 -0
  233. data/lib/karafka/web/pro/ui/views/health/lags.erb +5 -2
  234. data/lib/karafka/web/pro/ui/views/health/offsets.erb +4 -1
  235. data/lib/karafka/web/pro/ui/views/health/overview.erb +8 -3
  236. data/lib/karafka/web/pro/ui/views/jobs/_job.erb +50 -38
  237. data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +3 -0
  238. data/lib/karafka/web/pro/ui/views/jobs/pending.erb +4 -1
  239. data/lib/karafka/web/pro/ui/views/jobs/running.erb +4 -1
  240. data/lib/karafka/web/pro/ui/views/recurring_tasks/_actions.erb +3 -0
  241. data/lib/karafka/web/pro/ui/views/recurring_tasks/_batch_actions.erb +3 -0
  242. data/lib/karafka/web/pro/ui/views/recurring_tasks/_breadcrumbs.erb +3 -0
  243. data/lib/karafka/web/pro/ui/views/recurring_tasks/_log.erb +3 -0
  244. data/lib/karafka/web/pro/ui/views/recurring_tasks/_not_active.erb +3 -0
  245. data/lib/karafka/web/pro/ui/views/recurring_tasks/_tabs.erb +3 -0
  246. data/lib/karafka/web/pro/ui/views/recurring_tasks/_task.erb +3 -0
  247. data/lib/karafka/web/pro/ui/views/recurring_tasks/logs.erb +3 -0
  248. data/lib/karafka/web/pro/ui/views/recurring_tasks/schedule.erb +3 -0
  249. data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +3 -0
  250. data/lib/karafka/web/pro/ui/views/routing/_detail.erb +3 -0
  251. data/lib/karafka/web/pro/ui/views/routing/_topic.erb +3 -0
  252. data/lib/karafka/web/pro/ui/views/routing/index.erb +3 -0
  253. data/lib/karafka/web/pro/ui/views/routing/show.erb +3 -0
  254. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_breadcrumbs.erb +6 -3
  255. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_key.erb +3 -0
  256. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_message.erb +4 -1
  257. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/_messages.erb +3 -0
  258. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/partition.erb +23 -16
  259. data/lib/karafka/web/pro/ui/views/scheduled_messages/explorer/topic.erb +6 -3
  260. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_breadcrumbs.erb +3 -0
  261. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/_no_groups.erb +3 -0
  262. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/index.erb +4 -1
  263. data/lib/karafka/web/pro/ui/views/scheduled_messages/schedules/show.erb +3 -0
  264. data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +25 -17
  265. data/lib/karafka/web/pro/ui/views/shared/_rdkafka_form_error_alert_box.erb +16 -0
  266. data/lib/karafka/web/pro/ui/views/shared/branding/_label.erb +3 -0
  267. data/lib/karafka/web/pro/ui/views/shared/branding/_notice.erb +3 -0
  268. data/lib/karafka/web/pro/ui/views/topics/configs/_breadcrumbs.erb +34 -0
  269. data/lib/karafka/web/pro/ui/views/topics/configs/_config.erb +26 -0
  270. data/lib/karafka/web/pro/ui/views/topics/configs/_delete_button.erb +13 -0
  271. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_form.erb +50 -0
  272. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_plan.erb +16 -0
  273. data/lib/karafka/web/pro/ui/views/topics/configs/_edit_warning.erb +12 -0
  274. data/lib/karafka/web/pro/ui/views/topics/configs/edit.erb +16 -0
  275. data/lib/karafka/web/pro/ui/views/topics/{config.erb → configs/index.erb} +9 -3
  276. data/lib/karafka/web/pro/ui/views/topics/distributions/_add_partitions_button.erb +13 -0
  277. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_badges.erb +3 -0
  278. data/lib/karafka/web/pro/ui/views/topics/distributions/_breadcrumbs.erb +28 -0
  279. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_chart.erb +3 -0
  280. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_form.erb +47 -0
  281. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_hints.erb +15 -0
  282. data/lib/karafka/web/pro/ui/views/topics/distributions/_edit_warnings.erb +14 -0
  283. data/lib/karafka/web/pro/ui/views/topics/distributions/_empty_partitions.erb +4 -0
  284. data/lib/karafka/web/pro/ui/views/topics/{distribution → distributions}/_limited.erb +3 -0
  285. data/lib/karafka/web/pro/ui/views/topics/distributions/_partition.erb +13 -0
  286. data/lib/karafka/web/pro/ui/views/topics/distributions/edit.erb +16 -0
  287. data/lib/karafka/web/pro/ui/views/topics/{distribution.erb → distributions/show.erb} +11 -7
  288. data/lib/karafka/web/pro/ui/views/topics/offsets/_breadcrumbs.erb +20 -0
  289. data/lib/karafka/web/pro/ui/views/topics/offsets/_partition.erb +13 -0
  290. data/lib/karafka/web/pro/ui/views/topics/{offsets.erb → offsets/show.erb} +6 -3
  291. data/lib/karafka/web/pro/ui/views/topics/replications/_breadcrumbs.erb +20 -0
  292. data/lib/karafka/web/pro/ui/views/topics/{_partition.erb → replications/_partition.erb} +4 -1
  293. data/lib/karafka/web/pro/ui/views/topics/{replication.erb → replications/show.erb} +6 -3
  294. data/lib/karafka/web/pro/ui/views/topics/topics/_breadcrumbs.erb +32 -0
  295. data/lib/karafka/web/pro/ui/views/topics/topics/_create_button.erb +13 -0
  296. data/lib/karafka/web/pro/ui/views/topics/topics/_create_hints.erb +15 -0
  297. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_form.erb +36 -0
  298. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_hints.erb +15 -0
  299. data/lib/karafka/web/pro/ui/views/topics/topics/_delete_warning.erb +13 -0
  300. data/lib/karafka/web/pro/ui/views/topics/topics/_new_form.erb +80 -0
  301. data/lib/karafka/web/pro/ui/views/topics/{_tabs.erb → topics/_tabs.erb} +7 -4
  302. data/lib/karafka/web/pro/ui/views/topics/topics/_topic.erb +12 -0
  303. data/lib/karafka/web/pro/ui/views/topics/topics/edit.erb +10 -0
  304. data/lib/karafka/web/pro/ui/views/topics/topics/index.erb +19 -0
  305. data/lib/karafka/web/pro/ui/views/topics/topics/new.erb +12 -0
  306. data/lib/karafka/web/processing/consumers/metrics.rb +1 -1
  307. data/lib/karafka/web/processing/consumers/state.rb +1 -1
  308. data/lib/karafka/web/processing/publisher.rb +4 -4
  309. data/lib/karafka/web/tracking/consumers/contracts/partition.rb +1 -0
  310. data/lib/karafka/web/tracking/consumers/listeners/errors.rb +38 -9
  311. data/lib/karafka/web/tracking/consumers/listeners/pausing.rb +2 -2
  312. data/lib/karafka/web/tracking/consumers/listeners/transactions.rb +44 -0
  313. data/lib/karafka/web/tracking/consumers/reporter.rb +2 -2
  314. data/lib/karafka/web/tracking/consumers/sampler.rb +81 -14
  315. data/lib/karafka/web/tracking/helpers/sysconf.rb +33 -0
  316. data/lib/karafka/web/tracking/producers/reporter.rb +2 -9
  317. data/lib/karafka/web/ui/app.rb +19 -112
  318. data/lib/karafka/web/ui/base.rb +63 -4
  319. data/lib/karafka/web/ui/controllers/base_controller.rb +43 -1
  320. data/lib/karafka/web/ui/controllers/cluster_controller.rb +5 -2
  321. data/lib/karafka/web/ui/controllers/errors_controller.rb +1 -1
  322. data/lib/karafka/web/ui/controllers/requests/execution_wrapper.rb +52 -0
  323. data/lib/karafka/web/ui/controllers/requests/hookable.rb +99 -0
  324. data/lib/karafka/web/ui/controllers/requests/params.rb +39 -1
  325. data/lib/karafka/web/ui/controllers/responses/redirect.rb +0 -5
  326. data/lib/karafka/web/ui/controllers/status_controller.rb +3 -0
  327. data/lib/karafka/web/ui/helpers/application_helper.rb +10 -1
  328. data/lib/karafka/web/ui/helpers/paths_helper.rb +54 -10
  329. data/lib/karafka/web/ui/lib/admin.rb +1 -1
  330. data/lib/karafka/web/ui/lib/cache.rb +135 -0
  331. data/lib/karafka/web/ui/models/broker.rb +1 -2
  332. data/lib/karafka/web/ui/models/cluster_info.rb +15 -21
  333. data/lib/karafka/web/ui/models/consumers_metrics.rb +1 -1
  334. data/lib/karafka/web/ui/models/consumers_state.rb +1 -1
  335. data/lib/karafka/web/ui/models/counters.rb +1 -1
  336. data/lib/karafka/web/ui/models/health.rb +9 -7
  337. data/lib/karafka/web/ui/models/process.rb +14 -0
  338. data/lib/karafka/web/ui/models/processes.rb +2 -2
  339. data/lib/karafka/web/ui/models/recurring_tasks/schedule.rb +1 -1
  340. data/lib/karafka/web/ui/models/status.rb +27 -8
  341. data/lib/karafka/web/ui/models/topic.rb +1 -2
  342. data/lib/karafka/web/ui/public/javascripts/application.js +8 -98
  343. data/lib/karafka/web/ui/public/javascripts/application.min.js +15 -6
  344. data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
  345. data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
  346. data/lib/karafka/web/ui/public/javascripts/components/action_confirmation_manager.js +30 -0
  347. data/lib/karafka/web/ui/public/javascripts/components/alerts.js +39 -0
  348. data/lib/karafka/web/ui/public/javascripts/components/btn_toggle_manager.js +17 -7
  349. data/lib/karafka/web/ui/public/javascripts/components/button_lock_manager.js +50 -0
  350. data/lib/karafka/web/ui/public/javascripts/components/live_poll.js +71 -19
  351. data/lib/karafka/web/ui/public/javascripts/components/message_republish_manager.js +50 -0
  352. data/lib/karafka/web/ui/public/javascripts/components/page_title_tracker.js +21 -0
  353. data/lib/karafka/web/ui/public/javascripts/components/partition_redirect_manager.js +21 -0
  354. data/lib/karafka/web/ui/public/javascripts/components/time_ago_manager.js +25 -0
  355. data/lib/karafka/web/ui/public/javascripts/components/timestamp_selector.js +30 -0
  356. data/lib/karafka/web/ui/public/javascripts/libs/datepicker.js +2 -2
  357. data/lib/karafka/web/ui/public/stylesheets/application.css +30 -0
  358. data/lib/karafka/web/ui/public/stylesheets/application.min.css +5123 -13
  359. data/lib/karafka/web/ui/public/stylesheets/application.min.css.br +0 -0
  360. data/lib/karafka/web/ui/public/stylesheets/application.min.css.gz +0 -0
  361. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.gz +0 -0
  362. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.gz +0 -0
  363. data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +512 -213
  364. data/lib/karafka/web/ui/routes/assets.rb +53 -0
  365. data/lib/karafka/web/ui/routes/base.rb +36 -0
  366. data/lib/karafka/web/ui/routes/cluster.rb +28 -0
  367. data/lib/karafka/web/ui/routes/consumers.rb +35 -0
  368. data/lib/karafka/web/ui/routes/dashboard.rb +20 -0
  369. data/lib/karafka/web/ui/routes/errors.rb +26 -0
  370. data/lib/karafka/web/ui/routes/jobs.rb +28 -0
  371. data/lib/karafka/web/ui/routes/pro_only.rb +27 -0
  372. data/lib/karafka/web/ui/routes/routing.rb +26 -0
  373. data/lib/karafka/web/ui/routes/status.rb +19 -0
  374. data/lib/karafka/web/ui/routes/support.rb +19 -0
  375. data/lib/karafka/web/ui/routes/ux.rb +19 -0
  376. data/lib/karafka/web/ui/views/cluster/_partition.erb +2 -2
  377. data/lib/karafka/web/ui/views/cluster/brokers.erb +1 -1
  378. data/lib/karafka/web/ui/views/consumers/_breadcrumbs.erb +7 -1
  379. data/lib/karafka/web/ui/views/consumers/_consumer.erb +39 -30
  380. data/lib/karafka/web/ui/views/consumers/_incompatible.erb +13 -0
  381. data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +2 -2
  382. data/lib/karafka/web/ui/views/consumers/_tabs.erb +4 -4
  383. data/lib/karafka/web/ui/views/consumers/index.erb +1 -1
  384. data/lib/karafka/web/ui/views/dashboard/_feature_pro.erb +1 -1
  385. data/lib/karafka/web/ui/views/dashboard/_not_enough_data.erb +2 -2
  386. data/lib/karafka/web/ui/views/dashboard/_ranges_selector.erb +1 -1
  387. data/lib/karafka/web/ui/views/dashboard/index.erb +6 -49
  388. data/lib/karafka/web/ui/views/errors/_detail.erb +3 -3
  389. data/lib/karafka/web/ui/views/errors/index.erb +1 -1
  390. data/lib/karafka/web/ui/views/jobs/_job.erb +38 -29
  391. data/lib/karafka/web/ui/views/jobs/pending.erb +1 -1
  392. data/lib/karafka/web/ui/views/jobs/running.erb +1 -1
  393. data/lib/karafka/web/ui/views/layout.erb +7 -5
  394. data/lib/karafka/web/ui/views/shared/_become_pro.erb +1 -1
  395. data/lib/karafka/web/ui/views/shared/_brand.erb +1 -1
  396. data/lib/karafka/web/ui/views/shared/_breadcrumbs.erb +1 -1
  397. data/lib/karafka/web/ui/views/shared/_content.erb +1 -1
  398. data/lib/karafka/web/ui/views/shared/_controls.erb +10 -3
  399. data/lib/karafka/web/ui/views/shared/_custom_nav.erb +9 -0
  400. data/lib/karafka/web/ui/views/shared/_flashes.erb +3 -5
  401. data/lib/karafka/web/ui/views/shared/_header.erb +25 -2
  402. data/lib/karafka/web/ui/views/shared/_navigation.erb +17 -15
  403. data/lib/karafka/web/ui/views/shared/alerts/_error.erb +8 -0
  404. data/lib/karafka/web/ui/views/shared/alerts/_info.erb +8 -0
  405. data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +8 -0
  406. data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +8 -0
  407. data/lib/karafka/web/ui/views/shared/alerts/_success.erb +8 -0
  408. data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +8 -0
  409. data/lib/karafka/web/ui/views/shared/exceptions/incompatible_schema.erb +34 -0
  410. data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +4 -0
  411. data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +5 -1
  412. data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +4 -0
  413. data/lib/karafka/web/ui/views/shared/icons/_arrow_left.erb +3 -0
  414. data/lib/karafka/web/ui/views/shared/icons/_arrow_up_tray.erb +3 -0
  415. data/lib/karafka/web/ui/views/shared/icons/_clock.erb +3 -0
  416. data/lib/karafka/web/ui/views/shared/icons/_pencil.erb +3 -0
  417. data/lib/karafka/web/ui/views/shared/icons/_pencil_square.erb +3 -0
  418. data/lib/karafka/web/ui/views/shared/icons/_play_pause.erb +3 -0
  419. data/lib/karafka/web/ui/views/shared/icons/_plus.erb +3 -0
  420. data/lib/karafka/web/ui/views/shared/icons/_trash.erb +3 -0
  421. data/lib/karafka/web/ui/views/status/failures/_live_reporting.erb +1 -1
  422. data/lib/karafka/web/ui/views/status/failures/_partitions.erb +3 -3
  423. data/lib/karafka/web/ui/views/status/failures/_state_calculation.erb +2 -2
  424. data/lib/karafka/web/ui/views/status/info/_components.erb +6 -6
  425. data/lib/karafka/web/ui/views/status/show.erb +15 -0
  426. data/lib/karafka/web/ui/views/status/warnings/_consumers_schemas.erb +31 -0
  427. data/lib/karafka/web/ui/views/ux/_icons.erb +1 -1
  428. data/lib/karafka/web/ui/views/ux/_status_rows.erb +6 -0
  429. data/lib/karafka/web/version.rb +1 -1
  430. data/lib/karafka/web.rb +9 -1
  431. data/package-lock.json +799 -1226
  432. data/package.json +3 -4
  433. data/postcss.config.js +1 -2
  434. data/renovate.json +13 -1
  435. data/tailwind.config.js +0 -4
  436. data.tar.gz.sig +0 -0
  437. metadata +233 -109
  438. metadata.gz.sig +0 -0
  439. data/lib/karafka/web/pro/commanding/commands/quiet.rb +0 -34
  440. data/lib/karafka/web/pro/commanding/commands/stop.rb +0 -34
  441. data/lib/karafka/web/pro/commanding/commands/trace.rb +0 -41
  442. data/lib/karafka/web/pro/ui/controllers/commanding_controller.rb +0 -118
  443. data/lib/karafka/web/pro/ui/controllers/commands_controller.rb +0 -96
  444. data/lib/karafka/web/pro/ui/controllers/consumers_controller.rb +0 -138
  445. data/lib/karafka/web/pro/ui/controllers/explorer_controller.rb +0 -220
  446. data/lib/karafka/web/pro/ui/controllers/messages_controller.rb +0 -107
  447. data/lib/karafka/web/pro/ui/controllers/search_controller.rb +0 -73
  448. data/lib/karafka/web/pro/ui/controllers/topics_controller.rb +0 -130
  449. data/lib/karafka/web/pro/ui/views/commands/_breadcrumbs.erb +0 -21
  450. data/lib/karafka/web/pro/ui/views/commands/_command_details.erb +0 -1
  451. data/lib/karafka/web/pro/ui/views/commands/_empty.erb +0 -3
  452. data/lib/karafka/web/pro/ui/views/commands/show.erb +0 -33
  453. data/lib/karafka/web/pro/ui/views/consumers/_breadcrumbs.erb +0 -55
  454. data/lib/karafka/web/pro/ui/views/consumers/_consumer.erb +0 -47
  455. data/lib/karafka/web/pro/ui/views/consumers/_consumer_controls.erb +0 -95
  456. data/lib/karafka/web/pro/ui/views/consumers/_consumer_performance.erb +0 -59
  457. data/lib/karafka/web/pro/ui/views/consumers/_tabs.erb +0 -33
  458. data/lib/karafka/web/pro/ui/views/consumers/consumer/_commands.erb +0 -72
  459. data/lib/karafka/web/pro/ui/views/consumers/consumer/_consumer_group.erb +0 -8
  460. data/lib/karafka/web/pro/ui/views/consumers/consumer/_no_subscriptions.erb +0 -7
  461. data/lib/karafka/web/pro/ui/views/consumers/details.erb +0 -13
  462. data/lib/karafka/web/pro/ui/views/consumers/subscriptions.erb +0 -25
  463. data/lib/karafka/web/pro/ui/views/explorer/_no_topics.erb +0 -1
  464. data/lib/karafka/web/pro/ui/views/explorer/_topic.erb +0 -10
  465. data/lib/karafka/web/pro/ui/views/explorer/index.erb +0 -14
  466. data/lib/karafka/web/pro/ui/views/explorer/messages/_headers.erb +0 -33
  467. data/lib/karafka/web/pro/ui/views/explorer/partition/_cleaned.erb +0 -3
  468. data/lib/karafka/web/pro/ui/views/explorer/partition/_empty.erb +0 -3
  469. data/lib/karafka/web/pro/ui/views/explorer/topic/_empty.erb +0 -3
  470. data/lib/karafka/web/pro/ui/views/search/_breadcrumbs.erb +0 -1
  471. data/lib/karafka/web/pro/ui/views/search/_fix_errors.erb +0 -3
  472. data/lib/karafka/web/pro/ui/views/search/_no_results.erb +0 -3
  473. data/lib/karafka/web/pro/ui/views/search/_timeout.erb +0 -3
  474. data/lib/karafka/web/pro/ui/views/search/index.erb +0 -29
  475. data/lib/karafka/web/pro/ui/views/topics/_breadcrumbs.erb +0 -45
  476. data/lib/karafka/web/pro/ui/views/topics/_partition_offsets.erb +0 -10
  477. data/lib/karafka/web/pro/ui/views/topics/_topic.erb +0 -9
  478. data/lib/karafka/web/pro/ui/views/topics/distribution/_empty_partitions.erb +0 -1
  479. data/lib/karafka/web/pro/ui/views/topics/distribution/_partition.erb +0 -10
  480. data/lib/karafka/web/pro/ui/views/topics/index.erb +0 -14
  481. data/lib/karafka/web/ui/lib/ttl_cache.rb +0 -82
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the explorer related routes
12
+ class Explorer < Base
13
+ route do |r|
14
+ r.on 'explorer' do
15
+ r.get String, 'search' do |topic_id|
16
+ # Search has it's own controller but we want to have this in the explorer routing
17
+ # namespace because topic search is conceptually part of the explorer
18
+ controller = build(Controllers::Explorer::SearchController)
19
+ controller.index(topic_id)
20
+ end
21
+
22
+ r.on 'messages' do
23
+ controller = build(Controllers::Explorer::MessagesController)
24
+
25
+ r.get(
26
+ String, :partition_id, Integer, 'forward'
27
+ ) do |topic_id, partition_id, offset|
28
+ controller.forward(topic_id, partition_id, offset)
29
+ end
30
+
31
+ r.post(
32
+ String, :partition_id, Integer, 'republish'
33
+ ) do |topic_id, partition_id, offset|
34
+ controller.republish(topic_id, partition_id, offset)
35
+ end
36
+
37
+ r.get(
38
+ String, :partition_id, Integer, 'download'
39
+ ) do |topic_id, partition_id, offset|
40
+ controller.download(topic_id, partition_id, offset)
41
+ end
42
+
43
+ r.get(
44
+ String, :partition_id, Integer, 'export'
45
+ ) do |topic_id, partition_id, offset|
46
+ controller.export(topic_id, partition_id, offset)
47
+ end
48
+ end
49
+
50
+ r.on 'topics' do
51
+ controller = build(Controllers::Explorer::ExplorerController)
52
+
53
+ r.get String, :partition_id, 'recent' do |topic_id, partition_id|
54
+ controller.recent(topic_id, partition_id)
55
+ end
56
+
57
+ r.get(
58
+ String, :partition_id, Integer, 'surrounding'
59
+ ) do |topic_id, partition_id, offset|
60
+ controller.surrounding(topic_id, partition_id, offset)
61
+ end
62
+
63
+ r.get String, 'recent' do |topic_id|
64
+ controller.recent(topic_id, nil)
65
+ end
66
+
67
+ # Jumps to offset matching the expected time
68
+ r.get String, :partition_id, 'closest', Time do |topic_id, partition_id, time|
69
+ controller.closest(topic_id, partition_id, time)
70
+ end
71
+
72
+ # Jumps to the offset matching the expected timestamp
73
+ r.get(
74
+ String, :partition_id, 'closest', Integer
75
+ ) do |topic_id, partition_id, timestamp|
76
+ # To simplify we just convert timestamp to time with ms precision
77
+ time = Time.at(timestamp / 1_000.0)
78
+ controller.closest(topic_id, partition_id, time)
79
+ end
80
+
81
+ r.get String, :partition_id, Integer do |topic_id, partition_id, offset|
82
+ # If when viewing given message we get an offset of different message, we should
83
+ # redirect there. This allows us to support pagination with the current engine
84
+ if params.current_offset != -1
85
+ r.redirect explorer_topics_path(
86
+ topic_id,
87
+ partition_id,
88
+ params.current_offset
89
+ )
90
+ else
91
+ controller.show(topic_id, partition_id, offset)
92
+ end
93
+ end
94
+
95
+ r.get String, :partition_id do |topic_id, partition_id|
96
+ controller.partition(topic_id, partition_id)
97
+ end
98
+
99
+ r.get String do |topic_id|
100
+ controller.topic(topic_id)
101
+ end
102
+
103
+ r.get do
104
+ controller.index
105
+ end
106
+ end
107
+
108
+ r.get do
109
+ r.redirect root_path('explorer/topics')
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the health related routes
12
+ class Health < Base
13
+ route do |r|
14
+ r.on 'health' do
15
+ controller = build(Controllers::HealthController)
16
+
17
+ r.get 'lags' do
18
+ controller.lags
19
+ end
20
+
21
+ r.get 'cluster_lags' do
22
+ controller.cluster_lags
23
+ end
24
+
25
+ r.get 'offsets' do
26
+ controller.offsets
27
+ end
28
+
29
+ r.get 'overview' do
30
+ controller.overview
31
+ end
32
+
33
+ r.get 'changes' do
34
+ controller.changes
35
+ end
36
+
37
+ r.get do
38
+ r.redirect root_path('health/overview')
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the jobs related routes
12
+ class Jobs < Base
13
+ route do |r|
14
+ r.on 'jobs' do
15
+ controller = build(Controllers::JobsController)
16
+
17
+ r.get 'running' do
18
+ controller.running
19
+ end
20
+
21
+ r.get 'pending' do
22
+ controller.pending
23
+ end
24
+
25
+ r.redirect root_path('jobs/running')
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the recurring tasks feature related routes
12
+ class RecurringTasks < Base
13
+ route do |r|
14
+ r.on 'recurring_tasks' do
15
+ controller = build(Controllers::RecurringTasksController)
16
+
17
+ r.get 'schedule' do
18
+ controller.schedule
19
+ end
20
+
21
+ r.get 'logs' do
22
+ controller.logs
23
+ end
24
+
25
+ r.post 'trigger_all' do
26
+ controller.trigger_all
27
+ end
28
+
29
+ r.post 'enable_all' do
30
+ controller.enable_all
31
+ end
32
+
33
+ r.post 'disable_all' do
34
+ controller.disable_all
35
+ end
36
+
37
+ r.post String, 'trigger' do |task_id|
38
+ controller.trigger(task_id)
39
+ end
40
+
41
+ r.post String, 'enable' do |task_id|
42
+ controller.enable(task_id)
43
+ end
44
+
45
+ r.post String, 'disable' do |task_id|
46
+ controller.disable(task_id)
47
+ end
48
+
49
+ r.get do
50
+ r.redirect root_path('recurring_tasks/schedule')
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the routing related routes
12
+ class Routing < Base
13
+ route do |r|
14
+ r.on 'routing' do
15
+ controller = build(Controllers::RoutingController)
16
+
17
+ r.get String do |topic_id|
18
+ controller.show(topic_id)
19
+ end
20
+
21
+ r.get do
22
+ controller.index
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the scheduled messages feature related routes
12
+ class ScheduledMessages < Base
13
+ route do |r|
14
+ r.on 'scheduled_messages' do
15
+ r.on 'schedules' do
16
+ controller = build(Controllers::ScheduledMessages::SchedulesController)
17
+
18
+ r.get String do |topic_id|
19
+ controller.show(topic_id)
20
+ end
21
+
22
+ r.get do
23
+ controller.index
24
+ end
25
+ end
26
+
27
+ r.on 'explorer' do
28
+ r.on 'topics' do
29
+ controller = build(Controllers::ScheduledMessages::ExplorerController)
30
+
31
+ r.get String do |topic_id|
32
+ controller.topic(topic_id)
33
+ end
34
+
35
+ r.get String, :partition_id do |topic_id, partition_id|
36
+ controller.partition(topic_id, partition_id)
37
+ end
38
+
39
+ # Jumps to offset matching the expected time
40
+ r.get String, :partition_id, 'closest', Time do |topic_id, partition_id, time|
41
+ controller.closest(topic_id, partition_id, time)
42
+ end
43
+
44
+ # Jumps to the offset matching the expected timestamp
45
+ r.get(
46
+ String, :partition_id, 'closest', Integer
47
+ ) do |topic_id, partition_id, timestamp|
48
+ # To simplify we just convert timestamp to time with ms precision
49
+ time = Time.at(timestamp / 1_000.0)
50
+ controller.closest(topic_id, partition_id, time)
51
+ end
52
+ end
53
+ end
54
+
55
+ r.on 'messages' do
56
+ controller = build(Controllers::ScheduledMessages::MessagesController)
57
+
58
+ r.post(
59
+ String, :partition_id, Integer, 'cancel'
60
+ ) do |topic_id, partition_id, message_offset|
61
+ controller.cancel(topic_id, partition_id, message_offset)
62
+ end
63
+ end
64
+
65
+ r.get do
66
+ r.redirect root_path('scheduled_messages/schedules')
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the status related routes
12
+ class Status < Base
13
+ route do |r|
14
+ r.get 'status' do
15
+ controller = build(Controllers::StatusController)
16
+ controller.show
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the support related routes
12
+ class Support < Base
13
+ route do |r|
14
+ r.get 'support' do
15
+ controller = build(Controllers::SupportController)
16
+ controller.show
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the topics related routes
12
+ class Topics < Base
13
+ route do |r|
14
+ r.on 'topics' do
15
+ r.on String, 'distribution' do |topic_id|
16
+ controller = build(Controllers::Topics::DistributionsController)
17
+
18
+ r.get 'edit' do
19
+ controller.edit(topic_id)
20
+ end
21
+
22
+ r.put do
23
+ controller.update(topic_id)
24
+ end
25
+
26
+ r.get do
27
+ controller.show(topic_id)
28
+ end
29
+ end
30
+
31
+ r.get String, 'replication' do |topic_id|
32
+ controller = build(Controllers::Topics::ReplicationsController)
33
+ controller.show(topic_id)
34
+ end
35
+
36
+ r.get String, 'offsets' do |topic_id|
37
+ controller = build(Controllers::Topics::OffsetsController)
38
+ controller.show(topic_id)
39
+ end
40
+
41
+ r.on String, 'config' do |topic_id|
42
+ controller = build(Controllers::Topics::ConfigsController)
43
+
44
+ r.get String, 'edit' do |property_name|
45
+ controller.edit(topic_id, property_name)
46
+ end
47
+
48
+ r.put String do |property_name|
49
+ controller.update(topic_id, property_name)
50
+ end
51
+
52
+ r.get do
53
+ controller.index(topic_id)
54
+ end
55
+ end
56
+
57
+ controller = build(Controllers::Topics::TopicsController)
58
+
59
+ r.get 'new' do
60
+ controller.new
61
+ end
62
+
63
+ r.post do
64
+ controller.create
65
+ end
66
+
67
+ # Topic removal confirmation page since it's a sensitive operation
68
+ r.get String, 'delete' do |topic_id|
69
+ controller.edit(topic_id)
70
+ end
71
+
72
+ r.delete String do |topic_id|
73
+ controller.delete(topic_id)
74
+ end
75
+
76
+ r.get do
77
+ controller.index
78
+ end
79
+
80
+ r.get String do |topic_id|
81
+ r.redirect root_path('topics', topic_id, 'config')
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is part of Karafka Pro, a commercial component not licensed under LGPL.
4
+ # See LICENSE for details.
5
+
6
+ module Karafka
7
+ module Web
8
+ module Pro
9
+ module Ui
10
+ module Routes
11
+ # Manages the UX controller routes
12
+ class Ux < Base
13
+ route do |r|
14
+ r.get 'ux' do
15
+ controller = build(Controllers::UxController)
16
+ controller.show
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <li>
2
5
  <a href="<%= root_path('cluster') %>">
3
6
  Cluster informations
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <tr>
2
5
  <td>
3
6
  <a href="<%= root_path('cluster', broker.id) %>">
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <tr>
2
5
  <td class="wrap-text">
3
6
  <% all_names = ([config.name] + config.synonyms.map(&:name)).uniq %>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <div class="tab-container-wrapper">
2
5
  <div class="tab-container">
3
6
  <a
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% view_title 'Cluster Informations' %>
2
5
 
3
6
  <%== partial 'cluster/tabs' %>
@@ -7,7 +10,7 @@
7
10
  <table class="data-table">
8
11
  <thead>
9
12
  <tr>
10
- <th><%== sort_link(:id) %></th>
13
+ <th><%== sort_link('Node ID', :id) %></th>
11
14
  <th><%== sort_link(:name) %></th>
12
15
  <th><%== sort_link(:port) %></th>
13
16
  </tr>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% view_title @broker.full_name %>
2
5
 
3
6
  <div class="data-table-wrapper">
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <h3 class="h3 mt-6">
2
5
  <%= backtrace[:label] %>
3
6
  </h3>
@@ -0,0 +1,24 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
4
+ <li>
5
+ <a href="<%= consumers_path('overview') %>">
6
+ Consumers
7
+ </a>
8
+ </li>
9
+
10
+ <% if current_path.include?('/commands') %>
11
+ <li>
12
+ <a href="<%= consumers_path('commands') %>">
13
+ Commands
14
+ </a>
15
+ </li>
16
+ <% end %>
17
+
18
+ <% if @command_message %>
19
+ <li>
20
+ <a href="<%= consumers_path('commands', @command_message.offset) %>">
21
+ <%= @command_message.offset %>
22
+ </a>
23
+ </li>
24
+ <% end %>
@@ -1,3 +1,6 @@
1
+ <%# This code is part of Karafka Pro, a commercial component not licensed under LGPL. %>
2
+ <%# See LICENSE for details. %>
3
+
1
4
  <% if command_message.is_a?(Array) %>
2
5
  <%== partial 'shared/not_a_message' %>
3
6
  <% else %>
@@ -6,7 +9,13 @@
6
9
  <% if command[:schema_version] == @schema_version %>
7
10
  <tr>
8
11
  <td>
9
- <% color = command[:type] == 'result' ? 'success' : 'primary' %>
12
+ <%
13
+ type = command[:type]
14
+ color = 'primary'
15
+ color = 'success' if type == 'result'
16
+ color = 'secondary' if type == 'acceptance'
17
+ %>
18
+
10
19
  <span class="badge badge-<%= color %>">
11
20
  <%= command[:type] %>
12
21
  </span>
@@ -14,13 +23,20 @@
14
23
 
15
24
  <td>
16
25
  <%
26
+ scope = ::Karafka::Web::Pro::Commanding::Commands
17
27
  color = case command[:command][:name]
18
- when 'trace'
28
+ when scope::Consumers::Trace.name
19
29
  'info'
20
- when 'quiet'
30
+ when scope::Consumers::Quiet.name
21
31
  'warning'
22
- when 'stop'
32
+ when scope::Consumers::Stop.name
23
33
  'error'
34
+ when scope::Partitions::Seek.name
35
+ 'primary'
36
+ when scope::Partitions::Pause.name
37
+ 'warning'
38
+ when scope::Partitions::Resume.name
39
+ 'warning'
24
40
  else
25
41
  'secondary'
26
42
  end
@@ -34,7 +50,7 @@
34
50
  <% if command[:process][:id] == '*' %>
35
51
  *
36
52
  <% else %>
37
- <a href="<%= root_path('consumers', command[:process][:id], 'subscriptions') %>">
53
+ <a href="<%= consumer_path(command[:process][:id], 'subscriptions') %>">
38
54
  <%= truncate(command[:process][:id], strategy: :middle) %>
39
55
  </a>
40
56
  <% end %>
@@ -45,7 +61,7 @@
45
61
  </td>
46
62
 
47
63
  <td>
48
- <a href="<%= root_path('commands', command_message.offset) %>" class="btn btn-sm btn-primary">
64
+ <a href="<%= consumers_path('commands', command_message.offset) %>" class="btn btn-sm btn-primary">
49
65
  Details
50
66
  </a>
51
67
  </td>