karafka-web 0.9.1 → 0.10.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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 +85 -1
  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 +2 -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 +7 -5
  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 +0 -0
  377. metadata +172 -47
  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,8 +1,8 @@
1
- <p>
1
+ <p class="mb-2">
2
2
  None of the <code>karafka server</code> processes is subscribed to handle the
3
3
  <code><%= Karafka::Web.config.topics.consumers.reports %></code> topic data aggregations.
4
4
  </p>
5
5
 
6
- <p class="mb-0">
6
+ <p>
7
7
  If you are limiting the topics you consume using the <a href="https://karafka.io/docs/CLI/#limiting-consumer-groups-used-per-process" target="_blank">limiting API</a>, please include the Karafka Web consumer group and the <code><%= Karafka::Web.config.topics.consumers.reports %></code> topic.
8
8
  </p>
@@ -2,7 +2,7 @@
2
2
  Web UI requires the following topics to exist:
3
3
  </p>
4
4
 
5
- <ul>
5
+ <ul class="list-disc m-5">
6
6
  <% details.each do |name, details| %>
7
7
  <li>
8
8
  <code><%= name %></code> - <%= details[:present] ? 'Exists' : 'Missing' %>
@@ -10,11 +10,11 @@
10
10
  <% end %>
11
11
  </ul>
12
12
 
13
- <p>
13
+ <p class="mb-2">
14
14
  Please ensure all those topics exist and are accessible to your Karafka user.
15
15
  </p>
16
16
 
17
- <p class="mb-0">
17
+ <p>
18
18
  You can read more about their setup and configuration
19
19
  <a href="https://karafka.io/docs/Web-UI-Getting-Started/" target="_blank">here</a>.
20
20
  </p>
@@ -1,57 +1,30 @@
1
- <p>
1
+ <p class="mb-2">
2
2
  Below you can find information about your setup. This can be helpful when debugging or reporting bugs and issues.
3
3
  </p>
4
4
 
5
- <p>
6
- <span class="badge bg-secondary">
7
- <%= @sampler.ruby_version %>
8
- </span>
9
-
10
- <span class="badge bg-secondary">
11
- karafka
12
- <%= @sampler.karafka_version %>
13
- </span>
14
-
15
- <span class="badge bg-secondary">
16
- karafka-web
17
- <%= @sampler.karafka_web_version %>
18
- </span>
19
-
20
- <span class="badge bg-secondary">
21
- karafka-core
22
- <%= @sampler.karafka_core_version %>
23
- </span>
24
-
25
- <span class="badge bg-secondary">
26
- rdkafka
27
- <%= @sampler.rdkafka_version %>
28
- </span>
29
-
30
- <span class="badge bg-secondary">
31
- librdkafka
32
- <%= @sampler.librdkafka_version %>
33
- </span>
34
-
35
- <span class="badge bg-secondary">
36
- waterdrop
37
- <%= @sampler.waterdrop_version %>
38
- </span>
5
+ <p class="mb-2">
6
+ <%== badge_primary @sampler.ruby_version %>
7
+ <%== badge_primary "karafka #{@sampler.karafka_version} #{Karafka.pro? ? 'Pro' : 'OSS'}" %>
8
+ <%== badge_primary "karafka-web #{@sampler.karafka_web_version}" %>
9
+ <%== badge_primary "karafka-core #{@sampler.karafka_core_version}" %>
10
+ <%== badge_primary "rdkafka #{@sampler.rdkafka_version}" %>
11
+ <%== badge_primary "librdkafka #{@sampler.librdkafka_version}" %>
12
+ <%== badge_primary "waterdrop #{@sampler.waterdrop_version}" %>
39
13
 
40
14
  <% if Object.const_defined?(:Rails, false) %>
41
- <span class="badge bg-secondary">
42
- rails
43
- <%= Rails.gem_version %>
44
- </span>
15
+ <%== badge_primary "rails #{Rails.gem_version}" %>
45
16
  <% end %>
17
+
18
+ <%== badge_primary "memsize #{ObjectSpace.respond_to?(:memsize_of)}" %>
46
19
  </p>
47
20
 
48
- <hr/>
21
+ <div class="divider"></div>
49
22
 
50
23
  <p>
51
24
  Below you can find information about internal Karafka Web-UI topics:
52
25
  </p>
53
26
 
54
- <ul class="mb-0">
27
+ <ul class="list-disc m-5 mb-0">
55
28
  <li>Errors: <code><%= Karafka::Web.config.topics.errors %></code></li>
56
29
  <li>Consumers reports: <code><%= Karafka::Web.config.topics.consumers.reports %></code></li>
57
30
  <li>Consumers states: <code><%= Karafka::Web.config.topics.consumers.states %></code></li>
@@ -1,209 +1,220 @@
1
- <%== view_title('Web UI Status Details', hr: true) %>
1
+ <% view_title 'Web UI Status Details' %>
2
2
 
3
- <div class="container">
4
- <div class="row">
5
- <div class="col-lg-10 offset-md-1">
6
- <%==
7
- partial(
8
- "status/#{@status.enabled.to_s}",
3
+ <div class="max-w-6xl mx-auto">
4
+ <%==
5
+ partial(
6
+ "status/#{@status.enabled.to_s}",
7
+ locals: {
8
+ title: 'Web UI setup in karafka.rb',
9
+ description: partial(
10
+ "status/#{@status.enabled.partial_namespace}/enabled",
9
11
  locals: {
10
- title: 'Web UI setup in karafka.rb',
11
- description: partial(
12
- "status/#{@status.enabled.partial_namespace}/enabled",
13
- locals: {
14
- details: @status.enabled.details
15
- }
16
- )
12
+ details: @status.enabled.details
17
13
  }
18
14
  )
19
- %>
15
+ }
16
+ )
17
+ %>
20
18
 
21
- <%==
22
- partial(
23
- "status/#{@status.connection.to_s}",
19
+ <%==
20
+ partial(
21
+ "status/#{@status.connection.to_s}",
22
+ locals: {
23
+ title: 'Connection to Kafka',
24
+ description: partial(
25
+ "status/#{@status.connection.partial_namespace}/connection",
24
26
  locals: {
25
- title: 'Connection to Kafka',
26
- description: partial(
27
- "status/#{@status.connection.partial_namespace}/connection",
28
- locals: {
29
- details: @status.connection.details
30
- }
31
- )
27
+ details: @status.connection.details
32
28
  }
33
29
  )
34
- %>
30
+ }
31
+ )
32
+ %>
35
33
 
36
- <%==
37
- partial(
38
- "status/#{@status.topics.to_s}",
34
+ <%==
35
+ partial(
36
+ "status/#{@status.topics.to_s}",
37
+ locals: {
38
+ title: 'Web UI topics presence',
39
+ description: partial(
40
+ 'status/failures/topics',
39
41
  locals: {
40
- title: 'Web UI topics presence',
41
- description: partial(
42
- 'status/failures/topics',
43
- locals: {
44
- details: @status.topics.details
45
- }
46
- )
42
+ details: @status.topics.details
47
43
  }
48
44
  )
49
- %>
45
+ }
46
+ )
47
+ %>
50
48
 
51
- <%==
52
- partial(
53
- "status/#{@status.partitions.to_s}",
49
+ <%==
50
+ partial(
51
+ "status/#{@status.partitions.to_s}",
52
+ locals: {
53
+ title: 'Partitions count',
54
+ description: partial(
55
+ 'status/failures/partitions',
54
56
  locals: {
55
- title: 'Partitions count',
56
- description: partial(
57
- 'status/failures/partitions',
58
- locals: {
59
- details: @status.partitions.details
60
- }
61
- )
57
+ details: @status.partitions.details
62
58
  }
63
59
  )
64
- %>
60
+ }
61
+ )
62
+ %>
65
63
 
66
- <%==
67
- partial(
68
- "status/#{@status.replication.to_s}",
64
+ <%==
65
+ partial(
66
+ "status/#{@status.replication.to_s}",
67
+ locals: {
68
+ title: 'Replication factors',
69
+ description: partial(
70
+ 'status/warnings/replication',
69
71
  locals: {
70
- title: 'Replication factors',
71
- description: partial(
72
- 'status/warnings/replication',
73
- locals: {
74
- details: @status.replication.details
75
- }
76
- )
72
+ details: @status.replication.details
77
73
  }
78
74
  )
79
- %>
75
+ }
76
+ )
77
+ %>
80
78
 
81
- <%==
82
- partial(
83
- "status/#{@status.initial_consumers_state.to_s}",
79
+ <%==
80
+ partial(
81
+ "status/#{@status.initial_consumers_state.to_s}",
82
+ locals: {
83
+ title: 'Initial consumers state',
84
+ description: partial(
85
+ 'status/failures/initial_consumers_state',
84
86
  locals: {
85
- title: 'Initial consumers state',
86
- description: partial(
87
- 'status/failures/initial_consumers_state',
88
- locals: {
89
- details: @status.initial_consumers_state.details
90
- }
91
- )
87
+ details: @status.initial_consumers_state.details
92
88
  }
93
89
  )
94
- %>
90
+ }
91
+ )
92
+ %>
95
93
 
96
- <%==
97
- partial(
98
- "status/#{@status.initial_consumers_metrics.to_s}",
94
+ <%==
95
+ partial(
96
+ "status/#{@status.initial_consumers_metrics.to_s}",
97
+ locals: {
98
+ title: 'Initial consumers metrics',
99
+ description: partial(
100
+ 'status/failures/initial_consumers_metrics',
99
101
  locals: {
100
- title: 'Initial consumers metrics',
101
- description: partial(
102
- 'status/failures/initial_consumers_metrics',
103
- locals: {
104
- details: @status.initial_consumers_metrics.details
105
- }
106
- )
102
+ details: @status.initial_consumers_metrics.details
107
103
  }
108
104
  )
109
- %>
105
+ }
106
+ )
107
+ %>
110
108
 
111
- <%==
112
- partial(
113
- "status/#{@status.consumers_reports.to_s}",
109
+ <%==
110
+ partial(
111
+ "status/#{@status.consumers_reports.to_s}",
112
+ locals: {
113
+ title: 'Consumers reports',
114
+ description: partial(
115
+ 'status/failures/consumers_reports',
114
116
  locals: {
115
- title: 'Consumers reports',
116
- description: partial(
117
- 'status/failures/consumers_reports',
118
- locals: {
119
- details: @status.consumers_reports.details
120
- }
121
- )
117
+ details: @status.consumers_reports.details
122
118
  }
123
119
  )
124
- %>
120
+ }
121
+ )
122
+ %>
125
123
 
126
- <%==
127
- partial(
128
- "status/#{@status.live_reporting.to_s}",
124
+ <%==
125
+ partial(
126
+ "status/#{@status.live_reporting.to_s}",
127
+ locals: {
128
+ title: 'Live reporting',
129
+ description: partial(
130
+ 'status/failures/live_reporting',
129
131
  locals: {
130
- title: 'Live reporting',
131
- description: partial(
132
- 'status/failures/live_reporting',
133
- locals: {
134
- details: @status.live_reporting.details
135
- }
136
- )
132
+ details: @status.live_reporting.details
137
133
  }
138
134
  )
139
- %>
135
+ }
136
+ )
137
+ %>
140
138
 
141
- <%==
142
- partial(
143
- "status/#{@status.state_calculation.to_s}",
139
+ <%==
140
+ partial(
141
+ "status/#{@status.materializing_lag.to_s}",
142
+ locals: {
143
+ title: 'Materializing lag',
144
+ description: partial(
145
+ 'status/failures/materializing_lag',
144
146
  locals: {
145
- title: 'State calculation subscription',
146
- description: partial(
147
- 'status/failures/state_calculation',
148
- locals: {
149
- details: @status.state_calculation.details
150
- }
151
- )
147
+ details: @status.materializing_lag.details
152
148
  }
153
149
  )
154
- %>
150
+ }
151
+ )
152
+ %>
155
153
 
156
- <%==
157
- partial(
158
- "status/#{@status.consumers_reports_schema_state.to_s}",
154
+ <%==
155
+ partial(
156
+ "status/#{@status.state_calculation.to_s}",
157
+ locals: {
158
+ title: 'State calculation subscription',
159
+ description: partial(
160
+ 'status/failures/state_calculation',
159
161
  locals: {
160
- title: 'Consumers reports schema compatibility',
161
- description: partial(
162
- 'status/failures/consumers_reports_schema_state'
163
- )
162
+ details: @status.state_calculation.details
164
163
  }
165
164
  )
166
- %>
165
+ }
166
+ )
167
+ %>
167
168
 
168
- <%==
169
- partial(
170
- "status/#{@status.routing_topics_presence.to_s}",
171
- locals: {
172
- title: 'Routing topics presence',
173
- description: partial(
174
- 'status/warnings/routing_topics_presence',
175
- locals: {
176
- details: @status.routing_topics_presence.details
177
- }
178
- )
179
- }
169
+ <%==
170
+ partial(
171
+ "status/#{@status.consumers_reports_schema_state.to_s}",
172
+ locals: {
173
+ title: 'Consumers reports schema compatibility',
174
+ description: partial(
175
+ 'status/failures/consumers_reports_schema_state'
180
176
  )
181
- %>
177
+ }
178
+ )
179
+ %>
182
180
 
183
- <%==
184
- partial(
185
- "status/#{@status.pro_subscription.to_s}",
181
+ <%==
182
+ partial(
183
+ "status/#{@status.routing_topics_presence.to_s}",
184
+ locals: {
185
+ title: 'Routing topics presence',
186
+ description: partial(
187
+ 'status/warnings/routing_topics_presence',
186
188
  locals: {
187
- title: 'Karafka Pro subscription',
188
- description: partial(
189
- 'status/warnings/pro_subscription',
190
- locals: {
191
- details: @status.pro_subscription.details
192
- }
193
- )
189
+ details: @status.routing_topics_presence.details
194
190
  }
195
191
  )
196
- %>
192
+ }
193
+ )
194
+ %>
197
195
 
198
- <%==
199
- partial(
200
- 'status/info',
196
+ <%==
197
+ partial(
198
+ "status/#{@status.pro_subscription.to_s}",
199
+ locals: {
200
+ title: 'Karafka Pro subscription',
201
+ description: partial(
202
+ 'status/warnings/pro_subscription',
201
203
  locals: {
202
- title: 'Components info',
203
- description: partial('status/info/components')
204
+ details: @status.pro_subscription.details
204
205
  }
205
206
  )
206
- %>
207
- </div>
208
- </div>
207
+ }
208
+ )
209
+ %>
210
+
211
+ <%==
212
+ partial(
213
+ 'status/info',
214
+ locals: {
215
+ title: 'Components info',
216
+ description: partial('status/info/components')
217
+ }
218
+ )
219
+ %>
209
220
  </div>
@@ -1,11 +1,11 @@
1
- <p>
1
+ <p class="mb-2">
2
2
  High latency detected when connecting to the Kafka cluster from the Web-UI.
3
3
  </p>
4
4
 
5
- <p>
5
+ <p class="mb-2">
6
6
  Kafka is not designed to perform optimally under high network latencies; even when configurations seem appropriate, you may still encounter disconnects and other unexpected issues.
7
7
  </p>
8
8
 
9
- <p class="mb-0">
9
+ <p>
10
10
  It took Web-UI <strong><%= details[:time].round(2) %> ms</strong> to get the cluster info.
11
11
  </p>
@@ -1,8 +1,8 @@
1
- <p>
1
+ <p class="mb-2">
2
2
  You are using the OSS version of the Karafka ecosystem, and some of the Karafka ecosystem features are unavailable in the OSS version.
3
3
  </p>
4
4
 
5
- <p class="mb-0">
5
+ <p>
6
6
  Please help us make the Karafka ecosystem better by subscribing to our
7
7
  <a target="_blank" href="https://karafka.io/#become-pro">Pro</a>
8
8
  offering.
@@ -1,4 +1,4 @@
1
- <p>
1
+ <p class="mb-2">
2
2
  It is recommended to have a replication factor greater than <code>1</code> for all the Karafka Web UI topics in a production environment.
3
3
  </p>
4
4
 
@@ -6,7 +6,7 @@
6
6
  Current replication factors for Karafka Web UI topics:
7
7
  </p>
8
8
 
9
- <ul>
9
+ <ul class="list-disc m-5">
10
10
  <% details.each do |name, details| %>
11
11
  <li>
12
12
  <code><%= name %></code>: <code><%= details[:replication] %></code>
@@ -2,7 +2,7 @@
2
2
  The following active topics present in your <code>karafka.rb</code> file were not located in the Kafka cluster:
3
3
  </p>
4
4
 
5
- <ul>
5
+ <ul class="list-disc m-5">
6
6
  <% details.each do |topic_name| %>
7
7
  <li>
8
8
  <code><%= topic_name %></code>
@@ -0,0 +1,5 @@
1
+ <li>
2
+ <a href="<%= root_path('support') %>">
3
+ Support
4
+ </a>
5
+ </li>
@@ -0,0 +1,71 @@
1
+ <% view_title 'Support' %>
2
+
3
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-8">
4
+ <div class="card-support">
5
+ <h3>
6
+ <%== icon(:book_open) %>
7
+
8
+ <span>Karafka Documentation</span>
9
+ </h3>
10
+
11
+ <p>
12
+ Find comprehensive guides and documentation to help you start working with Karafka as quickly as possible, as well as support if you get stuck.
13
+ </p>
14
+
15
+ <a
16
+ href="https://karafka.io/docs"
17
+ target="_blank"
18
+ >Go to Karafka Docs</a>
19
+ </div>
20
+
21
+ <div class="card-support">
22
+ <h3>
23
+ <%== icon(:slack) %>
24
+
25
+ <span>Slack Channel</span>
26
+ </h3>
27
+
28
+ <p>
29
+ Join our Slack community to connect with other users and get help and advice from our team and the community.
30
+ </p>
31
+
32
+ <a
33
+ href="https://karafka.io/slack"
34
+ target="_blank"
35
+ >Join Karafka Slack</a>
36
+ </div>
37
+
38
+ <div class="card-support">
39
+ <h3>
40
+ <%== icon(:globe) %>
41
+
42
+ <span>Karafka Website</span>
43
+ </h3>
44
+
45
+ <p>
46
+ Visit the official Karafka website for more information about the framework, features, and use cases.
47
+ </p>
48
+
49
+ <a
50
+ href="https://karafka.io"
51
+ target="_blank"
52
+ >Go to Karafka Website</a>
53
+ </div>
54
+
55
+ <div class="card-support">
56
+ <h3>
57
+ <%== icon(:github) %>
58
+
59
+ <span>Github Repository</span>
60
+ </h3>
61
+
62
+ <p>
63
+ Check out the Karafka source code, contribute to the project, or open an issue if you find a bug.
64
+ </p>
65
+
66
+ <a
67
+ href="https://github.com/karafka/karafka"
68
+ target="_blank"
69
+ >Go to Karafka GitHub</a>
70
+ </div>
71
+ </div>
@@ -0,0 +1,25 @@
1
+ <div>
2
+ <% tailwind_types.each do |type| %>
3
+ <div class="mb-3">
4
+ <%==
5
+ name = :"alert_#{type}"
6
+ public_send name, "##{name}"
7
+ %>
8
+ </div>
9
+ <% end %>
10
+ </div>
11
+
12
+ <div class="mb-6"></div>
13
+
14
+ <div>
15
+ <% tailwind_types.each do |type| %>
16
+ <div class="mb-3">
17
+ <%
18
+ name = :"alert_box_#{type}"
19
+ public_send name, "##{name}", 'Some internal content'
20
+ %>
21
+ </div>
22
+ <% end %>
23
+ </div>
24
+
25
+ <div class="mb-6"></div>
@@ -0,0 +1,21 @@
1
+ <div>
2
+ <span class="badge">.badge</span>
3
+ <span class="badge badge-primary">.badge .badge-primary</span>
4
+ <span class="badge badge-info">.badge .badge-info</span>
5
+ <span class="badge badge-secondary">.badge .badge-secondary</span>
6
+ <span class="badge badge-success">.badge .badge-success</span>
7
+ <span class="badge badge-warning">.badge .badge-warning</span>
8
+ <span class="badge badge-error">.badge .badge-error</span>
9
+ </div>
10
+ <div class="mb-6"></div>
11
+
12
+ <div>
13
+ <%== badge '#badge' %>
14
+ <%== badge_primary '#badge_primary' %>
15
+ <%== badge_info '#badge_info' %>
16
+ <%== badge_secondary '#badge_secondary' %>
17
+ <%== badge_success '#badge_success' %>
18
+ <%== badge_warning '#badge_warning' %>
19
+ <%== badge_error '#badge_error' %>
20
+ </div>
21
+ <div class="mb-6"></div>
@@ -0,0 +1,5 @@
1
+ <li>
2
+ <a href="<%= root_path('ux') %>">
3
+ Web UI UX
4
+ </a>
5
+ </li>