karafka-web 0.6.2 → 0.6.3
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 +2 -8
- data/Gemfile.lock +1 -1
- data/lib/karafka/web/config.rb +0 -2
- data/lib/karafka/web/ui/base.rb +2 -6
- data/lib/karafka/web/ui/controllers/base.rb +0 -17
- data/lib/karafka/web/ui/controllers/cluster.rb +2 -5
- data/lib/karafka/web/ui/controllers/consumers.rb +1 -3
- data/lib/karafka/web/ui/controllers/errors.rb +6 -19
- data/lib/karafka/web/ui/controllers/jobs.rb +1 -3
- data/lib/karafka/web/ui/controllers/requests/params.rb +0 -10
- data/lib/karafka/web/ui/lib/paginate_array.rb +38 -0
- data/lib/karafka/web/ui/models/message.rb +38 -114
- data/lib/karafka/web/ui/models/status.rb +1 -3
- data/lib/karafka/web/ui/pro/app.rb +3 -11
- data/lib/karafka/web/ui/pro/controllers/consumers.rb +1 -3
- data/lib/karafka/web/ui/pro/controllers/dlq.rb +2 -1
- data/lib/karafka/web/ui/pro/controllers/errors.rb +10 -43
- data/lib/karafka/web/ui/pro/controllers/explorer.rb +7 -52
- data/lib/karafka/web/ui/pro/views/errors/_breadcrumbs.erb +6 -8
- 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/index.erb +56 -9
- data/lib/karafka/web/ui/pro/views/explorer/_breadcrumbs.erb +1 -1
- data/lib/karafka/web/ui/pro/views/explorer/_message.erb +2 -8
- 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 +0 -1
- data/lib/karafka/web/ui/pro/views/explorer/partition.erb +1 -1
- 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 +12 -16
- data/lib/karafka/web/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +2 -17
- metadata.gz.sig +0 -0
- data/lib/karafka/web/ui/lib/paginations/base.rb +0 -61
- data/lib/karafka/web/ui/lib/paginations/offset_based.rb +0 -96
- data/lib/karafka/web/ui/lib/paginations/page_based.rb +0 -70
- data/lib/karafka/web/ui/lib/paginations/paginators/arrays.rb +0 -33
- data/lib/karafka/web/ui/lib/paginations/paginators/base.rb +0 -23
- data/lib/karafka/web/ui/lib/paginations/paginators/partitions.rb +0 -52
- data/lib/karafka/web/ui/lib/paginations/paginators/sets.rb +0 -85
- data/lib/karafka/web/ui/lib/ttl_cache.rb +0 -74
- data/lib/karafka/web/ui/models/cluster_info.rb +0 -59
- data/lib/karafka/web/ui/pro/views/errors/_table.erb +0 -21
- data/lib/karafka/web/ui/pro/views/errors/_title_with_select.erb +0 -31
- data/lib/karafka/web/ui/pro/views/errors/partition.erb +0 -17
- data/lib/karafka/web/ui/pro/views/explorer/topic/_empty.erb +0 -3
- data/lib/karafka/web/ui/pro/views/explorer/topic/_limited.erb +0 -4
- data/lib/karafka/web/ui/pro/views/explorer/topic/_partitions.erb +0 -11
- data/lib/karafka/web/ui/pro/views/explorer/topic.erb +0 -49
@@ -18,11 +18,10 @@ module Karafka
|
|
18
18
|
module Controllers
|
19
19
|
# Data explorer controller
|
20
20
|
class Explorer < Ui::Controllers::Base
|
21
|
-
include Ui::Lib::Paginations
|
22
|
-
|
23
21
|
# Lists all the topics we can explore
|
24
22
|
def index
|
25
|
-
@topics =
|
23
|
+
@topics = Karafka::Admin
|
24
|
+
.cluster_info
|
26
25
|
.topics
|
27
26
|
.reject { |topic| topic[:topic_name] == '__consumer_offsets' }
|
28
27
|
.sort_by { |topic| topic[:topic_name] }
|
@@ -30,34 +29,6 @@ module Karafka
|
|
30
29
|
respond
|
31
30
|
end
|
32
31
|
|
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
|
-
|
61
32
|
# Shows messages available in a given partition
|
62
33
|
#
|
63
34
|
# @param topic_id [String]
|
@@ -65,16 +36,13 @@ module Karafka
|
|
65
36
|
def partition(topic_id, partition_id)
|
66
37
|
@topic_id = topic_id
|
67
38
|
@partition_id = partition_id
|
68
|
-
@watermark_offsets = Ui::Models::WatermarkOffsets.find(topic_id, partition_id)
|
69
|
-
@partitions_count = Models::ClusterInfo.partitions_count(topic_id)
|
70
39
|
|
71
|
-
|
40
|
+
@watermark_offsets = Ui::Models::WatermarkOffsets.find(topic_id, partition_id)
|
72
41
|
|
73
|
-
|
74
|
-
|
75
|
-
@
|
76
|
-
|
77
|
-
@messages.map(&:offset)
|
42
|
+
@previous_page, @messages, @next_page, @partitions_count = Ui::Models::Message.page(
|
43
|
+
@topic_id,
|
44
|
+
@partition_id,
|
45
|
+
@params.current_page
|
78
46
|
)
|
79
47
|
|
80
48
|
respond
|
@@ -106,19 +74,6 @@ module Karafka
|
|
106
74
|
|
107
75
|
respond
|
108
76
|
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
|
122
77
|
end
|
123
78
|
end
|
124
79
|
end
|
@@ -1,16 +1,14 @@
|
|
1
1
|
<li class="breadcrumb-item">
|
2
|
-
<a href="<%= root_path('errors') %>">
|
2
|
+
<a href="<%= root_path('errors', 0) %>">
|
3
3
|
Errors
|
4
4
|
</a>
|
5
5
|
</li>
|
6
6
|
|
7
|
-
|
8
|
-
<
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
</li>
|
13
|
-
<% end %>
|
7
|
+
<li class="breadcrumb-item">
|
8
|
+
<a href="<%= root_path('errors', @partition_id) %>">
|
9
|
+
Partition <%= @partition_id %>
|
10
|
+
</a>
|
11
|
+
</li>
|
14
12
|
|
15
13
|
<% if @offset %>
|
16
14
|
<li class="breadcrumb-item">
|
@@ -1,18 +1,65 @@
|
|
1
|
-
|
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
|
+
@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>
|
2
32
|
|
3
33
|
<div class="container">
|
4
34
|
<div class="row mb-5">
|
5
35
|
<div class="col-sm-12">
|
6
|
-
<%== partial('explorer/
|
7
|
-
|
8
|
-
<% if @limited %>
|
9
|
-
<%== partial('explorer/topic/limited') %>
|
10
|
-
<% end %>
|
36
|
+
<%== partial('explorer/partition/watermark_offsets') %>
|
11
37
|
|
12
|
-
<% if @
|
13
|
-
<%== partial '
|
38
|
+
<% if @watermark_offsets.empty? %>
|
39
|
+
<%== partial 'errors/no_errors' %>
|
40
|
+
<% elsif @watermark_offsets.cleaned? %>
|
41
|
+
<%== partial 'errors/cleaned' %>
|
14
42
|
<% else %>
|
15
|
-
|
43
|
+
<table class="processes bg-white table table-hover table-bordered table-striped mb-0 align-middle">
|
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>
|
16
63
|
<% end %>
|
17
64
|
</div>
|
18
65
|
</div>
|
@@ -1,10 +1,7 @@
|
|
1
|
-
<% if message.is_a?(
|
1
|
+
<% if message.is_a?(Integer) %>
|
2
2
|
<tr>
|
3
3
|
<td class="text-muted">
|
4
|
-
<%= message
|
5
|
-
</td>
|
6
|
-
<td class="text-muted">
|
7
|
-
<%= message[1] %>
|
4
|
+
<%= message %>
|
8
5
|
</td>
|
9
6
|
<td colspan="3" class="text-center text-muted">
|
10
7
|
This message has either been removed or compacted and is no longer available.
|
@@ -12,9 +9,6 @@
|
|
12
9
|
</tr>
|
13
10
|
<% else %>
|
14
11
|
<tr>
|
15
|
-
<td>
|
16
|
-
<%= message.partition %>
|
17
|
-
</td>
|
18
12
|
<td>
|
19
13
|
<%= message.offset %>
|
20
14
|
</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], 0) %>">
|
6
6
|
<%= topic[:topic_name] %> /
|
7
7
|
<%= topic[:partition_count] %>
|
8
8
|
</a>
|
@@ -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/0') %>">
|
35
35
|
Errors
|
36
36
|
</a>
|
37
37
|
</li>
|
@@ -1,32 +1,28 @@
|
|
1
|
-
<% if @
|
1
|
+
<% if @current_page && (@current_page > 1 || @next_page) %>
|
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' if @current_page <= 1 %>">
|
7
|
+
<a class="page-link" href="<%= current_path(page: 1) %>">
|
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' if @current_page <= 1 %>">
|
13
|
+
<a class="page-link" href="<%= current_path(page: @current_page - 1) %>">
|
14
14
|
<span>‹ Prev</span>
|
15
15
|
</a>
|
16
16
|
</li>
|
17
17
|
|
18
|
-
|
19
|
-
<
|
20
|
-
<
|
21
|
-
|
22
|
-
|
23
|
-
</span>
|
24
|
-
</a>
|
25
|
-
</li>
|
26
|
-
<% end %>
|
18
|
+
<li class="page-item active disabled">
|
19
|
+
<a class="page-link" href="<%= current_path(page: @current_page) %>">
|
20
|
+
<span><%= @current_page %></span>
|
21
|
+
</a>
|
22
|
+
</li>
|
27
23
|
|
28
|
-
<li class="page-item <%= 'disabled' unless @
|
29
|
-
<a class="page-link" href="<%= current_path(
|
24
|
+
<li class="page-item <%= 'disabled' unless @next_page %>">
|
25
|
+
<a class="page-link" href="<%= current_path(page: @next_page) %>">
|
30
26
|
<span>Next ›</span>
|
31
27
|
</a>
|
32
28
|
</li>
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Mensfeld
|
@@ -218,15 +218,7 @@ 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/
|
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
|
221
|
+
- lib/karafka/web/ui/lib/paginate_array.rb
|
230
222
|
- lib/karafka/web/ui/models/consumer_group.rb
|
231
223
|
- lib/karafka/web/ui/models/counters.rb
|
232
224
|
- lib/karafka/web/ui/models/health.rb
|
@@ -272,10 +264,7 @@ files:
|
|
272
264
|
- lib/karafka/web/ui/pro/views/errors/_breadcrumbs.erb
|
273
265
|
- lib/karafka/web/ui/pro/views/errors/_error.erb
|
274
266
|
- 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
|
277
267
|
- lib/karafka/web/ui/pro/views/errors/index.erb
|
278
|
-
- lib/karafka/web/ui/pro/views/errors/partition.erb
|
279
268
|
- lib/karafka/web/ui/pro/views/errors/show.erb
|
280
269
|
- lib/karafka/web/ui/pro/views/explorer/_breadcrumbs.erb
|
281
270
|
- lib/karafka/web/ui/pro/views/explorer/_detail.erb
|
@@ -291,10 +280,6 @@ files:
|
|
291
280
|
- lib/karafka/web/ui/pro/views/explorer/partition/_messages.erb
|
292
281
|
- lib/karafka/web/ui/pro/views/explorer/partition/_watermark_offsets.erb
|
293
282
|
- 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
|
298
283
|
- lib/karafka/web/ui/pro/views/health/_breadcrumbs.erb
|
299
284
|
- lib/karafka/web/ui/pro/views/health/_partition.erb
|
300
285
|
- lib/karafka/web/ui/pro/views/health/index.erb
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Karafka
|
4
|
-
module Web
|
5
|
-
module Ui
|
6
|
-
module Lib
|
7
|
-
# Namespace for all the types of pagination engines we want to support
|
8
|
-
module Paginations
|
9
|
-
# Abstraction on top of pagination, so we can alter pagination key and other things
|
10
|
-
# for non-standard pagination views (non page based, etc)
|
11
|
-
#
|
12
|
-
# @note We do not use `_page` explicitly to indicate, that the page scope may not operate
|
13
|
-
# on numerable pages (1,2,3,4) but can operate on offsets or times, etc. `_offset` is
|
14
|
-
# more general and may refer to many types of pagination.
|
15
|
-
class Base
|
16
|
-
attr_reader :previous_offset, :current_offset, :next_offset
|
17
|
-
|
18
|
-
# @return [Boolean] Should we show pagination at all
|
19
|
-
def paginate?
|
20
|
-
raise NotImplementedError, 'Implement in a subclass'
|
21
|
-
end
|
22
|
-
|
23
|
-
# @return [Boolean] Should first offset link be active. If false, the first offset link
|
24
|
-
# will be disabled
|
25
|
-
def first_offset?
|
26
|
-
raise NotImplementedError, 'Implement in a subclass'
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [String] first offset url value
|
30
|
-
def first_offset
|
31
|
-
raise NotImplementedError, 'Implement in a subclass'
|
32
|
-
end
|
33
|
-
|
34
|
-
# @return [Boolean] Should previous offset link be active. If false, the previous
|
35
|
-
# offset link will be disabled
|
36
|
-
def previous_offset?
|
37
|
-
raise NotImplementedError, 'Implement in a subclass'
|
38
|
-
end
|
39
|
-
|
40
|
-
# @return [Boolean] Should we show current offset. If false, the current offset link
|
41
|
-
# will not be visible at all. Useful for non-linear pagination.
|
42
|
-
def current_offset?
|
43
|
-
raise NotImplementedError, 'Implement in a subclass'
|
44
|
-
end
|
45
|
-
|
46
|
-
# @return [Boolean] Should we show next offset pagination. If false, next offset link
|
47
|
-
# will be disabled.
|
48
|
-
def next_offset?
|
49
|
-
raise NotImplementedError, 'Implement in a subclass'
|
50
|
-
end
|
51
|
-
|
52
|
-
# @return [String] the url offset key
|
53
|
-
def offset_key
|
54
|
-
raise NotImplementedError, 'Implement in a subclass'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Karafka
|
4
|
-
module Web
|
5
|
-
module Ui
|
6
|
-
module Lib
|
7
|
-
module Paginations
|
8
|
-
# Kafka offset based pagination backend
|
9
|
-
#
|
10
|
-
# Allows us to support paginating over offsets
|
11
|
-
class OffsetBased < Base
|
12
|
-
# @param previous_offset [Integer, false] previous offset or false if should not be
|
13
|
-
# presented
|
14
|
-
# @param current_offset [Integer] current offset
|
15
|
-
# @param next_offset [Integer, Boolean] should we show next offset page button. If
|
16
|
-
# false it will not be presented.
|
17
|
-
# @param visible_offsets [Array<Integer>] offsets that are visible in the paginated
|
18
|
-
# view. It is needed for the current page label
|
19
|
-
def initialize(
|
20
|
-
previous_offset,
|
21
|
-
current_offset,
|
22
|
-
next_offset,
|
23
|
-
visible_offsets
|
24
|
-
)
|
25
|
-
@previous_offset = previous_offset
|
26
|
-
@current_offset = current_offset
|
27
|
-
@next_offset = next_offset
|
28
|
-
@visible_offsets = visible_offsets
|
29
|
-
super()
|
30
|
-
end
|
31
|
-
|
32
|
-
# Show pagination only when there is more than one page of results to be presented
|
33
|
-
#
|
34
|
-
# @return [Boolean]
|
35
|
-
def paginate?
|
36
|
-
@current_offset && (!!@previous_offset || !!@next_offset)
|
37
|
-
end
|
38
|
-
|
39
|
-
# @return [Boolean] active only when we are not on the first page. First page is always
|
40
|
-
# indicated by the current offset being -1. If there is someone that sets up the
|
41
|
-
# current offset to a value equal to the last message in the topic partition, we do
|
42
|
-
# not consider it as a first page and we allow to "reset" to -1 via the first page
|
43
|
-
# button
|
44
|
-
def first_offset?
|
45
|
-
@current_offset != -1
|
46
|
-
end
|
47
|
-
|
48
|
-
# @return [Boolean] first page offset is always nothing because we use the default -1
|
49
|
-
# for the offset.
|
50
|
-
def first_offset
|
51
|
-
false
|
52
|
-
end
|
53
|
-
|
54
|
-
# @return [Boolean] Active previous page link when it is not the first page
|
55
|
-
def previous_offset?
|
56
|
-
!!@previous_offset
|
57
|
-
end
|
58
|
-
|
59
|
-
# @return [Boolean] We show current label with offsets that are present on the given
|
60
|
-
# page
|
61
|
-
def current_offset?
|
62
|
-
true
|
63
|
-
end
|
64
|
-
|
65
|
-
# @return [Boolean] move to the next page if not false. False indicates, that there is
|
66
|
-
# no next page to move to
|
67
|
-
def next_offset?
|
68
|
-
!!@next_offset
|
69
|
-
end
|
70
|
-
|
71
|
-
# If there is no next offset, we point to 0 as there should be no smaller offset than
|
72
|
-
# that in Kafka ever
|
73
|
-
# @return [Integer]
|
74
|
-
def next_offset
|
75
|
-
next_offset? ? @next_offset : 0
|
76
|
-
end
|
77
|
-
|
78
|
-
# @return [String] label of the current page. It is combined out of the first and
|
79
|
-
# the last offsets to show the range where we are. It will be empty if no offsets
|
80
|
-
# but this is not a problem as then we should not display pagination at all
|
81
|
-
def current_label
|
82
|
-
first = @visible_offsets.first
|
83
|
-
last = @visible_offsets.last
|
84
|
-
[first, last].compact.uniq.join(' - ').to_s
|
85
|
-
end
|
86
|
-
|
87
|
-
# @return [String] for offset based pagination we use the offset param name
|
88
|
-
def offset_key
|
89
|
-
'offset'
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Karafka
|
4
|
-
module Web
|
5
|
-
module Ui
|
6
|
-
module Lib
|
7
|
-
module Paginations
|
8
|
-
# Regular page-based pagination engine
|
9
|
-
class PageBased < Base
|
10
|
-
# @param current_offset [Integer] current page
|
11
|
-
# @param show_next_offset [Boolean] should we show next page
|
12
|
-
# (value is computed automatically)
|
13
|
-
def initialize(
|
14
|
-
current_offset,
|
15
|
-
show_next_offset
|
16
|
-
)
|
17
|
-
@previous_offset = current_offset - 1
|
18
|
-
@current_offset = current_offset
|
19
|
-
@next_offset = show_next_offset ? current_offset + 1 : false
|
20
|
-
super()
|
21
|
-
end
|
22
|
-
|
23
|
-
# Show pagination only when there is more than one page
|
24
|
-
# @return [Boolean]
|
25
|
-
def paginate?
|
26
|
-
@current_offset && (@current_offset > 1 || !!@next_offset)
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [Boolean] active the first page link when we are not on the first page
|
30
|
-
def first_offset?
|
31
|
-
@current_offset > 1
|
32
|
-
end
|
33
|
-
|
34
|
-
# @return [Boolean] first page for page based pagination is always empty as it moves us
|
35
|
-
# to the initial page so we do not include any page info
|
36
|
-
def first_offset
|
37
|
-
false
|
38
|
-
end
|
39
|
-
|
40
|
-
# @return [Boolean] Active previous page link when it is not the first page
|
41
|
-
def previous_offset?
|
42
|
-
@current_offset > 1
|
43
|
-
end
|
44
|
-
|
45
|
-
# @return [Boolean] always show current offset pagination value
|
46
|
-
def current_offset?
|
47
|
-
true
|
48
|
-
end
|
49
|
-
|
50
|
-
# @return [String] label of the current page
|
51
|
-
def current_label
|
52
|
-
@current_offset.to_s
|
53
|
-
end
|
54
|
-
|
55
|
-
# @return [Boolean] move to the next page if not false. False indicates, that there is
|
56
|
-
# no next page to move to
|
57
|
-
def next_offset?
|
58
|
-
@next_offset
|
59
|
-
end
|
60
|
-
|
61
|
-
# @return [String] for page pages pagination, always use page as the url value
|
62
|
-
def offset_key
|
63
|
-
'page'
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|