karafka-web 0.9.2 → 0.10.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 (417) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.github/workflows/ci.yml +30 -0
  4. data/.gitignore +2 -0
  5. data/.ruby-version +1 -1
  6. data/CHANGELOG.md +84 -3
  7. data/Gemfile +1 -0
  8. data/Gemfile.lock +30 -25
  9. data/LICENSE +1 -1
  10. data/bin/build_assets +51 -0
  11. data/bin/release +6 -0
  12. data/config/locales/pro_errors.yml +18 -0
  13. data/docker-compose.yml +1 -1
  14. data/gulpfile.js +73 -0
  15. data/karafka-web.gemspec +7 -2
  16. data/lib/karafka/web/config.rb +9 -10
  17. data/lib/karafka/web/contracts/base.rb +2 -0
  18. data/lib/karafka/web/contracts/config.rb +2 -1
  19. data/lib/karafka/web/errors.rb +12 -0
  20. data/lib/karafka/web/inflector.rb +1 -1
  21. data/lib/karafka/web/management/actions/enable.rb +11 -0
  22. data/lib/karafka/web/management/migrations/consumers_metrics/0_set_initial.rb +39 -0
  23. data/lib/karafka/web/management/migrations/consumers_metrics/1699543515_fill_missing_received_and_sent_bytes.rb +28 -0
  24. data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_introduce_waiting.rb +26 -0
  25. data/lib/karafka/web/management/migrations/consumers_metrics/1700234522_remove_processing.rb +26 -0
  26. data/lib/karafka/web/management/migrations/consumers_metrics/1704722380_split_listeners_into_active_and_paused.rb +38 -0
  27. data/lib/karafka/web/management/migrations/consumers_metrics/1706607960_introduce_lag_total.rb +40 -0
  28. data/lib/karafka/web/management/migrations/consumers_metrics/1706611396_rename_lag_total_to_lag_hybrid.rb +38 -0
  29. data/lib/karafka/web/management/migrations/consumers_metrics/1716218393_populate_jobs_metrics.rb +26 -0
  30. data/lib/karafka/web/management/migrations/consumers_states/0_set_initial.rb +46 -0
  31. data/lib/karafka/web/management/migrations/consumers_states/1699543515_fill_missing_received_and_sent_bytes.rb +25 -0
  32. data/lib/karafka/web/management/migrations/consumers_states/1700234522_introduce_waiting.rb +22 -0
  33. data/lib/karafka/web/management/migrations/consumers_states/1700234522_remove_processing.rb +22 -0
  34. data/lib/karafka/web/management/migrations/consumers_states/1704722380_split_listeners_into_active_and_paused.rb +34 -0
  35. data/lib/karafka/web/management/migrations/consumers_states/1706607960_introduce_lag_total.rb +24 -0
  36. data/lib/karafka/web/management/migrations/consumers_states/1706611396_rename_lag_total_to_lag_hybrid.rb +23 -0
  37. data/lib/karafka/web/management/migrations/consumers_states/1716218393_add_jobs_counter.rb +24 -0
  38. data/lib/karafka/web/management/migrator.rb +5 -5
  39. data/lib/karafka/web/pro/commanding/commands/base.rb +8 -0
  40. data/lib/karafka/web/pro/commanding/commands/quiet.rb +4 -1
  41. data/lib/karafka/web/pro/commanding/commands/stop.rb +4 -1
  42. data/lib/karafka/web/pro/loader.rb +8 -0
  43. data/lib/karafka/web/pro/ui/app.rb +44 -7
  44. data/lib/karafka/web/pro/ui/controllers/dlq_controller.rb +1 -1
  45. data/lib/karafka/web/pro/ui/controllers/errors_controller.rb +1 -0
  46. data/lib/karafka/web/pro/ui/controllers/explorer_controller.rb +6 -14
  47. data/lib/karafka/web/pro/ui/controllers/messages_controller.rb +5 -4
  48. data/lib/karafka/web/pro/ui/controllers/search_controller.rb +73 -0
  49. data/lib/karafka/web/pro/ui/controllers/support_controller.rb +26 -0
  50. data/lib/karafka/web/pro/ui/controllers/topics_controller.rb +31 -0
  51. data/lib/karafka/web/pro/ui/controllers/ux_controller.rb +26 -0
  52. data/lib/karafka/web/pro/ui/lib/policies/config.rb +39 -0
  53. data/lib/karafka/web/pro/ui/lib/policies/contracts/config.rb +46 -0
  54. data/lib/karafka/web/pro/ui/lib/policies/messages.rb +76 -0
  55. data/lib/karafka/web/pro/ui/lib/policies/requests.rb +36 -0
  56. data/lib/karafka/web/pro/ui/lib/policies.rb +34 -0
  57. data/lib/karafka/web/pro/ui/lib/safe_runner.rb +98 -0
  58. data/lib/karafka/web/pro/ui/lib/search/config.rb +53 -0
  59. data/lib/karafka/web/pro/ui/lib/search/contracts/config.rb +101 -0
  60. data/lib/karafka/web/pro/ui/lib/search/contracts/form.rb +111 -0
  61. data/lib/karafka/web/pro/ui/lib/search/matchers/base.rb +59 -0
  62. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_header_includes.rb +57 -0
  63. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_key_includes.rb +41 -0
  64. data/lib/karafka/web/pro/ui/lib/search/matchers/raw_payload_includes.rb +45 -0
  65. data/lib/karafka/web/pro/ui/lib/search/normalizer.rb +47 -0
  66. data/lib/karafka/web/pro/ui/lib/search/runner.rb +230 -0
  67. data/lib/karafka/web/pro/ui/lib/search.rb +36 -0
  68. data/lib/karafka/web/pro/ui/views/cluster/_breadcrumbs.erb +4 -4
  69. data/lib/karafka/web/pro/ui/views/cluster/_tabs.erb +14 -24
  70. data/lib/karafka/web/pro/ui/views/cluster/index.erb +20 -22
  71. data/lib/karafka/web/pro/ui/views/cluster/show.erb +21 -25
  72. data/lib/karafka/web/pro/ui/views/commands/_backtrace.erb +4 -19
  73. data/lib/karafka/web/pro/ui/views/commands/_breadcrumbs.erb +3 -3
  74. data/lib/karafka/web/pro/ui/views/commands/_command.erb +6 -6
  75. data/lib/karafka/web/pro/ui/views/commands/_command_details.erb +1 -11
  76. data/lib/karafka/web/pro/ui/views/commands/_incompatible_schema.erb +3 -14
  77. data/lib/karafka/web/pro/ui/views/commands/_metadata.erb +33 -42
  78. data/lib/karafka/web/pro/ui/views/commands/_table.erb +9 -3
  79. data/lib/karafka/web/pro/ui/views/commands/index.erb +18 -12
  80. data/lib/karafka/web/pro/ui/views/commands/show.erb +24 -29
  81. data/lib/karafka/web/pro/ui/views/consumers/_breadcrumbs.erb +8 -8
  82. data/lib/karafka/web/pro/ui/views/consumers/_consumer.erb +13 -23
  83. data/lib/karafka/web/pro/ui/views/consumers/_consumer_controls.erb +51 -35
  84. data/lib/karafka/web/pro/ui/views/consumers/_consumer_performance.erb +1 -1
  85. data/lib/karafka/web/pro/ui/views/consumers/_tabs.erb +28 -30
  86. data/lib/karafka/web/pro/ui/views/consumers/consumer/_commands.erb +68 -28
  87. data/lib/karafka/web/pro/ui/views/consumers/consumer/_job.erb +1 -1
  88. data/lib/karafka/web/pro/ui/views/consumers/consumer/_metrics.erb +114 -133
  89. data/lib/karafka/web/pro/ui/views/consumers/consumer/_partition.erb +4 -4
  90. data/lib/karafka/web/pro/ui/views/consumers/consumer/_stopped.erb +6 -9
  91. data/lib/karafka/web/pro/ui/views/consumers/consumer/_subscription_group.erb +116 -126
  92. data/lib/karafka/web/pro/ui/views/consumers/consumer/_tabs.erb +26 -31
  93. data/lib/karafka/web/pro/ui/views/consumers/controls.erb +53 -57
  94. data/lib/karafka/web/pro/ui/views/consumers/details.erb +4 -17
  95. data/lib/karafka/web/pro/ui/views/consumers/index.erb +31 -34
  96. data/lib/karafka/web/pro/ui/views/consumers/pending_jobs.erb +41 -46
  97. data/lib/karafka/web/pro/ui/views/consumers/performance.erb +43 -47
  98. data/lib/karafka/web/pro/ui/views/consumers/running_jobs.erb +41 -46
  99. data/lib/karafka/web/pro/ui/views/consumers/subscriptions.erb +14 -17
  100. data/lib/karafka/web/pro/ui/views/dashboard/index.erb +67 -76
  101. data/lib/karafka/web/pro/ui/views/dlq/_breadcrumbs.erb +1 -1
  102. data/lib/karafka/web/pro/ui/views/dlq/_no_topics.erb +1 -7
  103. data/lib/karafka/web/pro/ui/views/dlq/_topic.erb +7 -10
  104. data/lib/karafka/web/pro/ui/views/dlq/index.erb +8 -10
  105. data/lib/karafka/web/pro/ui/views/errors/_breadcrumbs.erb +3 -3
  106. data/lib/karafka/web/pro/ui/views/errors/_error.erb +8 -5
  107. data/lib/karafka/web/pro/ui/views/errors/_selector.erb +12 -0
  108. data/lib/karafka/web/pro/ui/views/errors/_table.erb +5 -4
  109. data/lib/karafka/web/pro/ui/views/errors/index.erb +50 -15
  110. data/lib/karafka/web/pro/ui/views/errors/partition.erb +61 -14
  111. data/lib/karafka/web/pro/ui/views/errors/show.erb +28 -46
  112. data/lib/karafka/web/pro/ui/views/explorer/_breadcrumbs.erb +11 -3
  113. data/lib/karafka/web/pro/ui/views/explorer/_failed_deserialization.erb +8 -3
  114. data/lib/karafka/web/pro/ui/views/explorer/_message.erb +12 -6
  115. data/lib/karafka/web/pro/ui/views/explorer/_no_topics.erb +1 -5
  116. data/lib/karafka/web/pro/ui/views/explorer/_selector.erb +12 -0
  117. data/lib/karafka/web/pro/ui/views/explorer/_topic.erb +6 -8
  118. data/lib/karafka/web/pro/ui/views/explorer/index.erb +13 -15
  119. data/lib/karafka/web/pro/ui/views/explorer/message/_metadata.erb +68 -32
  120. data/lib/karafka/web/pro/ui/views/explorer/message/_payload.erb +17 -16
  121. data/lib/karafka/web/pro/ui/views/explorer/message/_resources_utilization.erb +127 -0
  122. data/lib/karafka/web/pro/ui/views/explorer/message/_too_big_to_be_displayed.erb +20 -0
  123. data/lib/karafka/web/pro/ui/views/explorer/messages/_detail.erb +1 -1
  124. data/lib/karafka/web/pro/ui/views/explorer/partition/_cleaned.erb +3 -5
  125. data/lib/karafka/web/pro/ui/views/explorer/partition/_empty.erb +3 -5
  126. data/lib/karafka/web/pro/ui/views/explorer/partition/_messages.erb +6 -3
  127. data/lib/karafka/web/pro/ui/views/explorer/partition.erb +67 -46
  128. data/lib/karafka/web/pro/ui/views/explorer/show.erb +85 -21
  129. data/lib/karafka/web/pro/ui/views/explorer/topic/_actions.erb +27 -0
  130. data/lib/karafka/web/pro/ui/views/explorer/topic/_empty.erb +3 -5
  131. data/lib/karafka/web/pro/ui/views/explorer/topic/_limited.erb +8 -10
  132. data/lib/karafka/web/pro/ui/views/explorer/topic.erb +24 -44
  133. data/lib/karafka/web/pro/ui/views/health/_breadcrumbs.erb +7 -7
  134. data/lib/karafka/web/pro/ui/views/health/_no_data.erb +1 -7
  135. data/lib/karafka/web/pro/ui/views/health/_partition.erb +3 -3
  136. data/lib/karafka/web/pro/ui/views/health/_partition_lags.erb +3 -3
  137. data/lib/karafka/web/pro/ui/views/health/_partition_offset.erb +2 -2
  138. data/lib/karafka/web/pro/ui/views/health/_partition_times.erb +3 -7
  139. data/lib/karafka/web/pro/ui/views/health/_table_metadata.erb +8 -0
  140. data/lib/karafka/web/pro/ui/views/health/_tabs.erb +32 -49
  141. data/lib/karafka/web/pro/ui/views/health/changes.erb +51 -51
  142. data/lib/karafka/web/pro/ui/views/health/cluster_lags.erb +28 -41
  143. data/lib/karafka/web/pro/ui/views/health/lags.erb +52 -52
  144. data/lib/karafka/web/pro/ui/views/health/offsets.erb +55 -55
  145. data/lib/karafka/web/pro/ui/views/health/overview.erb +60 -60
  146. data/lib/karafka/web/pro/ui/views/jobs/_job.erb +1 -1
  147. data/lib/karafka/web/pro/ui/views/jobs/_no_jobs.erb +1 -7
  148. data/lib/karafka/web/pro/ui/views/jobs/pending.erb +36 -38
  149. data/lib/karafka/web/pro/ui/views/jobs/running.erb +36 -38
  150. data/lib/karafka/web/pro/ui/views/routing/_consumer_group.erb +7 -12
  151. data/lib/karafka/web/pro/ui/views/routing/_topic.erb +13 -11
  152. data/lib/karafka/web/pro/ui/views/routing/index.erb +7 -9
  153. data/lib/karafka/web/pro/ui/views/routing/show.erb +41 -33
  154. data/lib/karafka/web/pro/ui/views/search/_fix_errors.erb +3 -0
  155. data/lib/karafka/web/pro/ui/views/search/_metadata.erb +71 -0
  156. data/lib/karafka/web/pro/ui/views/search/_no_results.erb +3 -0
  157. data/lib/karafka/web/pro/ui/views/search/_no_search_criteria.erb +5 -0
  158. data/lib/karafka/web/pro/ui/views/search/_search_criteria.erb +37 -0
  159. data/lib/karafka/web/pro/ui/views/search/_search_modal.erb +139 -0
  160. data/lib/karafka/web/pro/ui/views/search/_timeout.erb +3 -0
  161. data/lib/karafka/web/pro/ui/views/search/index.erb +29 -0
  162. data/lib/karafka/web/pro/ui/views/shared/_navigation.erb +80 -28
  163. data/lib/karafka/web/pro/ui/views/topics/_breadcrumbs.erb +14 -6
  164. data/lib/karafka/web/pro/ui/views/topics/_partition_offsets.erb +10 -0
  165. data/lib/karafka/web/pro/ui/views/topics/_tabs.erb +26 -32
  166. data/lib/karafka/web/pro/ui/views/topics/_topic.erb +7 -10
  167. data/lib/karafka/web/pro/ui/views/topics/config.erb +21 -25
  168. data/lib/karafka/web/pro/ui/views/topics/distribution/_badges.erb +10 -5
  169. data/lib/karafka/web/pro/ui/views/topics/distribution/_chart.erb +3 -1
  170. data/lib/karafka/web/pro/ui/views/topics/distribution/_limited.erb +1 -1
  171. data/lib/karafka/web/pro/ui/views/topics/distribution.erb +34 -39
  172. data/lib/karafka/web/pro/ui/views/topics/index.erb +13 -15
  173. data/lib/karafka/web/pro/ui/views/topics/offsets.erb +24 -0
  174. data/lib/karafka/web/pro/ui/views/topics/replication.erb +20 -24
  175. data/lib/karafka/web/processing/consumers/aggregators/metrics.rb +1 -1
  176. data/lib/karafka/web/processing/consumers/aggregators/state.rb +1 -1
  177. data/lib/karafka/web/processing/consumers/contracts/aggregated_stats.rb +1 -0
  178. data/lib/karafka/web/tracking/consumers/contracts/report.rb +6 -0
  179. data/lib/karafka/web/tracking/consumers/listeners/connections.rb +8 -6
  180. data/lib/karafka/web/tracking/consumers/listeners/processing.rb +2 -0
  181. data/lib/karafka/web/tracking/consumers/listeners/tags.rb +1 -1
  182. data/lib/karafka/web/tracking/consumers/reporter.rb +6 -8
  183. data/lib/karafka/web/tracking/consumers/sampler.rb +16 -5
  184. data/lib/karafka/web/ui/app.rb +20 -1
  185. data/lib/karafka/web/ui/base.rb +26 -20
  186. data/lib/karafka/web/ui/controllers/base_controller.rb +6 -4
  187. data/lib/karafka/web/ui/controllers/dashboard_controller.rb +8 -0
  188. data/lib/karafka/web/ui/controllers/requests/params.rb +16 -2
  189. data/lib/karafka/web/ui/controllers/support_controller.rb +17 -0
  190. data/lib/karafka/web/ui/controllers/ux_controller.rb +17 -0
  191. data/lib/karafka/web/ui/helpers/application_helper.rb +75 -42
  192. data/lib/karafka/web/ui/helpers/paths_helper.rb +24 -0
  193. data/lib/karafka/web/ui/helpers/tailwind_helper.rb +90 -0
  194. data/lib/karafka/web/ui/lib/sorter.rb +1 -1
  195. data/lib/karafka/web/ui/models/metrics/aggregated.rb +1 -0
  196. data/lib/karafka/web/ui/models/metrics/charts/topics.rb +36 -20
  197. data/lib/karafka/web/ui/models/status.rb +28 -1
  198. data/lib/karafka/web/ui/public/images/calendar.svg +3 -0
  199. data/lib/karafka/web/ui/public/javascripts/application.js +39 -15
  200. data/lib/karafka/web/ui/public/javascripts/application.min.js +64 -0
  201. data/lib/karafka/web/ui/public/javascripts/application.min.js.br +0 -0
  202. data/lib/karafka/web/ui/public/javascripts/application.min.js.gz +0 -0
  203. data/lib/karafka/web/ui/public/javascripts/charts/types/line.js +41 -9
  204. data/lib/karafka/web/ui/public/javascripts/components/btn_toggle_manager.js +37 -0
  205. data/lib/karafka/web/ui/public/javascripts/{live_poll.js → components/live_poll.js} +44 -8
  206. data/lib/karafka/web/ui/public/javascripts/{offset_datetime.js → components/offset_datetime.js} +1 -1
  207. data/lib/karafka/web/ui/public/javascripts/components/search.js +102 -0
  208. data/lib/karafka/web/ui/public/javascripts/components/tabs_manager.js +84 -0
  209. data/lib/karafka/web/ui/public/javascripts/components/theme_manager.js +59 -0
  210. data/lib/karafka/web/ui/public/javascripts/components/turbo_tracker.js +30 -0
  211. data/lib/karafka/web/ui/public/javascripts/libs/datepicker.js +2 -2
  212. data/lib/karafka/web/ui/public/javascripts/libs/turbo.js +6618 -0
  213. data/lib/karafka/web/ui/public/stylesheets/application.css +16 -113
  214. data/lib/karafka/web/ui/public/stylesheets/application.min.css +13 -0
  215. data/lib/karafka/web/ui/public/stylesheets/application.min.css.br +0 -0
  216. data/lib/karafka/web/ui/public/stylesheets/application.min.css.gz +0 -0
  217. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css +8 -0
  218. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.br +0 -0
  219. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_dark.min.css.gz +0 -0
  220. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.br +0 -0
  221. data/lib/karafka/web/ui/public/stylesheets/libs/highlight_light.min.css.gz +0 -0
  222. data/lib/karafka/web/ui/public/stylesheets/libs/tailwind.css +391 -0
  223. data/lib/karafka/web/ui/views/cluster/_breadcrumbs.erb +3 -3
  224. data/lib/karafka/web/ui/views/cluster/_tabs.erb +14 -24
  225. data/lib/karafka/web/ui/views/cluster/brokers.erb +20 -22
  226. data/lib/karafka/web/ui/views/cluster/replication.erb +28 -32
  227. data/lib/karafka/web/ui/views/consumers/_assignments_badges.erb +1 -1
  228. data/lib/karafka/web/ui/views/consumers/_breadcrumbs.erb +5 -0
  229. data/lib/karafka/web/ui/views/consumers/_consumer.erb +9 -13
  230. data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +2 -8
  231. data/lib/karafka/web/ui/views/consumers/_summary.erb +34 -45
  232. data/lib/karafka/web/ui/views/consumers/_tabs.erb +35 -0
  233. data/lib/karafka/web/ui/views/consumers/index.erb +31 -33
  234. data/lib/karafka/web/ui/views/dashboard/_counters.erb +76 -0
  235. data/lib/karafka/web/ui/views/dashboard/_feature_pro.erb +6 -2
  236. data/lib/karafka/web/ui/views/dashboard/_not_enough_data.erb +3 -15
  237. data/lib/karafka/web/ui/views/dashboard/_ranges_selector.erb +12 -12
  238. data/lib/karafka/web/ui/views/dashboard/index.erb +78 -52
  239. data/lib/karafka/web/ui/views/errors/_breadcrumbs.erb +2 -2
  240. data/lib/karafka/web/ui/views/errors/_detail.erb +1 -3
  241. data/lib/karafka/web/ui/views/errors/_error.erb +3 -5
  242. data/lib/karafka/web/ui/views/errors/index.erb +34 -44
  243. data/lib/karafka/web/ui/views/errors/show.erb +29 -47
  244. data/lib/karafka/web/ui/views/jobs/_breadcrumbs.erb +3 -3
  245. data/lib/karafka/web/ui/views/jobs/_job.erb +1 -1
  246. data/lib/karafka/web/ui/views/jobs/_no_jobs.erb +1 -7
  247. data/lib/karafka/web/ui/views/jobs/_tabs.erb +14 -24
  248. data/lib/karafka/web/ui/views/jobs/pending.erb +30 -32
  249. data/lib/karafka/web/ui/views/jobs/running.erb +30 -32
  250. data/lib/karafka/web/ui/views/layout.erb +37 -21
  251. data/lib/karafka/web/ui/views/routing/_breadcrumbs.erb +2 -2
  252. data/lib/karafka/web/ui/views/routing/_consumer_group.erb +7 -12
  253. data/lib/karafka/web/ui/views/routing/_topic.erb +3 -5
  254. data/lib/karafka/web/ui/views/routing/index.erb +7 -9
  255. data/lib/karafka/web/ui/views/routing/show.erb +30 -22
  256. data/lib/karafka/web/ui/views/shared/_become_pro.erb +8 -8
  257. data/lib/karafka/web/ui/views/shared/_brand.erb +2 -2
  258. data/lib/karafka/web/ui/views/shared/_breadcrumbs.erb +23 -0
  259. data/lib/karafka/web/ui/views/shared/_content.erb +2 -28
  260. data/lib/karafka/web/ui/views/shared/_controls.erb +15 -0
  261. data/lib/karafka/web/ui/views/shared/_flashes.erb +5 -7
  262. data/lib/karafka/web/ui/views/shared/_header.erb +14 -19
  263. data/lib/karafka/web/ui/views/shared/_navigation.erb +84 -28
  264. data/lib/karafka/web/ui/views/shared/_no_paginated_data.erb +5 -9
  265. data/lib/karafka/web/ui/views/shared/_pagination.erb +11 -11
  266. data/lib/karafka/web/ui/views/shared/_tab_nav.erb +4 -5
  267. data/lib/karafka/web/ui/views/shared/_title.erb +5 -0
  268. data/lib/karafka/web/ui/views/shared/alerts/_box_error.erb +15 -0
  269. data/lib/karafka/web/ui/views/shared/alerts/_box_info.erb +15 -0
  270. data/lib/karafka/web/ui/views/shared/alerts/_box_primary.erb +15 -0
  271. data/lib/karafka/web/ui/views/shared/alerts/_box_secondary.erb +15 -0
  272. data/lib/karafka/web/ui/views/shared/alerts/_box_success.erb +15 -0
  273. data/lib/karafka/web/ui/views/shared/alerts/_box_warning.erb +15 -0
  274. data/lib/karafka/web/ui/views/shared/alerts/_error.erb +4 -0
  275. data/lib/karafka/web/ui/views/shared/alerts/_info.erb +5 -2
  276. data/lib/karafka/web/ui/views/shared/alerts/_primary.erb +4 -0
  277. data/lib/karafka/web/ui/views/shared/alerts/_secondary.erb +4 -0
  278. data/lib/karafka/web/ui/views/shared/alerts/_success.erb +4 -0
  279. data/lib/karafka/web/ui/views/shared/alerts/_warning.erb +4 -0
  280. data/lib/karafka/web/ui/views/shared/charts/_line.erb +1 -1
  281. data/lib/karafka/web/ui/views/shared/exceptions/not_allowed.erb +14 -19
  282. data/lib/karafka/web/ui/views/shared/exceptions/not_found.erb +16 -21
  283. data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +16 -28
  284. data/lib/karafka/web/ui/views/shared/icons/_arrow_down_on_square.erb +3 -0
  285. data/lib/karafka/web/ui/views/shared/icons/_arrow_down_tray.erb +3 -0
  286. data/lib/karafka/web/ui/views/shared/icons/_arrow_on_squares.erb +3 -0
  287. data/lib/karafka/web/ui/views/shared/icons/_arrow_path_rounded.erb +3 -0
  288. data/lib/karafka/web/ui/views/shared/icons/_arrow_uturn_right.erb +3 -0
  289. data/lib/karafka/web/ui/views/shared/icons/_arrows_right_left.erb +3 -0
  290. data/lib/karafka/web/ui/views/shared/icons/_blocks.erb +3 -0
  291. data/lib/karafka/web/ui/views/shared/icons/_book_open.erb +3 -0
  292. data/lib/karafka/web/ui/views/shared/icons/_bug.erb +3 -0
  293. data/lib/karafka/web/ui/views/shared/icons/_burger.erb +14 -0
  294. data/lib/karafka/web/ui/views/shared/icons/_calendar_days.erb +3 -0
  295. data/lib/karafka/web/ui/views/shared/icons/_chart_bar.erb +3 -0
  296. data/lib/karafka/web/ui/views/shared/icons/_check_badge.erb +3 -0
  297. data/lib/karafka/web/ui/views/shared/icons/_check_circle.erb +3 -0
  298. data/lib/karafka/web/ui/views/shared/icons/_circle_stack.erb +3 -0
  299. data/lib/karafka/web/ui/views/shared/icons/_cpu.erb +3 -0
  300. data/lib/karafka/web/ui/views/shared/icons/_document_glass.erb +3 -0
  301. data/lib/karafka/web/ui/views/shared/icons/_exclamation_triangle.erb +3 -0
  302. data/lib/karafka/web/ui/views/shared/icons/_eye.erb +4 -0
  303. data/lib/karafka/web/ui/views/shared/icons/_gear.erb +4 -0
  304. data/lib/karafka/web/ui/views/shared/icons/_github.erb +13 -0
  305. data/lib/karafka/web/ui/views/shared/icons/_globe.erb +3 -0
  306. data/lib/karafka/web/ui/views/shared/icons/_heart.erb +3 -0
  307. data/lib/karafka/web/ui/views/shared/icons/_home.erb +3 -0
  308. data/lib/karafka/web/ui/views/shared/icons/_info_circle.erb +3 -0
  309. data/lib/karafka/web/ui/views/shared/icons/_lifebuoy.erb +3 -0
  310. data/lib/karafka/web/ui/views/shared/icons/_light_bulb.erb +3 -0
  311. data/lib/karafka/web/ui/views/shared/icons/_list_bullets.erb +3 -0
  312. data/lib/karafka/web/ui/views/shared/icons/_magnifying_glass.erb +3 -0
  313. data/lib/karafka/web/ui/views/shared/icons/_moon.erb +3 -0
  314. data/lib/karafka/web/ui/views/shared/icons/_offices.erb +3 -0
  315. data/lib/karafka/web/ui/views/shared/icons/_pause.erb +3 -0
  316. data/lib/karafka/web/ui/views/shared/icons/_pause_circle.erb +3 -0
  317. data/lib/karafka/web/ui/views/shared/icons/_play_circle.erb +4 -0
  318. data/lib/karafka/web/ui/views/shared/icons/_question_circle.erb +3 -0
  319. data/lib/karafka/web/ui/views/shared/icons/_queue_list.erb +3 -0
  320. data/lib/karafka/web/ui/views/shared/icons/_refresh.erb +3 -0
  321. data/lib/karafka/web/ui/views/shared/icons/_slack.erb +16 -0
  322. data/lib/karafka/web/ui/views/shared/icons/_stop.erb +3 -0
  323. data/lib/karafka/web/ui/views/shared/icons/_sun.erb +3 -0
  324. data/lib/karafka/web/ui/views/shared/icons/_x_circle.erb +3 -0
  325. data/lib/karafka/web/ui/views/shared/icons/_x_mark.erb +3 -0
  326. data/lib/karafka/web/ui/views/status/_breadcrumbs.erb +1 -1
  327. data/lib/karafka/web/ui/views/status/_failure.erb +2 -13
  328. data/lib/karafka/web/ui/views/status/_halted.erb +2 -10
  329. data/lib/karafka/web/ui/views/status/_info.erb +2 -13
  330. data/lib/karafka/web/ui/views/status/_success.erb +2 -10
  331. data/lib/karafka/web/ui/views/status/_warning.erb +2 -13
  332. data/lib/karafka/web/ui/views/status/failures/_connection.erb +2 -2
  333. data/lib/karafka/web/ui/views/status/failures/_consumers_reports.erb +3 -3
  334. data/lib/karafka/web/ui/views/status/failures/_consumers_reports_schema_state.erb +4 -4
  335. data/lib/karafka/web/ui/views/status/failures/_enabled.erb +2 -2
  336. data/lib/karafka/web/ui/views/status/failures/_initial_consumers_metrics.erb +6 -6
  337. data/lib/karafka/web/ui/views/status/failures/_initial_consumers_state.erb +6 -6
  338. data/lib/karafka/web/ui/views/status/failures/_live_reporting.erb +2 -2
  339. data/lib/karafka/web/ui/views/status/failures/_materializing_lag.erb +11 -0
  340. data/lib/karafka/web/ui/views/status/failures/_partitions.erb +3 -3
  341. data/lib/karafka/web/ui/views/status/failures/_state_calculation.erb +2 -2
  342. data/lib/karafka/web/ui/views/status/failures/_topics.erb +3 -3
  343. data/lib/karafka/web/ui/views/status/info/_components.erb +14 -41
  344. data/lib/karafka/web/ui/views/status/show.erb +165 -154
  345. data/lib/karafka/web/ui/views/status/warnings/_connection.erb +3 -3
  346. data/lib/karafka/web/ui/views/status/warnings/_pro_subscription.erb +2 -2
  347. data/lib/karafka/web/ui/views/status/warnings/_replication.erb +2 -2
  348. data/lib/karafka/web/ui/views/status/warnings/_routing_topics_presence.erb +1 -1
  349. data/lib/karafka/web/ui/views/support/_breadcrumbs.erb +5 -0
  350. data/lib/karafka/web/ui/views/support/show.erb +71 -0
  351. data/lib/karafka/web/ui/views/ux/_alerts.erb +25 -0
  352. data/lib/karafka/web/ui/views/ux/_badges.erb +21 -0
  353. data/lib/karafka/web/ui/views/ux/_breadcrumbs.erb +5 -0
  354. data/lib/karafka/web/ui/views/ux/_buttons.erb +47 -0
  355. data/lib/karafka/web/ui/views/ux/_card_detail.erb +15 -0
  356. data/lib/karafka/web/ui/views/ux/_card_metric.erb +123 -0
  357. data/lib/karafka/web/ui/views/ux/_card_summary.erb +72 -0
  358. data/lib/karafka/web/ui/views/ux/_card_support.erb +39 -0
  359. data/lib/karafka/web/ui/views/ux/_code.erb +9 -0
  360. data/lib/karafka/web/ui/views/ux/_data_table.erb +52 -0
  361. data/lib/karafka/web/ui/views/ux/_headers.erb +2 -0
  362. data/lib/karafka/web/ui/views/ux/_icons.erb +9 -0
  363. data/lib/karafka/web/ui/views/ux/_pagination.erb +32 -0
  364. data/lib/karafka/web/ui/views/ux/_row_table.erb +52 -0
  365. data/lib/karafka/web/ui/views/ux/_status_rows.erb +53 -0
  366. data/lib/karafka/web/ui/views/ux/_tabs.erb +14 -0
  367. data/lib/karafka/web/ui/views/ux/_text.erb +2 -0
  368. data/lib/karafka/web/ui/views/ux/_topic_tiles.erb +42 -0
  369. data/lib/karafka/web/ui/views/ux/show.erb +19 -0
  370. data/lib/karafka/web/version.rb +1 -1
  371. data/lib/karafka/web.rb +2 -0
  372. data/package-lock.json +4158 -0
  373. data/package.json +15 -0
  374. data/postcss.config.js +6 -0
  375. data/tailwind.config.js +16 -0
  376. data.tar.gz.sig +4 -0
  377. metadata +203 -51
  378. metadata.gz.sig +0 -0
  379. data/lib/karafka/web/management/migrations/0_set_initial_consumers_metrics.rb +0 -36
  380. data/lib/karafka/web/management/migrations/0_set_initial_consumers_state.rb +0 -43
  381. data/lib/karafka/web/management/migrations/1699543515_fill_missing_received_and_sent_bytes_in_consumers_metrics.rb +0 -26
  382. data/lib/karafka/web/management/migrations/1699543515_fill_missing_received_and_sent_bytes_in_consumers_state.rb +0 -23
  383. data/lib/karafka/web/management/migrations/1700234522_introduce_waiting_in_consumers_metrics.rb +0 -24
  384. data/lib/karafka/web/management/migrations/1700234522_introduce_waiting_in_consumers_state.rb +0 -20
  385. data/lib/karafka/web/management/migrations/1700234522_remove_processing_from_consumers_metrics.rb +0 -24
  386. data/lib/karafka/web/management/migrations/1700234522_remove_processing_from_consumers_state.rb +0 -20
  387. data/lib/karafka/web/management/migrations/1704722380_split_listeners_into_active_and_paused_in_metrics.rb +0 -36
  388. data/lib/karafka/web/management/migrations/1704722380_split_listeners_into_active_and_paused_in_states.rb +0 -32
  389. data/lib/karafka/web/management/migrations/1706607960_introduce_lag_total_in_metrics.rb +0 -38
  390. data/lib/karafka/web/management/migrations/1706607960_introduce_lag_total_in_states.rb +0 -22
  391. data/lib/karafka/web/management/migrations/1706611396_rename_lag_total_to_lag_hybrid_in_metrics.rb +0 -36
  392. data/lib/karafka/web/management/migrations/1706611396_rename_lag_total_to_lag_hybrid_in_states.rb +0 -21
  393. data/lib/karafka/web/pro/ui/views/cluster/brokers.erb +0 -27
  394. data/lib/karafka/web/pro/ui/views/commands/_details.erb +0 -26
  395. data/lib/karafka/web/pro/ui/views/consumers/_counters.erb +0 -72
  396. data/lib/karafka/web/pro/ui/views/consumers/consumer/_title.erb +0 -5
  397. data/lib/karafka/web/pro/ui/views/errors/_title_with_select.erb +0 -31
  398. data/lib/karafka/web/pro/ui/views/explorer/message/_message_actions.erb +0 -18
  399. data/lib/karafka/web/pro/ui/views/explorer/message/_payload_actions.erb +0 -19
  400. data/lib/karafka/web/pro/ui/views/explorer/partition/_details.erb +0 -35
  401. data/lib/karafka/web/pro/ui/views/explorer/topic/_details.erb +0 -23
  402. data/lib/karafka/web/pro/ui/views/health/_consumer_group_header.erb +0 -14
  403. data/lib/karafka/web/ui/controllers/responses/deny.rb +0 -15
  404. data/lib/karafka/web/ui/helpers/alerts_helper.rb +0 -23
  405. data/lib/karafka/web/ui/lib/safe_runner.rb +0 -59
  406. data/lib/karafka/web/ui/models/visibility_filter.rb +0 -49
  407. data/lib/karafka/web/ui/public/javascripts/libs/bootstrap.min.js +0 -6
  408. data/lib/karafka/web/ui/public/javascripts/tabs_manager.js +0 -57
  409. data/lib/karafka/web/ui/public/stylesheets/libs/bootstrap.min.css +0 -6
  410. data/lib/karafka/web/ui/views/consumers/_counters.erb +0 -62
  411. data/lib/karafka/web/ui/views/errors/_watermark_offsets.erb +0 -10
  412. data/lib/karafka/web/ui/views/shared/_feature_pro.erb +0 -4
  413. data/lib/karafka/web/ui/views/shared/_footer.erb +0 -22
  414. data/lib/karafka/web/ui/views/shared/_live_poll.erb +0 -7
  415. /data/lib/karafka/web/management/migrations/{0_base.rb → base.rb} +0 -0
  416. /data/lib/karafka/web/ui/public/javascripts/{charts.js → components/charts.js} +0 -0
  417. /data/lib/karafka/web/ui/public/stylesheets/libs/{highlight.min.css → highlight_light.min.css} +0 -0
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Adds bytes_sent and bytes_received to all the aggregated metrics samples, so we have
8
- # charts that do not have to fill gaps or check anything
9
- class FillMissingReceivedAndSentBytesInConsumersMetrics < Base
10
- self.versions_until = '1.1.0'
11
- self.type = :consumers_metrics
12
-
13
- # @param state [Hash] metrics state
14
- def migrate(state)
15
- state[:aggregated].each_value do |metrics|
16
- metrics.each do |metric|
17
- metric.last[:bytes_sent] = 0
18
- metric.last[:bytes_received] = 0
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Similar to filling in consumers metrics, we initialize this with zeros so it is always
8
- # present as expected
9
- class FillMissingReceivedAndSentBytesInConsumersState < Base
10
- # Network metrics were introduced with schema 1.2.0
11
- self.versions_until = '1.2.0'
12
- self.type = :consumers_state
13
-
14
- # @param state [Hash]
15
- def migrate(state)
16
- state[:stats][:bytes_sent] = 0
17
- state[:stats][:bytes_received] = 0
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Introduce waiting in consumers metrics to complement busy and enqueued for jobs metrics
8
- class IntroduceWaitingInConsumersMetrics < Base
9
- self.versions_until = '1.1.1'
10
- self.type = :consumers_metrics
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:aggregated].each_value do |metrics|
15
- metrics.each do |metric|
16
- metric.last[:waiting] = 0
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Introduce waiting in consumers metrics to complement busy and enqueued for jobs stats
8
- class IntroduceWaitingInConsumersState < Base
9
- self.versions_until = '1.2.1'
10
- self.type = :consumers_state
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:stats][:waiting] = 0
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Moves unused "processing" that was used instead of "busy" in older versions
8
- class RemoveProcessingFromConsumersMetrics < Base
9
- self.versions_until = '1.1.1'
10
- self.type = :consumers_metrics
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:aggregated].each_value do |metrics|
15
- metrics.each do |metric|
16
- metric.last.delete(:processing)
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Moves unused "processing" that was used instead of "busy" in older versions
8
- class RemoveProcessingFromConsumersState < Base
9
- self.versions_until = '1.2.1'
10
- self.type = :consumers_state
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:stats].delete(:processing)
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Since we have introduced notion of pause listeners, we need to reflect this in the
8
- # UI, so the scaling changes are visible
9
- class SplitListenersIntoActiveAndPausedInMetrics < Base
10
- self.versions_until = '1.1.2'
11
- self.type = :consumers_metrics
12
-
13
- # @param state [Hash]
14
- def migrate(state)
15
- state[:aggregated].each_value do |metrics|
16
- metrics.each do |metric|
17
- listeners = if metric.last.key?(:listeners)
18
- metric.last[:listeners].to_i
19
- elsif metric.last.key?(:listeners_count)
20
- metric.last[:listeners_count].to_i
21
- else
22
- 0
23
- end
24
-
25
- metric.last[:listeners] = {
26
- active: listeners,
27
- standby: 0
28
- }
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Since we have introduced notion of pause listeners, we need to reflect this in the
8
- # UI, so the scaling changes are visible
9
- class SplitListenersIntoActiveAndPausedInStates < Base
10
- self.versions_until = '1.2.2'
11
- self.type = :consumers_state
12
-
13
- # @param state [Hash]
14
- def migrate(state)
15
- listeners = if state[:stats].key?(:listeners)
16
- state[:stats][:listeners].to_i
17
- elsif state[:stats].key?(:listeners_count)
18
- state[:stats][:listeners_count].to_i
19
- else
20
- 0
21
- end
22
-
23
- state[:stats][:listeners] = {
24
- active: listeners,
25
- standby: 0
26
- }
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Moves to using lag total as a normalization for both lags
8
- class IntroduceLagTotalInMetrics < Base
9
- self.versions_until = '1.2.0'
10
- self.type = :consumers_metrics
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:aggregated].each_value do |metrics|
15
- metrics.each do |metric|
16
- metric.last[:lag_total] = metric.last[:lag_stored]
17
- metric.last.delete(:lag_stored)
18
- metric.last.delete(:lag)
19
- end
20
- end
21
-
22
- state[:consumer_groups].each_value do |metrics|
23
- metrics.each do |metric_group|
24
- metric_group.last.each_value do |metric|
25
- metric.each_value do |sample|
26
- sample[:lag_total] = sample[:lag_stored]
27
- sample.delete(:lag_stored)
28
- sample.delete(:lag)
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Moves to using lag total as a normalization for both lags
8
- class IntroduceLagTotalInStates < Base
9
- self.versions_until = '1.3.0'
10
- self.type = :consumers_state
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:stats][:lag_total] = state[:stats][:lag_stored]
15
- state[:stats].delete(:lag)
16
- state[:stats].delete(:lag_stored)
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Renames total lag to hybrid to better represent what it is
8
- class RenameLagTotalToLagHybridInMetrics < Base
9
- self.versions_until = '1.2.1'
10
- self.type = :consumers_metrics
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:aggregated].each_value do |metrics|
15
- metrics.each do |metric|
16
- metric.last[:lag_hybrid] = metric.last[:lag_total] || 0
17
- metric.last.delete(:lag_total)
18
- end
19
- end
20
-
21
- state[:consumer_groups].each_value do |metrics|
22
- metrics.each do |metric_group|
23
- metric_group.last.each_value do |metric|
24
- metric.each_value do |sample|
25
- sample[:lag_hybrid] = sample[:lag_total]
26
- sample.delete(:lag_total)
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Management
6
- module Migrations
7
- # Renames total lag to hybrid to better represent what it is
8
- class RenameLagTotalToLagHybridInStates < Base
9
- self.versions_until = '1.3.1'
10
- self.type = :consumers_state
11
-
12
- # @param state [Hash]
13
- def migrate(state)
14
- state[:stats][:lag_hybrid] = state[:stats][:lag_total] || 0
15
- state[:stats].delete(:lag_total)
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,27 +0,0 @@
1
- <%== view_title('Cluster Informations') %>
2
-
3
- <%== partial 'cluster/tabs' %>
4
-
5
- <div class="container mb-5">
6
- <div class="row">
7
- <div class="col-lg-12 table-responsive">
8
- <table class="processes bg-white table table-hover table-bordered table-striped">
9
- <thead>
10
- <tr class="align-middle">
11
- <th><%== sort_link('Id', :broker_id) %></th>
12
- <th><%== sort_link('Name', :broker_name) %></th>
13
- <th><%== sort_link('Port', :broker_port) %></th>
14
- </tr>
15
- </thead>
16
- <tbody>
17
- <%==
18
- each_partial(
19
- @brokers,
20
- 'cluster/broker'
21
- )
22
- %>
23
- </tbody>
24
- </table>
25
- </div>
26
- </div>
27
- </div>
@@ -1,26 +0,0 @@
1
- <div class="container mb-4">
2
- <div class="row">
3
- <div class="col-sm-6 ms-0 ps-0">
4
- <% if @command_messages && !@command_messages.empty? %>
5
- <a
6
- href="<%= root_path('commands', 'recent') %>"
7
- class="btn btn-secondary btn-sm"
8
- title="Display the most recent command"
9
- >
10
- &#x2192; Recent
11
- </a>
12
- <% end %>
13
- </div>
14
-
15
- <div class="col-sm-6 text-end me-0 pe-0">
16
- Watermark offsets:
17
- <span class="badge bg-secondary mt-1 mb-1">
18
- high: <%= @watermark_offsets.high %>
19
- </span>
20
-
21
- <span class="badge bg-secondary mt-1 mb-1">
22
- low: <%= @watermark_offsets.low %>
23
- </span>
24
- </div>
25
- </div>
26
- </div>
@@ -1,72 +0,0 @@
1
- <div id="refreshable" class="container mb-5 counters">
2
- <div class="row">
3
- <div class="col-sm-12">
4
- <div class="card">
5
- <div class="card-body p-2 small">
6
- <div class="col-sm-12">
7
- <ul class="list-unstyled row text-center mb-0 mt-0">
8
- <li class="col-sm">
9
- <div class="count mb-1">
10
- <%= number_with_delimiter @counters.messages, ' ' %>
11
- </div>
12
- <div class="desc">Messages</div>
13
- </li>
14
- <li class="col-sm">
15
- <div class="count mb-1">
16
- <%= number_with_delimiter @counters.batches, ' ' %>
17
- </div>
18
- <div class="desc">Batches</div>
19
- </li>
20
- <li class="col-sm">
21
- <a href="<%= root_path('health/lags') %>">
22
- <div class="count mb-1">
23
- <%= number_with_delimiter @counters.lag_hybrid, ' ' %>
24
- </div>
25
- <div class="desc">Total lag</div>
26
- </a>
27
- </li>
28
- <li class="col-sm">
29
- <a href="<%= root_path('jobs/running') %>">
30
- <div class="count mb-1">
31
- <%= number_with_delimiter @counters.busy, ' ' %>
32
- </div>
33
- <div class="desc">Running</div>
34
- </a>
35
- </li>
36
- <li class="col-sm">
37
- <a href="<%= root_path('jobs/pending') %>">
38
- <div class="count mb-1">
39
- <%= number_with_delimiter @counters.pending, ' ' %>
40
- </div>
41
- <div class="desc">Pending</div>
42
- </a>
43
- </li>
44
- <li class="col-sm">
45
- <a href="<%= root_path('errors') %>">
46
- <div class="count mb-1">
47
- <%= number_with_delimiter @counters.errors, ' ' %>
48
- </div>
49
- <div class="desc">Errors</div>
50
- </a>
51
- </li>
52
- <li class="col-sm">
53
- <div class="count mb-1">
54
- <%= number_with_delimiter @counters.retries, ' ' %>
55
- </div>
56
- <div class="desc">Retries</div>
57
- </li>
58
- <li class="col-sm">
59
- <a href="<%= root_path('dlq') %>">
60
- <div class="count mb-1">
61
- <%= number_with_delimiter @counters.dead, ' ' %>
62
- </div>
63
- <div class="desc">Dead</div>
64
- </a>
65
- </li>
66
- </ul>
67
- </div>
68
- </div>
69
- </div>
70
- </div>
71
- </div>
72
- </div>
@@ -1,5 +0,0 @@
1
- <div class="col-md-12 col-lg-8">
2
- <h3>
3
- <%== @process.id %>
4
- </h3>
5
- </div>
@@ -1,31 +0,0 @@
1
- <div class="container mb-4">
2
- <div class="row">
3
- <div class="col">
4
- <h3>
5
- Errors
6
- </h3>
7
- </div>
8
-
9
- <div class="col">
10
- <div class="col-auto text-end">
11
- <label class="col-form-label">Partition</label>
12
- </div>
13
- </div>
14
-
15
- <div class="col pt-1 mb-0 pb-0">
16
- <div class="col-auto">
17
- <select class="form-select form-select-sm mb-0 form-control" id="current-partition">
18
- <%==
19
- each_partial(
20
- [nil] + @partitions_count.times.to_a,
21
- 'errors/partition_option',
22
- local: :partition
23
- )
24
- %>
25
- </select>
26
- </div>
27
- </div>
28
- </div>
29
-
30
- <hr>
31
- </div>
@@ -1,18 +0,0 @@
1
- <%
2
- republish_path = root_path('messages', @message.topic, @message.partition, @message.offset, 'republish')
3
- surrounding_path = explorer_path(@message.topic, @message.partition, @message.offset, 'surrounding')
4
- %>
5
-
6
- <div class="row mb-0">
7
- <div class="col-sm-12 text-end">
8
- <a href="<%= surrounding_path %>" class="btn btn-secondary btn-sm float-end ms-1">
9
- &#8651;
10
- Surrounding
11
- </a>
12
-
13
- <form action="<%= republish_path %>" method="post" class="confirm-action float-end">
14
- <%== csrf_tag(republish_path) %>
15
- <input type="submit" value="&#10227; Republish" class="btn btn-primary btn-sm"/>
16
- </form>
17
- </div>
18
- </div>
@@ -1,19 +0,0 @@
1
- <div class="float-end text-end">
2
- <% if @visibility_filter.download?(@message) %>
3
- <a
4
- href="<%= root_path('messages', @message.topic, @message.partition, @message.offset, 'download') %>"
5
- class="btn btn-secondary btn-sm"
6
- >
7
- &#8659; Download raw
8
- </a>
9
- <% end %>
10
-
11
- <% if @visibility_filter.export?(@message) && @safe_payload.success? %>
12
- <a
13
- href="<%= root_path('messages', @message.topic, @message.partition, @message.offset, 'export') %>"
14
- class="btn btn-secondary btn-sm"
15
- >
16
- &#8659; Export as JSON
17
- </a>
18
- <% end %>
19
- </div>
@@ -1,35 +0,0 @@
1
- <div class="container mb-4">
2
- <div class="row">
3
- <div class="col-sm-6 ms-0 ps-0">
4
- <% if @messages && !@messages.empty? %>
5
- <a
6
- href="<%= explorer_path(@topic_id, @partition_id, 'recent') %>"
7
- class="btn btn-secondary btn-sm"
8
- title="Display the most recent message for this partition"
9
- >
10
- &#x2192; Recent
11
- </a>
12
- <% end %>
13
-
14
- <% closest_path = explorer_path(@topic_id, @partition_id) %>
15
- <input
16
- type="button"
17
- class="btn-secondary btn btn-sm"
18
- id="offset-lookup-datepicker"
19
- value="&#128198;"
20
- data-target="<%= closest_path %>"
21
- />
22
- </div>
23
-
24
- <div class="col-sm-6 text-end me-0 pe-0">
25
- Watermark offsets:
26
- <span class="badge bg-secondary mt-1 mb-1">
27
- high: <%= @watermark_offsets.high %>
28
- </span>
29
-
30
- <span class="badge bg-secondary mt-1 mb-1">
31
- low: <%= @watermark_offsets.low %>
32
- </span>
33
- </div>
34
- </div>
35
- </div>
@@ -1,23 +0,0 @@
1
- <div class="container mb-4">
2
- <div class="row">
3
- <div class="col-sm-6 ms-0 ps-0">
4
- <% if @messages && !@messages.empty? %>
5
- <a href="<%= explorer_path(@topic_id, 'recent') %>" class="btn btn-secondary btn-sm" title="Display the most recent message for this partition">
6
- &#x2192; Recent
7
- </a>
8
- <% end %>
9
- </div>
10
-
11
- <div class="col-sm-6 text-end me-0 pe-0">
12
- Partitions:
13
- <span class="badge bg-secondary mt-1 mb-1">
14
- total: <%= @partitions_count %>
15
- </span>
16
-
17
- <span class="badge bg-secondary mt-1 mb-1">
18
- visible:
19
- <%= [@active_partitions.first, @active_partitions.last].uniq.join(' to ') %>
20
- </span>
21
- </div>
22
- </div>
23
- </div>
@@ -1,14 +0,0 @@
1
- <div class="row mb-4">
2
- <div class="col-sm-8">
3
- <h4 class="mb-4"><%= cg_name %></h4>
4
- </div>
5
-
6
- <div class="col-sm-4">
7
- <span class="float-end">
8
- Last rebalance:
9
- <span class="badge bg-secondary">
10
- <%== relative_time(details[:rebalanced_at]) %>
11
- </span>
12
- </span>
13
- </div>
14
- </div>
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Ui
6
- module Controllers
7
- module Responses
8
- # Response that will make Roda render 403 deny
9
- class Deny
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Ui
6
- module Helpers
7
- # Helper for generating general alerts
8
- module AlertsHelper
9
- # @param message [String] alert message
10
- # @return [String] html with alert info
11
- def alert_info(message)
12
- partial(
13
- 'shared/alerts/info',
14
- locals: {
15
- message: message
16
- }
17
- )
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end