karafka-web 0.6.0 → 0.6.2
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +22 -1
- data/Gemfile.lock +1 -1
- data/lib/karafka/web/config.rb +2 -0
- data/lib/karafka/web/tracking/consumers/contracts/report.rb +7 -3
- data/lib/karafka/web/tracking/consumers/reporter.rb +5 -3
- data/lib/karafka/web/tracking/consumers/sampler.rb +2 -1
- data/lib/karafka/web/tracking/sampler.rb +5 -0
- data/lib/karafka/web/ui/base.rb +6 -2
- data/lib/karafka/web/ui/controllers/base.rb +17 -0
- data/lib/karafka/web/ui/controllers/cluster.rb +5 -2
- data/lib/karafka/web/ui/controllers/consumers.rb +3 -1
- data/lib/karafka/web/ui/controllers/errors.rb +19 -6
- data/lib/karafka/web/ui/controllers/jobs.rb +3 -1
- data/lib/karafka/web/ui/controllers/requests/params.rb +10 -0
- data/lib/karafka/web/ui/lib/paginations/base.rb +61 -0
- data/lib/karafka/web/ui/lib/paginations/offset_based.rb +96 -0
- data/lib/karafka/web/ui/lib/paginations/page_based.rb +70 -0
- data/lib/karafka/web/ui/lib/paginations/paginators/arrays.rb +33 -0
- data/lib/karafka/web/ui/lib/paginations/paginators/base.rb +23 -0
- data/lib/karafka/web/ui/lib/paginations/paginators/partitions.rb +52 -0
- data/lib/karafka/web/ui/lib/paginations/paginators/sets.rb +85 -0
- data/lib/karafka/web/ui/lib/ttl_cache.rb +74 -0
- data/lib/karafka/web/ui/models/cluster_info.rb +59 -0
- data/lib/karafka/web/ui/models/message.rb +114 -38
- data/lib/karafka/web/ui/models/status.rb +34 -8
- data/lib/karafka/web/ui/pro/app.rb +11 -3
- data/lib/karafka/web/ui/pro/controllers/consumers.rb +3 -1
- data/lib/karafka/web/ui/pro/controllers/dlq.rb +1 -2
- data/lib/karafka/web/ui/pro/controllers/errors.rb +43 -10
- data/lib/karafka/web/ui/pro/controllers/explorer.rb +52 -7
- data/lib/karafka/web/ui/pro/views/consumers/consumer/_metrics.erb +6 -1
- data/lib/karafka/web/ui/pro/views/errors/_breadcrumbs.erb +8 -6
- data/lib/karafka/web/ui/pro/views/errors/_error.erb +1 -1
- data/lib/karafka/web/ui/pro/views/errors/_partition_option.erb +1 -1
- data/lib/karafka/web/ui/pro/views/errors/_table.erb +21 -0
- data/lib/karafka/web/ui/pro/views/errors/_title_with_select.erb +31 -0
- data/lib/karafka/web/ui/pro/views/errors/index.erb +9 -56
- data/lib/karafka/web/ui/pro/views/errors/partition.erb +17 -0
- data/lib/karafka/web/ui/pro/views/explorer/_breadcrumbs.erb +1 -1
- data/lib/karafka/web/ui/pro/views/explorer/_message.erb +8 -2
- data/lib/karafka/web/ui/pro/views/explorer/_partition_option.erb +1 -1
- data/lib/karafka/web/ui/pro/views/explorer/_topic.erb +1 -1
- data/lib/karafka/web/ui/pro/views/explorer/partition/_messages.erb +1 -0
- data/lib/karafka/web/ui/pro/views/explorer/partition.erb +1 -1
- data/lib/karafka/web/ui/pro/views/explorer/topic/_empty.erb +3 -0
- data/lib/karafka/web/ui/pro/views/explorer/topic/_limited.erb +4 -0
- data/lib/karafka/web/ui/pro/views/explorer/topic/_partitions.erb +11 -0
- data/lib/karafka/web/ui/pro/views/explorer/topic.erb +49 -0
- data/lib/karafka/web/ui/pro/views/shared/_navigation.erb +1 -1
- data/lib/karafka/web/ui/views/cluster/_partition.erb +1 -1
- data/lib/karafka/web/ui/views/errors/_error.erb +1 -1
- data/lib/karafka/web/ui/views/shared/_pagination.erb +16 -12
- data/lib/karafka/web/ui/views/status/failures/_initial_state.erb +1 -10
- data/lib/karafka/web/ui/views/status/info/_components.erb +6 -1
- data/lib/karafka/web/ui/views/status/show.erb +6 -1
- data/lib/karafka/web/ui/views/status/successes/_connection.erb +1 -0
- data/lib/karafka/web/ui/views/status/warnings/_connection.erb +11 -0
- data/lib/karafka/web/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +20 -3
- metadata.gz.sig +0 -0
- data/lib/karafka/web/ui/lib/paginate_array.rb +0 -38
| @@ -18,10 +18,11 @@ module Karafka | |
| 18 18 | 
             
                    module Controllers
         | 
| 19 19 | 
             
                      # Data explorer controller
         | 
| 20 20 | 
             
                      class Explorer < Ui::Controllers::Base
         | 
| 21 | 
            +
                        include Ui::Lib::Paginations
         | 
| 22 | 
            +
             | 
| 21 23 | 
             
                        # Lists all the topics we can explore
         | 
| 22 24 | 
             
                        def index
         | 
| 23 | 
            -
                          @topics =  | 
| 24 | 
            -
                                    .cluster_info
         | 
| 25 | 
            +
                          @topics = Models::ClusterInfo
         | 
| 25 26 | 
             
                                    .topics
         | 
| 26 27 | 
             
                                    .reject { |topic| topic[:topic_name] == '__consumer_offsets' }
         | 
| 27 28 | 
             
                                    .sort_by { |topic| topic[:topic_name] }
         | 
| @@ -29,6 +30,34 @@ module Karafka | |
| 29 30 | 
             
                          respond
         | 
| 30 31 | 
             
                        end
         | 
| 31 32 |  | 
| 33 | 
            +
                        # Displays aggregated messages from (potentially) all partitions of a topic
         | 
| 34 | 
            +
                        #
         | 
| 35 | 
            +
                        # @param topic_id [String]
         | 
| 36 | 
            +
                        #
         | 
| 37 | 
            +
                        # @note This view may not be 100% accurate because we merge multiple partitions data
         | 
| 38 | 
            +
                        #   into a single view and this is never accurate. It can be used however to quickly
         | 
| 39 | 
            +
                        #   look at most recent data flowing, etc, hence it is still useful for aggregated
         | 
| 40 | 
            +
                        #   metrics information
         | 
| 41 | 
            +
                        #
         | 
| 42 | 
            +
                        # @note We cannot use offset references here because each of the partitions may have
         | 
| 43 | 
            +
                        #   completely different values
         | 
| 44 | 
            +
                        def topic(topic_id)
         | 
| 45 | 
            +
                          @topic_id = topic_id
         | 
| 46 | 
            +
                          @partitions_count = Models::ClusterInfo.partitions_count(topic_id)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                          @active_partitions, materialized_page, @limited = Paginators::Partitions.call(
         | 
| 49 | 
            +
                            @partitions_count, @params.current_page
         | 
| 50 | 
            +
                          )
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                          @messages, next_page = Models::Message.topic_page(
         | 
| 53 | 
            +
                            topic_id, @active_partitions, materialized_page
         | 
| 54 | 
            +
                          )
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                          paginate(@params.current_page, next_page)
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                          respond
         | 
| 59 | 
            +
                        end
         | 
| 60 | 
            +
             | 
| 32 61 | 
             
                        # Shows messages available in a given partition
         | 
| 33 62 | 
             
                        #
         | 
| 34 63 | 
             
                        # @param topic_id [String]
         | 
| @@ -36,13 +65,16 @@ module Karafka | |
| 36 65 | 
             
                        def partition(topic_id, partition_id)
         | 
| 37 66 | 
             
                          @topic_id = topic_id
         | 
| 38 67 | 
             
                          @partition_id = partition_id
         | 
| 39 | 
            -
             | 
| 40 68 | 
             
                          @watermark_offsets = Ui::Models::WatermarkOffsets.find(topic_id, partition_id)
         | 
| 69 | 
            +
                          @partitions_count = Models::ClusterInfo.partitions_count(topic_id)
         | 
| 41 70 |  | 
| 42 | 
            -
                           | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
                             | 
| 71 | 
            +
                          previous_offset, @messages, next_offset = current_partition_data
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                          paginate(
         | 
| 74 | 
            +
                            previous_offset,
         | 
| 75 | 
            +
                            @params.current_offset,
         | 
| 76 | 
            +
                            next_offset,
         | 
| 77 | 
            +
                            @messages.map(&:offset)
         | 
| 46 78 | 
             
                          )
         | 
| 47 79 |  | 
| 48 80 | 
             
                          respond
         | 
| @@ -74,6 +106,19 @@ module Karafka | |
| 74 106 |  | 
| 75 107 | 
             
                          respond
         | 
| 76 108 | 
             
                        end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                        private
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                        # Fetches current page data
         | 
| 113 | 
            +
                        # @return [Array] fetched data with pagination information for the requested partition
         | 
| 114 | 
            +
                        def current_partition_data
         | 
| 115 | 
            +
                          Ui::Models::Message.offset_page(
         | 
| 116 | 
            +
                            @topic_id,
         | 
| 117 | 
            +
                            @partition_id,
         | 
| 118 | 
            +
                            @params.current_offset,
         | 
| 119 | 
            +
                            @watermark_offsets
         | 
| 120 | 
            +
                          )
         | 
| 121 | 
            +
                        end
         | 
| 77 122 | 
             
                      end
         | 
| 78 123 | 
             
                    end
         | 
| 79 124 | 
             
                  end
         | 
| @@ -1,14 +1,16 @@ | |
| 1 1 | 
             
            <li class="breadcrumb-item">
         | 
| 2 | 
            -
              <a href="<%= root_path('errors' | 
| 2 | 
            +
              <a href="<%= root_path('errors') %>">
         | 
| 3 3 | 
             
                Errors
         | 
| 4 4 | 
             
              </a>
         | 
| 5 5 | 
             
            </li>
         | 
| 6 6 |  | 
| 7 | 
            -
             | 
| 8 | 
            -
              < | 
| 9 | 
            -
                 | 
| 10 | 
            -
             | 
| 11 | 
            -
            </ | 
| 7 | 
            +
            <% if @partition_id %>
         | 
| 8 | 
            +
              <li class="breadcrumb-item">
         | 
| 9 | 
            +
                <a href="<%= root_path('errors', @partition_id) %>">
         | 
| 10 | 
            +
                  Partition <%= @partition_id %>
         | 
| 11 | 
            +
                </a>
         | 
| 12 | 
            +
              </li>
         | 
| 13 | 
            +
            <% end %>
         | 
| 12 14 |  | 
| 13 15 | 
             
            <% if @offset %>
         | 
| 14 16 | 
             
              <li class="breadcrumb-item">
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            <table class="processes bg-white table table-hover table-bordered table-striped mb-0 align-middle">
         | 
| 2 | 
            +
              <thead>
         | 
| 3 | 
            +
                <tr class="align-middle">
         | 
| 4 | 
            +
                  <th>Origin</th>
         | 
| 5 | 
            +
                  <th>Process name</th>
         | 
| 6 | 
            +
                  <th>Error</th>
         | 
| 7 | 
            +
                  <th>Occurred at</th>
         | 
| 8 | 
            +
                  <th></th>
         | 
| 9 | 
            +
                </tr>
         | 
| 10 | 
            +
              </thead>
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              <tbody>
         | 
| 13 | 
            +
                <%==
         | 
| 14 | 
            +
                  each_partial(
         | 
| 15 | 
            +
                    @error_messages,
         | 
| 16 | 
            +
                    'errors/error',
         | 
| 17 | 
            +
                    local: :error_msg
         | 
| 18 | 
            +
                  )
         | 
| 19 | 
            +
                %>
         | 
| 20 | 
            +
              </tbody>
         | 
| 21 | 
            +
            </table>
         | 
| @@ -0,0 +1,31 @@ | |
| 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,65 +1,18 @@ | |
| 1 | 
            -
             | 
| 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 | 
            -
                            @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 | 
            +
            <%== partial('errors/title_with_select') %>
         | 
| 32 2 |  | 
| 33 3 | 
             
            <div class="container">
         | 
| 34 4 | 
             
              <div class="row mb-5">
         | 
| 35 5 | 
             
                <div class="col-sm-12">
         | 
| 36 | 
            -
                  <%== partial('explorer/ | 
| 6 | 
            +
                  <%== partial('explorer/topic/partitions') %>
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  <% if @limited %>
         | 
| 9 | 
            +
                    <%== partial('explorer/topic/limited') %>
         | 
| 10 | 
            +
                  <% end %>
         | 
| 37 11 |  | 
| 38 | 
            -
                  <% if @ | 
| 39 | 
            -
                    <%== partial ' | 
| 40 | 
            -
                  <% elsif @watermark_offsets.cleaned? %>
         | 
| 41 | 
            -
                    <%== partial 'errors/cleaned' %>
         | 
| 12 | 
            +
                  <% if @error_messages.empty? && params.current_page == 1 %>
         | 
| 13 | 
            +
                    <%== partial 'explorer/topic/empty' %>
         | 
| 42 14 | 
             
                  <% else %>
         | 
| 43 | 
            -
                     | 
| 44 | 
            -
                      <thead>
         | 
| 45 | 
            -
                        <tr class="align-middle">
         | 
| 46 | 
            -
                          <th>Origin</th>
         | 
| 47 | 
            -
                          <th>Process name</th>
         | 
| 48 | 
            -
                          <th>Error</th>
         | 
| 49 | 
            -
                          <th>Occurred at</th>
         | 
| 50 | 
            -
                          <th></th>
         | 
| 51 | 
            -
                        </tr>
         | 
| 52 | 
            -
                      </thead>
         | 
| 53 | 
            -
                      <tbody>
         | 
| 54 | 
            -
                        <%==
         | 
| 55 | 
            -
                          each_partial(
         | 
| 56 | 
            -
                            @error_messages,
         | 
| 57 | 
            -
                            'errors/error',
         | 
| 58 | 
            -
                            local: :error_msg
         | 
| 59 | 
            -
                          )
         | 
| 60 | 
            -
                        %>
         | 
| 61 | 
            -
                      </tbody>
         | 
| 62 | 
            -
                    </table>
         | 
| 15 | 
            +
                    <%== partial 'errors/table' %>
         | 
| 63 16 | 
             
                  <% end %>
         | 
| 64 17 | 
             
                </div>
         | 
| 65 18 | 
             
              </div>
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            <%== partial('errors/title_with_select') %>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <div class="container">
         | 
| 4 | 
            +
              <div class="row mb-5">
         | 
| 5 | 
            +
                <div class="col-sm-12">
         | 
| 6 | 
            +
                  <%== partial('explorer/partition/watermark_offsets') %>
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  <% if @watermark_offsets.empty? %>
         | 
| 9 | 
            +
                    <%== partial 'errors/no_errors' %>
         | 
| 10 | 
            +
                  <% elsif @watermark_offsets.cleaned? %>
         | 
| 11 | 
            +
                    <%== partial 'errors/cleaned' %>
         | 
| 12 | 
            +
                  <% else %>
         | 
| 13 | 
            +
                    <%== partial 'errors/table' %>
         | 
| 14 | 
            +
                  <% end %>
         | 
| 15 | 
            +
                </div>
         | 
| 16 | 
            +
              </div>
         | 
| 17 | 
            +
            </div>
         | 
| @@ -1,7 +1,10 @@ | |
| 1 | 
            -
            <% if message.is_a?( | 
| 1 | 
            +
            <% if message.is_a?(Array) %>
         | 
| 2 2 | 
             
              <tr>
         | 
| 3 3 | 
             
                <td class="text-muted">
         | 
| 4 | 
            -
                  <%= message %>
         | 
| 4 | 
            +
                  <%= message[0] %>
         | 
| 5 | 
            +
                </td>
         | 
| 6 | 
            +
                <td class="text-muted">
         | 
| 7 | 
            +
                  <%= message[1] %>
         | 
| 5 8 | 
             
                </td>
         | 
| 6 9 | 
             
                <td colspan="3" class="text-center text-muted">
         | 
| 7 10 | 
             
                  This message has either been removed or compacted and is no longer available.
         | 
| @@ -9,6 +12,9 @@ | |
| 9 12 | 
             
              </tr>
         | 
| 10 13 | 
             
            <% else %>
         | 
| 11 14 | 
             
              <tr>
         | 
| 15 | 
            +
                <td>
         | 
| 16 | 
            +
                  <%= message.partition %>
         | 
| 17 | 
            +
                </td>
         | 
| 12 18 | 
             
                <td>
         | 
| 13 19 | 
             
                  <%= message.offset %>
         | 
| 14 20 | 
             
                </td>
         | 
| @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
              <div class="card" >
         | 
| 3 3 | 
             
                <div class="card-body p-2">
         | 
| 4 4 | 
             
                  <p class="card-text mb-0 p-2">
         | 
| 5 | 
            -
                    <a href="<%= root_path('explorer', topic[:topic_name] | 
| 5 | 
            +
                    <a href="<%= root_path('explorer', topic[:topic_name]) %>">
         | 
| 6 6 | 
             
                      <%= topic[:topic_name] %> /
         | 
| 7 7 | 
             
                      <%= topic[:partition_count] %>
         | 
| 8 8 | 
             
                    </a>
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            <p class="text-end mb-4">
         | 
| 2 | 
            +
              Partitions:
         | 
| 3 | 
            +
              <span class="badge bg-secondary mt-1 mb-1">
         | 
| 4 | 
            +
                total: <%= @partitions_count %>
         | 
| 5 | 
            +
              </span>
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              <span class="badge bg-secondary mt-1 mb-1">
         | 
| 8 | 
            +
                visible:
         | 
| 9 | 
            +
                <%= [@active_partitions.first, @active_partitions.last].uniq.join(' to ') %>
         | 
| 10 | 
            +
              </span>
         | 
| 11 | 
            +
            </p>
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            <div class="container mb-4">
         | 
| 2 | 
            +
              <div class="row">
         | 
| 3 | 
            +
                <div class="col">
         | 
| 4 | 
            +
                  <h3>
         | 
| 5 | 
            +
                    <%= @topic_id %>
         | 
| 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 | 
            +
                            'explorer/partition_option',
         | 
| 22 | 
            +
                            local: :partition
         | 
| 23 | 
            +
                          )
         | 
| 24 | 
            +
                        %>
         | 
| 25 | 
            +
                      </select>
         | 
| 26 | 
            +
                    </div>
         | 
| 27 | 
            +
                </div>
         | 
| 28 | 
            +
              </div>
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              <hr>
         | 
| 31 | 
            +
            </div>
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            <div class="container">
         | 
| 34 | 
            +
              <div class="row mb-5">
         | 
| 35 | 
            +
                <div class="col-sm-12">
         | 
| 36 | 
            +
                  <%== partial('explorer/topic/partitions') %>
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  <% if @limited %>
         | 
| 39 | 
            +
                    <%== partial('explorer/topic/limited') %>
         | 
| 40 | 
            +
                  <% end %>
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  <% if @messages.empty? && params.current_page == 1 %>
         | 
| 43 | 
            +
                    <%== partial 'explorer/topic/empty' %>
         | 
| 44 | 
            +
                  <% else %>
         | 
| 45 | 
            +
                    <%== partial('explorer/partition/messages') %>
         | 
| 46 | 
            +
                  <% end %>
         | 
| 47 | 
            +
                </div>
         | 
| 48 | 
            +
              </div>
         | 
| 49 | 
            +
            </div>
         | 
| @@ -31,7 +31,7 @@ | |
| 31 31 | 
             
                  </a>
         | 
| 32 32 | 
             
                </li>
         | 
| 33 33 | 
             
                <li class="nav-item ms-3">
         | 
| 34 | 
            -
                  <a class="nav-link <%= nav_class(start_with: '/errors') %>" href="<%= root_path('errors | 
| 34 | 
            +
                  <a class="nav-link <%= nav_class(start_with: '/errors') %>" href="<%= root_path('errors') %>">
         | 
| 35 35 | 
             
                    Errors
         | 
| 36 36 | 
             
                  </a>
         | 
| 37 37 | 
             
                </li>
         | 
| @@ -1,28 +1,32 @@ | |
| 1 | 
            -
            <% if @ | 
| 1 | 
            +
            <% if @pagination && @pagination.paginate? %>
         | 
| 2 2 | 
             
              <div id="pagination" class="container mb-5">
         | 
| 3 3 | 
             
                <div class="row">
         | 
| 4 4 | 
             
                  <nav>
         | 
| 5 5 | 
             
                    <ul class="pagination justify-content-center">
         | 
| 6 | 
            -
                      <li class="page-item <%= 'disabled'  | 
| 7 | 
            -
                        <a class="page-link" href="<%= current_path( | 
| 6 | 
            +
                      <li class="page-item <%= 'disabled' unless @pagination.first_offset? %>">
         | 
| 7 | 
            +
                        <a class="page-link" href="<%= current_path(@pagination.offset_key => @pagination.first_offset) %>">
         | 
| 8 8 | 
             
                          <span>«</span>
         | 
| 9 9 | 
             
                        </a>
         | 
| 10 10 | 
             
                      </li>
         | 
| 11 11 |  | 
| 12 | 
            -
                      <li class="page-item <%= 'disabled'  | 
| 13 | 
            -
                        <a class="page-link" href="<%= current_path( | 
| 12 | 
            +
                      <li class="page-item <%= 'disabled' unless @pagination.previous_offset? %>">
         | 
| 13 | 
            +
                        <a class="page-link" href="<%= current_path(@pagination.offset_key => @pagination.previous_offset) %>">
         | 
| 14 14 | 
             
                          <span>‹ Prev</span>
         | 
| 15 15 | 
             
                        </a>
         | 
| 16 16 | 
             
                      </li>
         | 
| 17 17 |  | 
| 18 | 
            -
                       | 
| 19 | 
            -
                        < | 
| 20 | 
            -
                          < | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 18 | 
            +
                      <% if @pagination.current_offset? %>
         | 
| 19 | 
            +
                        <li class="page-item active disabled">
         | 
| 20 | 
            +
                          <a class="page-link" href="<%= current_path(@pagination.offset_key => @pagination.current_offset) %>">
         | 
| 21 | 
            +
                            <span>
         | 
| 22 | 
            +
                              <%= @pagination.current_label %>
         | 
| 23 | 
            +
                            </span>
         | 
| 24 | 
            +
                          </a>
         | 
| 25 | 
            +
                        </li>
         | 
| 26 | 
            +
                      <% end %>
         | 
| 23 27 |  | 
| 24 | 
            -
                      <li class="page-item <%= 'disabled' unless @ | 
| 25 | 
            -
                        <a class="page-link" href="<%= current_path( | 
| 28 | 
            +
                      <li class="page-item <%= 'disabled' unless @pagination.next_offset? %>">
         | 
| 29 | 
            +
                        <a class="page-link" href="<%= current_path(@pagination.offset_key => @pagination.next_offset) %>">
         | 
| 26 30 | 
             
                          <span>Next ›</span>
         | 
| 27 31 | 
             
                        </a>
         | 
| 28 32 | 
             
                      </li>
         | 
| @@ -7,14 +7,5 @@ | |
| 7 7 | 
             
            </p>
         | 
| 8 8 |  | 
| 9 9 | 
             
            <p>
         | 
| 10 | 
            -
              To fix this, you  | 
| 11 | 
            -
            </p>
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            <ul>
         | 
| 14 | 
            -
              <li>Run <code>bundle exec karafka-web install</code></li>
         | 
| 15 | 
            -
              <li>Run at least one Karafka consumer process</li>
         | 
| 16 | 
            -
            </ul>
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            <p class="mb-0">
         | 
| 19 | 
            -
              Any of the above, when successful, will bootstrap the initial state.
         | 
| 10 | 
            +
              To fix this, you need to ensure that the <code>bundle exec karafka-web install</code> runs successfully.
         | 
| 20 11 | 
             
            </p>
         | 
| @@ -8,7 +8,12 @@ | |
| 8 8 | 
             
                      "status/#{@status.connection.to_s}",
         | 
| 9 9 | 
             
                      locals: {
         | 
| 10 10 | 
             
                        title: 'Connection to Kafka',
         | 
| 11 | 
            -
                        description: partial( | 
| 11 | 
            +
                        description: partial(
         | 
| 12 | 
            +
                          "status/#{@status.connection.partial_namespace}/connection",
         | 
| 13 | 
            +
                          locals: {
         | 
| 14 | 
            +
                            details: @status.connection.details
         | 
| 15 | 
            +
                          }
         | 
| 16 | 
            +
                        )
         | 
| 12 17 | 
             
                      }
         | 
| 13 18 | 
             
                    )
         | 
| 14 19 | 
             
                  %>
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%# Expected to be empty. No content on success needed. %>
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            <p>
         | 
| 2 | 
            +
              High latency detected when connecting to the Kafka cluster from the Web-UI.
         | 
| 3 | 
            +
            </p>
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            <p>
         | 
| 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 | 
            +
            </p>
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            <p class="mb-0">
         | 
| 10 | 
            +
              It took Web-UI <strong><%= details[:time].round(2) %> ms</strong> to get the cluster info.
         | 
| 11 | 
            +
            </p>
         | 
    
        data/lib/karafka/web/version.rb
    CHANGED
    
    
    
        data.tar.gz.sig
    CHANGED
    
    | Binary file | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: karafka-web
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.6. | 
| 4 | 
            +
              version: 0.6.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Maciej Mensfeld
         | 
| @@ -35,7 +35,7 @@ cert_chain: | |
| 35 35 | 
             
              Qf04B9ceLUaC4fPVEz10FyobjaFoY4i32xRto3XnrzeAgfEe4swLq8bQsR3w/EF3
         | 
| 36 36 | 
             
              MGU0FeSV2Yj7Xc2x/7BzLK8xQn5l7Yy75iPF+KP3vVmDHnNl
         | 
| 37 37 | 
             
              -----END CERTIFICATE-----
         | 
| 38 | 
            -
            date: 2023- | 
| 38 | 
            +
            date: 2023-07-22 00:00:00.000000000 Z
         | 
| 39 39 | 
             
            dependencies:
         | 
| 40 40 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 41 41 | 
             
              name: erubi
         | 
| @@ -218,7 +218,15 @@ files: | |
| 218 218 | 
             
            - lib/karafka/web/ui/controllers/status.rb
         | 
| 219 219 | 
             
            - lib/karafka/web/ui/helpers/application_helper.rb
         | 
| 220 220 | 
             
            - lib/karafka/web/ui/lib/hash_proxy.rb
         | 
| 221 | 
            -
            - lib/karafka/web/ui/lib/ | 
| 221 | 
            +
            - lib/karafka/web/ui/lib/paginations/base.rb
         | 
| 222 | 
            +
            - lib/karafka/web/ui/lib/paginations/offset_based.rb
         | 
| 223 | 
            +
            - lib/karafka/web/ui/lib/paginations/page_based.rb
         | 
| 224 | 
            +
            - lib/karafka/web/ui/lib/paginations/paginators/arrays.rb
         | 
| 225 | 
            +
            - lib/karafka/web/ui/lib/paginations/paginators/base.rb
         | 
| 226 | 
            +
            - lib/karafka/web/ui/lib/paginations/paginators/partitions.rb
         | 
| 227 | 
            +
            - lib/karafka/web/ui/lib/paginations/paginators/sets.rb
         | 
| 228 | 
            +
            - lib/karafka/web/ui/lib/ttl_cache.rb
         | 
| 229 | 
            +
            - lib/karafka/web/ui/models/cluster_info.rb
         | 
| 222 230 | 
             
            - lib/karafka/web/ui/models/consumer_group.rb
         | 
| 223 231 | 
             
            - lib/karafka/web/ui/models/counters.rb
         | 
| 224 232 | 
             
            - lib/karafka/web/ui/models/health.rb
         | 
| @@ -264,7 +272,10 @@ files: | |
| 264 272 | 
             
            - lib/karafka/web/ui/pro/views/errors/_breadcrumbs.erb
         | 
| 265 273 | 
             
            - lib/karafka/web/ui/pro/views/errors/_error.erb
         | 
| 266 274 | 
             
            - lib/karafka/web/ui/pro/views/errors/_partition_option.erb
         | 
| 275 | 
            +
            - lib/karafka/web/ui/pro/views/errors/_table.erb
         | 
| 276 | 
            +
            - lib/karafka/web/ui/pro/views/errors/_title_with_select.erb
         | 
| 267 277 | 
             
            - lib/karafka/web/ui/pro/views/errors/index.erb
         | 
| 278 | 
            +
            - lib/karafka/web/ui/pro/views/errors/partition.erb
         | 
| 268 279 | 
             
            - lib/karafka/web/ui/pro/views/errors/show.erb
         | 
| 269 280 | 
             
            - lib/karafka/web/ui/pro/views/explorer/_breadcrumbs.erb
         | 
| 270 281 | 
             
            - lib/karafka/web/ui/pro/views/explorer/_detail.erb
         | 
| @@ -280,6 +291,10 @@ files: | |
| 280 291 | 
             
            - lib/karafka/web/ui/pro/views/explorer/partition/_messages.erb
         | 
| 281 292 | 
             
            - lib/karafka/web/ui/pro/views/explorer/partition/_watermark_offsets.erb
         | 
| 282 293 | 
             
            - lib/karafka/web/ui/pro/views/explorer/show.erb
         | 
| 294 | 
            +
            - lib/karafka/web/ui/pro/views/explorer/topic.erb
         | 
| 295 | 
            +
            - lib/karafka/web/ui/pro/views/explorer/topic/_empty.erb
         | 
| 296 | 
            +
            - lib/karafka/web/ui/pro/views/explorer/topic/_limited.erb
         | 
| 297 | 
            +
            - lib/karafka/web/ui/pro/views/explorer/topic/_partitions.erb
         | 
| 283 298 | 
             
            - lib/karafka/web/ui/pro/views/health/_breadcrumbs.erb
         | 
| 284 299 | 
             
            - lib/karafka/web/ui/pro/views/health/_partition.erb
         | 
| 285 300 | 
             
            - lib/karafka/web/ui/pro/views/health/index.erb
         | 
| @@ -349,6 +364,8 @@ files: | |
| 349 364 | 
             
            - lib/karafka/web/ui/views/status/failures/_topics.erb
         | 
| 350 365 | 
             
            - lib/karafka/web/ui/views/status/info/_components.erb
         | 
| 351 366 | 
             
            - lib/karafka/web/ui/views/status/show.erb
         | 
| 367 | 
            +
            - lib/karafka/web/ui/views/status/successes/_connection.erb
         | 
| 368 | 
            +
            - lib/karafka/web/ui/views/status/warnings/_connection.erb
         | 
| 352 369 | 
             
            - lib/karafka/web/ui/views/status/warnings/_pro_subscription.erb
         | 
| 353 370 | 
             
            - lib/karafka/web/version.rb
         | 
| 354 371 | 
             
            - renovate.json
         | 
    
        metadata.gz.sig
    CHANGED
    
    | Binary file |