karafka-web 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +60 -6
  4. data/Gemfile.lock +14 -14
  5. data/karafka-web.gemspec +3 -3
  6. data/lib/karafka/web/config.rb +11 -5
  7. data/lib/karafka/web/installer.rb +2 -3
  8. data/lib/karafka/web/tracking/consumers/contracts/consumer_group.rb +1 -1
  9. data/lib/karafka/web/tracking/consumers/contracts/job.rb +4 -1
  10. data/lib/karafka/web/tracking/consumers/contracts/partition.rb +1 -1
  11. data/lib/karafka/web/tracking/consumers/contracts/report.rb +1 -1
  12. data/lib/karafka/web/tracking/consumers/contracts/subscription_group.rb +1 -1
  13. data/lib/karafka/web/tracking/consumers/contracts/topic.rb +3 -1
  14. data/lib/karafka/web/tracking/consumers/listeners/base.rb +2 -2
  15. data/lib/karafka/web/tracking/consumers/listeners/errors.rb +8 -44
  16. data/lib/karafka/web/tracking/consumers/listeners/processing.rb +5 -0
  17. data/lib/karafka/web/tracking/consumers/reporter.rb +151 -0
  18. data/lib/karafka/web/tracking/contracts/base.rb +34 -0
  19. data/lib/karafka/web/tracking/contracts/error.rb +31 -0
  20. data/lib/karafka/web/tracking/helpers/error_info.rb +50 -0
  21. data/lib/karafka/web/tracking/memoized_shell.rb +1 -1
  22. data/lib/karafka/web/tracking/producers/listeners/base.rb +33 -0
  23. data/lib/karafka/web/tracking/producers/listeners/errors.rb +66 -0
  24. data/lib/karafka/web/tracking/producers/listeners/reporter.rb +21 -0
  25. data/lib/karafka/web/tracking/producers/reporter.rb +101 -0
  26. data/lib/karafka/web/tracking/producers/sampler.rb +42 -0
  27. data/lib/karafka/web/ui/controllers/consumers.rb +2 -4
  28. data/lib/karafka/web/ui/models/counters.rb +51 -0
  29. data/lib/karafka/web/ui/pro/controllers/consumers.rb +2 -3
  30. data/lib/karafka/web/ui/pro/views/consumers/consumer/_job.erb +6 -6
  31. data/lib/karafka/web/ui/pro/views/consumers/index.erb +25 -21
  32. data/lib/karafka/web/ui/pro/views/consumers/jobs.erb +1 -1
  33. data/lib/karafka/web/ui/pro/views/errors/_breadcrumbs.erb +1 -2
  34. data/lib/karafka/web/ui/pro/views/errors/_error.erb +8 -6
  35. data/lib/karafka/web/ui/pro/views/errors/show.erb +3 -2
  36. data/lib/karafka/web/ui/public/stylesheets/application.css +4 -0
  37. data/lib/karafka/web/ui/views/consumers/_no_consumers.erb +9 -0
  38. data/lib/karafka/web/ui/views/consumers/index.erb +24 -20
  39. data/lib/karafka/web/ui/views/errors/_breadcrumbs.erb +1 -2
  40. data/lib/karafka/web/ui/views/errors/_detail.erb +9 -1
  41. data/lib/karafka/web/ui/views/errors/_error.erb +8 -6
  42. data/lib/karafka/web/ui/views/errors/show.erb +50 -2
  43. data/lib/karafka/web/ui/views/shared/_feature_pro.erb +4 -0
  44. data/lib/karafka/web/ui/views/shared/_pagination.erb +8 -2
  45. data/lib/karafka/web/ui/views/shared/exceptions/pro_only.erb +0 -4
  46. data/lib/karafka/web/version.rb +1 -1
  47. data.tar.gz.sig +0 -0
  48. metadata +26 -16
  49. metadata.gz.sig +0 -0
  50. data/lib/karafka/web/tracking/base_contract.rb +0 -31
  51. data/lib/karafka/web/tracking/reporter.rb +0 -144
  52. data/lib/karafka/web/ui/pro/views/consumers/_summary.erb +0 -81
  53. data/lib/karafka/web/ui/pro/views/errors/_cleaned.erb +0 -3
  54. data/lib/karafka/web/ui/pro/views/errors/_detail.erb +0 -31
  55. data/lib/karafka/web/ui/pro/views/errors/_no_errors.erb +0 -3
  56. data/lib/karafka/web/ui/pro/views/jobs/_breadcrumbs.erb +0 -5
  57. data/lib/karafka/web/ui/views/consumers/_breadcrumbs.erb +0 -27
@@ -9,14 +9,16 @@
9
9
 
10
10
  <tr>
11
11
  <td>
12
- <% if error[:details].key?(:topic) %>
13
- <%= error[:details][:topic] %>: <%= error[:details][:partition] %>
14
- <% else %>
15
- <%= error[:type] %>
16
- <% end %>
12
+ <span class="badge bg-secondary badge-topic">
13
+ <% if error[:details].key?(:topic) %>
14
+ <%= error[:details][:topic] %>: <%= error[:details][:partition] %>
15
+ <% else %>
16
+ <%= error[:type] %>
17
+ <% end %>
18
+ </span>
17
19
  </td>
18
20
  <td>
19
- <%== error[:process_name] %>
21
+ <%== error[:process][:name] %>
20
22
  </td>
21
23
  <td>
22
24
  <%= error[:error_class] %>:
@@ -1,12 +1,20 @@
1
1
  <%==
2
2
  type = @error_message.payload[:type]
3
3
  error_class = @error_message.payload[:error_class]
4
- offset = @error_message.offset
5
4
 
6
- view_title("#{type}: #{error_class} #{offset}", hr: true)
5
+ view_title("#{type}: #{error_class}")
7
6
  %>
8
7
 
9
8
  <div class="container">
9
+ <div class="row mb-4">
10
+ <div class="col-sm-12">
11
+ <h5 class="mb-2">
12
+ Metadata
13
+ </h5>
14
+ <hr/>
15
+ </div>
16
+ </div>
17
+
10
18
  <div class="row mb-5">
11
19
  <div class="col-sm-12 table-responsive">
12
20
  <table class="processes bg-white table table-hover table-bordered table-striped mb-0 align-middle">
@@ -27,4 +35,44 @@
27
35
  </table>
28
36
  </div>
29
37
  </div>
38
+
39
+ <div class="row mb-2">
40
+ <div class="col-sm-12">
41
+ <h5 class="mb-2">
42
+ Backtrace
43
+ </h5>
44
+ <hr/>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="mb-4">
49
+ <%== partial 'shared/feature_pro' %>
50
+ </div>
51
+
52
+ <div class="row mb-4">
53
+ <div class="col-sm-12">
54
+ <div class="card">
55
+ <div class="card-body">
56
+ <pre class="m-0 p-0 blurred"><code class="wrapped json p-0 m-0">this is just an example backtrace
57
+ please subscribe to our Pro offering to be able to view the real one
58
+ gems/karafka-rdkafka/lib/rdkafka/consumer.rb:255:in `query_watermark_offsets'
59
+ gems/karafka/lib/karafka/admin.rb:56:in `block in read_topic'
60
+ gems/karafka/lib/karafka/admin.rb:184:in `with_consumer'
61
+ gems/karafka/lib/karafka/admin.rb:55:in `read_topic'
62
+ /mnt/software/Karafka/karafka-web/lib/karafka/web/processing/consumers/state.rb:19:in `current'
63
+ /mnt/software/Karafka/karafka-web/lib/karafka/web/processing/consumers/aggregator.rb:45:in `state'
64
+ /mnt/software/Karafka/karafka-web/lib/karafka/web/processing/consumers/aggregator.rb:38:in `to_json'
65
+ gems/karafka/lib/karafka/processing/strategies/default.rb:136:in `block in handle_shutdown'
66
+ gems/karafka-core/lib/karafka/core/monitoring/notifications.rb:118:in `measure_time_taken'
67
+ gems/karafka-core/lib/karafka/core/monitoring/notifications.rb:94:in `instrument'
68
+ gems/karafka-core/lib/karafka/core/monitoring/monitor.rb:34:in `instrument'
69
+ gems/karafka/lib/karafka/processing/strategies/default.rb:135:in `handle_shutdown'
70
+ gems/karafka/lib/karafka/base_consumer.rb:134:in `on_shutdown'
71
+ gems/karafka/lib/karafka/processing/executor.rb:123:in `shutdown'
72
+ gems/karafka/lib/karafka/processing/jobs/shutdown.rb:18:in `call'
73
+ gems/karafka/lib/karafka/helpers/async.rb:28:in `block in async_call'</code></pre>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ </div>
30
78
  </div>
@@ -0,0 +1,4 @@
1
+ <div class="alert alert-light">
2
+ This Web UI feature is available only to <a target="_blank" href="https://karafka.io/#become-pro">Pro</a>
3
+ users.
4
+ </div>
@@ -3,9 +3,15 @@
3
3
  <div class="row">
4
4
  <nav>
5
5
  <ul class="pagination justify-content-center">
6
+ <li class="page-item <%= 'disabled' if @current_page <= 1 %>">
7
+ <a class="page-link" href="<%= current_path(page: 1) %>">
8
+ <span>&laquo;</span>
9
+ </a>
10
+ </li>
11
+
6
12
  <li class="page-item <%= 'disabled' if @current_page <= 1 %>">
7
13
  <a class="page-link" href="<%= current_path(page: @current_page - 1) %>">
8
- <span>&laquo; Prev</span>
14
+ <span>&lsaquo; Prev</span>
9
15
  </a>
10
16
  </li>
11
17
 
@@ -17,7 +23,7 @@
17
23
 
18
24
  <li class="page-item <%= 'disabled' unless @next_page %>">
19
25
  <a class="page-link" href="<%= current_path(page: @next_page) %>">
20
- <span>Next &raquo;</span>
26
+ <span>Next &rsaquo;</span>
21
27
  </a>
22
28
  </li>
23
29
  </ul>
@@ -37,10 +37,6 @@
37
37
  <li>Architecture consultations</li>
38
38
  </ul>
39
39
 
40
- <p class="mb-5">
41
- If you were looking for a given process or other real-time information, the state might have changed, and the information you are looking for no longer exists.
42
- </p>
43
-
44
40
  <p>
45
41
  <a href="<%= root_path %>" class="btn btn-primary">Go Home</a>
46
42
  <a href="https://karafka.io/#become-pro" class="btn btn-success" target="_blank">Become Pro!</a>
@@ -3,6 +3,6 @@
3
3
  module Karafka
4
4
  module Web
5
5
  # Current gem version
6
- VERSION = '0.5.2'
6
+ VERSION = '0.6.0'
7
7
  end
8
8
  end
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.5.2
4
+ version: 0.6.0
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-05-22 00:00:00.000000000 Z
38
+ date: 2023-06-13 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: erubi
@@ -57,7 +57,7 @@ dependencies:
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: 2.0.40
60
+ version: 2.1.4
61
61
  - - "<"
62
62
  - !ruby/object:Gem::Version
63
63
  version: 3.0.0
@@ -67,7 +67,7 @@ dependencies:
67
67
  requirements:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
- version: 2.0.40
70
+ version: 2.1.4
71
71
  - - "<"
72
72
  - !ruby/object:Gem::Version
73
73
  version: 3.0.0
@@ -77,7 +77,7 @@ dependencies:
77
77
  requirements:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: 2.0.12
80
+ version: 2.0.13
81
81
  - - "<"
82
82
  - !ruby/object:Gem::Version
83
83
  version: 3.0.0
@@ -87,7 +87,7 @@ dependencies:
87
87
  requirements:
88
88
  - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: 2.0.12
90
+ version: 2.0.13
91
91
  - - "<"
92
92
  - !ruby/object:Gem::Version
93
93
  version: 3.0.0
@@ -97,14 +97,20 @@ dependencies:
97
97
  requirements:
98
98
  - - "~>"
99
99
  - !ruby/object:Gem::Version
100
- version: '3.63'
100
+ version: '3.68'
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '3.68'
101
104
  type: :runtime
102
105
  prerelease: false
103
106
  version_requirements: !ruby/object:Gem::Requirement
104
107
  requirements:
105
108
  - - "~>"
106
109
  - !ruby/object:Gem::Version
107
- version: '3.63'
110
+ version: '3.68'
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '3.68'
108
114
  - !ruby/object:Gem::Dependency
109
115
  name: tilt
110
116
  requirement: !ruby/object:Gem::Requirement
@@ -171,7 +177,6 @@ files:
171
177
  - lib/karafka/web/processing/consumer.rb
172
178
  - lib/karafka/web/processing/consumers/aggregator.rb
173
179
  - lib/karafka/web/processing/consumers/state.rb
174
- - lib/karafka/web/tracking/base_contract.rb
175
180
  - lib/karafka/web/tracking/consumers/contracts/consumer_group.rb
176
181
  - lib/karafka/web/tracking/consumers/contracts/job.rb
177
182
  - lib/karafka/web/tracking/consumers/contracts/partition.rb
@@ -185,9 +190,17 @@ files:
185
190
  - lib/karafka/web/tracking/consumers/listeners/statistics.rb
186
191
  - lib/karafka/web/tracking/consumers/listeners/status.rb
187
192
  - lib/karafka/web/tracking/consumers/listeners/tags.rb
193
+ - lib/karafka/web/tracking/consumers/reporter.rb
188
194
  - lib/karafka/web/tracking/consumers/sampler.rb
195
+ - lib/karafka/web/tracking/contracts/base.rb
196
+ - lib/karafka/web/tracking/contracts/error.rb
197
+ - lib/karafka/web/tracking/helpers/error_info.rb
189
198
  - lib/karafka/web/tracking/memoized_shell.rb
190
- - lib/karafka/web/tracking/reporter.rb
199
+ - lib/karafka/web/tracking/producers/listeners/base.rb
200
+ - lib/karafka/web/tracking/producers/listeners/errors.rb
201
+ - lib/karafka/web/tracking/producers/listeners/reporter.rb
202
+ - lib/karafka/web/tracking/producers/reporter.rb
203
+ - lib/karafka/web/tracking/producers/sampler.rb
191
204
  - lib/karafka/web/tracking/sampler.rb
192
205
  - lib/karafka/web/tracking/ttl_array.rb
193
206
  - lib/karafka/web/tracking/ttl_hash.rb
@@ -207,6 +220,7 @@ files:
207
220
  - lib/karafka/web/ui/lib/hash_proxy.rb
208
221
  - lib/karafka/web/ui/lib/paginate_array.rb
209
222
  - lib/karafka/web/ui/models/consumer_group.rb
223
+ - lib/karafka/web/ui/models/counters.rb
210
224
  - lib/karafka/web/ui/models/health.rb
211
225
  - lib/karafka/web/ui/models/job.rb
212
226
  - lib/karafka/web/ui/models/message.rb
@@ -231,7 +245,6 @@ files:
231
245
  - lib/karafka/web/ui/pro/views/consumers/_breadcrumbs.erb
232
246
  - lib/karafka/web/ui/pro/views/consumers/_consumer.erb
233
247
  - lib/karafka/web/ui/pro/views/consumers/_counters.erb
234
- - lib/karafka/web/ui/pro/views/consumers/_summary.erb
235
248
  - lib/karafka/web/ui/pro/views/consumers/consumer/_consumer_group.erb
236
249
  - lib/karafka/web/ui/pro/views/consumers/consumer/_job.erb
237
250
  - lib/karafka/web/ui/pro/views/consumers/consumer/_metrics.erb
@@ -249,10 +262,7 @@ files:
249
262
  - lib/karafka/web/ui/pro/views/dlq/_topic.erb
250
263
  - lib/karafka/web/ui/pro/views/dlq/index.erb
251
264
  - lib/karafka/web/ui/pro/views/errors/_breadcrumbs.erb
252
- - lib/karafka/web/ui/pro/views/errors/_cleaned.erb
253
- - lib/karafka/web/ui/pro/views/errors/_detail.erb
254
265
  - lib/karafka/web/ui/pro/views/errors/_error.erb
255
- - lib/karafka/web/ui/pro/views/errors/_no_errors.erb
256
266
  - lib/karafka/web/ui/pro/views/errors/_partition_option.erb
257
267
  - lib/karafka/web/ui/pro/views/errors/index.erb
258
268
  - lib/karafka/web/ui/pro/views/errors/show.erb
@@ -273,7 +283,6 @@ files:
273
283
  - lib/karafka/web/ui/pro/views/health/_breadcrumbs.erb
274
284
  - lib/karafka/web/ui/pro/views/health/_partition.erb
275
285
  - lib/karafka/web/ui/pro/views/health/index.erb
276
- - lib/karafka/web/ui/pro/views/jobs/_breadcrumbs.erb
277
286
  - lib/karafka/web/ui/pro/views/jobs/_job.erb
278
287
  - lib/karafka/web/ui/pro/views/jobs/_no_jobs.erb
279
288
  - lib/karafka/web/ui/pro/views/jobs/index.erb
@@ -293,9 +302,9 @@ files:
293
302
  - lib/karafka/web/ui/views/cluster/_broker.erb
294
303
  - lib/karafka/web/ui/views/cluster/_partition.erb
295
304
  - lib/karafka/web/ui/views/cluster/index.erb
296
- - lib/karafka/web/ui/views/consumers/_breadcrumbs.erb
297
305
  - lib/karafka/web/ui/views/consumers/_consumer.erb
298
306
  - lib/karafka/web/ui/views/consumers/_counters.erb
307
+ - lib/karafka/web/ui/views/consumers/_no_consumers.erb
299
308
  - lib/karafka/web/ui/views/consumers/_summary.erb
300
309
  - lib/karafka/web/ui/views/consumers/index.erb
301
310
  - lib/karafka/web/ui/views/errors/_breadcrumbs.erb
@@ -320,6 +329,7 @@ files:
320
329
  - lib/karafka/web/ui/views/shared/_become_pro.erb
321
330
  - lib/karafka/web/ui/views/shared/_brand.erb
322
331
  - lib/karafka/web/ui/views/shared/_content.erb
332
+ - lib/karafka/web/ui/views/shared/_feature_pro.erb
323
333
  - lib/karafka/web/ui/views/shared/_header.erb
324
334
  - lib/karafka/web/ui/views/shared/_navigation.erb
325
335
  - lib/karafka/web/ui/views/shared/_pagination.erb
metadata.gz.sig CHANGED
Binary file
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Tracking
6
- # Base for all the metric related contracts
7
- class BaseContract < ::Karafka::Core::Contractable::Contract
8
- class << self
9
- # This layer is not for users extensive feedback, thus we can easily use the minimum
10
- # error messaging there is.
11
- def configure
12
- super do |config|
13
- config.error_messages = YAML.safe_load(
14
- File.read(
15
- File.join(Karafka::Web.gem_root, 'config', 'locales', 'errors.yml')
16
- )
17
- ).fetch('en').fetch('validations').fetch('web')
18
- end
19
- end
20
- end
21
-
22
- # @param data [Hash] data for validation
23
- # @return [Boolean] true if all good
24
- # @raise [Errors::ContractError] invalid report
25
- def validate!(data)
26
- super(data, Errors::Tracking::ContractError)
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,144 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Karafka
4
- module Web
5
- module Tracking
6
- # Reports the collected data about the process and sends it, so we can use it in the UI
7
- class Reporter
8
- include ::Karafka::Core::Helpers::Time
9
- include ::Karafka::Helpers::Async
10
-
11
- # Minimum number of messages to produce to produce then in sync mode
12
- # This acts as a small back-off not to overload the system in case we would have extremely
13
- # big number of errors happening
14
- PRODUCE_SYNC_THRESHOLD = 25
15
-
16
- private_constant :PRODUCE_SYNC_THRESHOLD
17
-
18
- # This mutex is shared between tracker and samplers so there is no case where metrics
19
- # would be collected same time tracker reports
20
- MUTEX = Mutex.new
21
-
22
- def initialize
23
- # Move back so first report is dispatched fast to indicate, that the process is alive
24
- @tracked_at = monotonic_now - 10_000
25
- @consumer_contract = Consumers::Contracts::Report.new
26
- end
27
-
28
- # Dispatches the current state from sampler to appropriate topics
29
- #
30
- # @param forced [Boolean] should we report bypassing the time frequency or should we report
31
- # only in case we would not send the report for long enough time.
32
- def report(forced: false)
33
- MUTEX.synchronize do
34
- # Start background thread only when needed
35
- # This prevents us from starting it too early or for non-consumer processes where
36
- # Karafka is being included
37
- async_call unless @running
38
-
39
- return unless report?(forced)
40
-
41
- @tracked_at = monotonic_now
42
-
43
- consumer_report = consumer_sampler.to_report
44
-
45
- @consumer_contract.validate!(consumer_report)
46
-
47
- process_name = consumer_report[:process][:name]
48
-
49
- # Report consumers statuses
50
- messages = [
51
- {
52
- topic: ::Karafka::Web.config.topics.consumers.reports,
53
- payload: consumer_report.to_json,
54
- key: process_name,
55
- partition: 0
56
- }
57
- ]
58
-
59
- # Report errors that occurred (if any)
60
- messages += consumer_sampler.errors.map do |error|
61
- {
62
- topic: Karafka::Web.config.topics.errors,
63
- payload: error.to_json,
64
- # Always dispatch errors from the same process to the same partition
65
- key: process_name
66
- }
67
- end
68
-
69
- produce(messages)
70
-
71
- # Clear the sampler so it tracks new state changes without previous once impacting
72
- # the data
73
- consumer_sampler.clear
74
- end
75
- # Since we run this in a background thread, there may be a case upon shutdown, where the
76
- # producer is closed right before a potential dispatch. It is not worth dealing with this
77
- # and we can just safely ignore this
78
- rescue WaterDrop::Errors::ProducerClosedError
79
- nil
80
- end
81
-
82
- # Reports bypassing frequency check. This can be used to report when state changes in the
83
- # process drastically. For example when process is stopping, we want to indicate this as
84
- # fast as possible in the UI, etc.
85
- def report!
86
- report(forced: true)
87
- end
88
-
89
- private
90
-
91
- # Reports the process state once in a while
92
- def call
93
- @running = true
94
-
95
- loop do
96
- report
97
-
98
- # We won't track more often anyhow but want to try frequently not to miss a window
99
- # We need to convert the sleep interval into seconds for sleep
100
- sleep(::Karafka::Web.config.tracking.interval / 1_000 / 10)
101
- end
102
- end
103
-
104
- # @param forced [Boolean] is this report forced. Forced means that as long as we can flush
105
- # we will flush
106
- # @return [Boolean] Should we report or is it not yet time to do so
107
- def report?(forced)
108
- # We never report in initializing phase because things are not yet fully configured
109
- return false if ::Karafka::App.initializing?
110
- # We never report in the initialized because server is not yet ready until Karafka is
111
- # fully running and some of the things like listeners are not yet available
112
- return false if ::Karafka::App.initialized?
113
-
114
- return true if forced
115
-
116
- (monotonic_now - @tracked_at) >= ::Karafka::Web.config.tracking.interval
117
- end
118
-
119
- # @return [Object] sampler for the metrics
120
- def consumer_sampler
121
- @consumer_sampler ||= ::Karafka::Web.config.tracking.consumers.sampler
122
- end
123
-
124
- # Produces messages to Kafka.
125
- #
126
- # @param messages [Array<Hash>]
127
- #
128
- # @note We pick either sync or async dependent on number of messages. The trick here is,
129
- # that we do not want to end up overloading the internal queue with messages in case
130
- # someone has a lot of errors from processing or other errors. Producing sync will wait
131
- # for the delivery, hence will slow things down a little bit. On the other hand during
132
- # normal operations we should not have that many messages to dispatch and it should not
133
- # slowdown any processing.
134
- def produce(messages)
135
- if messages.count >= PRODUCE_SYNC_THRESHOLD
136
- ::Karafka.producer.produce_many_sync(messages)
137
- else
138
- ::Karafka.producer.produce_many_async(messages)
139
- end
140
- end
141
- end
142
- end
143
- end
144
- end
@@ -1,81 +0,0 @@
1
- <div id="summary" class="container text-center mb-5">
2
- <div class="row">
3
-
4
- <div class="col-lg-2 offset-md-1">
5
- <div class="card mb-0">
6
- <div class="card-body">
7
- <p class="card-text">
8
- <div class="stat mb-1">
9
- <%= @counters.processes %>
10
- </div>
11
- <div class="desc">
12
- Processes
13
- </div>
14
- </p>
15
- </div>
16
- </div>
17
- </div>
18
-
19
- <div class="col-lg-2">
20
- <div class="card mb-0">
21
- <div class="card-body">
22
- <p class="card-text">
23
- <div class="stat mb-1">
24
- <%= @counters.threads_count %>
25
- </div>
26
- <div class="desc">
27
- Worker threads
28
- </div>
29
- </p>
30
- </div>
31
- </div>
32
- </div>
33
-
34
- <div class="col-lg-2">
35
- <div class="card mb-0">
36
- <div class="card-body">
37
- <p class="card-text">
38
- <div class="stat mb-1">
39
- <%= @counters.listeners_count %>
40
- </div>
41
- <div class="desc">
42
- Listeners
43
- </div>
44
- </p>
45
- </div>
46
- </div>
47
- </div>
48
-
49
- <div class="col-lg-2">
50
- <div class="card mb-0">
51
- <div class="card-body">
52
- <p class="card-text">
53
- <div class="stat mb-1">
54
- <%= @counters.utilization.round(2) %>
55
- %
56
- </div>
57
- <div class="desc">
58
- Utilization
59
- </div>
60
- </p>
61
- </div>
62
- </div>
63
- </div>
64
-
65
- <div class="col-lg-2">
66
- <div class="card mb-0">
67
- <div class="card-body">
68
- <p class="card-text">
69
- <div class="stat mb-1">
70
- <%= format_memory @counters.rss %>
71
- </div>
72
- <div class="desc">
73
- RSS
74
- </div>
75
- </p>
76
- </div>
77
- </div>
78
- </div>
79
-
80
- </div>
81
- </div>
@@ -1,3 +0,0 @@
1
- <div class="alert alert-info" role="alert">
2
- This errors topic partition had all of its errored compacted and cleaned.
3
- </div>
@@ -1,31 +0,0 @@
1
- <% if v.is_a?(Hash) %>
2
- <% v.each do |k2, v2| %>
3
- <tr>
4
- <td>
5
- <%= "#{k}.#{k2}" %>
6
- </td>
7
- <td>
8
- <% if %w[sasl ssl].any? { |scope| k2.to_s.include?(scope) } %>
9
- ***
10
- <% elsif k2.to_s == 'tags' %>
11
- <%== tags(v2) %>
12
- <% else %>
13
- <%= v2 %>
14
- <% end %>
15
- </td>
16
- </tr>
17
- <% end %>
18
- <% else %>
19
- <tr>
20
- <td>
21
- <%= k %>
22
- </td>
23
- <td>
24
- <% if k == :occurred_at %>
25
- <%== relative_time v %>
26
- <% else %>
27
- <%= v %>
28
- <% end %>
29
- </td>
30
- </tr>
31
- <% end %>
@@ -1,3 +0,0 @@
1
- <div class="alert alert-info" role="alert">
2
- There are no errors in this errors topic partition.
3
- </div>
@@ -1,5 +0,0 @@
1
- <li class="breadcrumb-item">
2
- <a href="<%= root_path('jobs') %>">
3
- Running jobs
4
- </a>
5
- </li>
@@ -1,27 +0,0 @@
1
- <% if @process %>
2
- <li class="breadcrumb-item">
3
- <a href="<%= root_path('consumers') %>">
4
- Consumers
5
- </a>
6
- </li>
7
-
8
- <li class="breadcrumb-item">
9
- <a href="<%= root_path('consumers', @process.id, 'subscriptions') %>">
10
- <%= @process.name %>
11
- </a>
12
- </li>
13
-
14
- <% if current_path.include?('/jobs') %>
15
- <li class="breadcrumb-item">
16
- <a href="<%= root_path('consumers', @process.id, 'jobs') %>">
17
- Running jobs
18
- </a>
19
- </li>
20
- <% else %>
21
- <li class="breadcrumb-item">
22
- <a href="<%= root_path('consumers', @process.id, 'subscriptions') %>">
23
- Active subscriptions
24
- </a>
25
- </li>
26
- <% end %>
27
- <% end %>