karafka-web 0.7.8 → 0.7.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d46244304483184c3be59a0686497a9f948e9b666dccf00961b560e60db4655
4
- data.tar.gz: 329686ce548063787fe06290d67650793ebef6c014f43b753780ad120671a8b1
3
+ metadata.gz: 24bc5fe488a1304886f3f7f697a8662463f4c21fae60daf52d317852f9f43669
4
+ data.tar.gz: eaa8e4b7d9b9d70200c8929e8fa65ed7906a1b4085465b15525bfee670ebbcc9
5
5
  SHA512:
6
- metadata.gz: 5a18a3c23f63382c6c41dc5ac7f82f893bc14a55e7ec68af9cf16da0f47a45aee77ca9626973570cb9d6abe9355e0712f117424e00619b7b0198748c3bfbeb55
7
- data.tar.gz: f639bd90ca21c09fcd798fc289079cafeb9c752d261ecf88df9762e347df738bf260c658f0f15b3b08c3708daf091217c0159d85ac975380463a65a45d876d0b
6
+ metadata.gz: 0ba2c668103a3b25169d86f2c0624fae04d144694040694ff79c4932bf81fe648e5ba11223be5a5f9e8d8ba0bbbac9da84f2ec5312e81d07b35873707b7b754c
7
+ data.tar.gz: b0ec51820b50dfde4f88e942e3b0dcc2400170d0fbe256503294f366e2f4fe0057249bb525528b789bed254ba6ec035d5502e515042bd094999663155f8a221d
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # Karafka Web changelog
2
2
 
3
+ ## 0.7.9 (2023-10-25)
4
+ - [Enhancement] Allow for `Karafka::Web.producer` reconfiguration from the default (`Karafka.producer`).
5
+ - [Change] Rely on `karafka-core` `>=` `2.2.4` to support lazy loaded custom web producer.
6
+
3
7
  ## 0.7.8 (2023-10-24)
4
8
  - [Enhancement] Support transactional producer usage with Web UI.
5
- - [Fix] Fix a bug where critical errors (like `IRB::Abort`) would not abort the ongoing transaction.
6
9
  - [Fix] Prevent a scenario where an ongoing transactional producer would have stats emitted and an error that could not have been dispatched because of the transaction, creating a dead-lock.
7
10
  - [Fix] Make sure that the `recent` displays the most recent non-compacted, non-system message.
8
11
  - [Fix] Improve the `recent` message display to compensate for aborted transactions.
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- karafka-web (0.7.8)
4
+ karafka-web (0.7.9)
5
5
  erubi (~> 1.4)
6
6
  karafka (>= 2.2.9, < 3.0.0)
7
- karafka-core (>= 2.2.2, < 3.0.0)
7
+ karafka-core (>= 2.2.4, < 3.0.0)
8
8
  roda (~> 3.68, >= 3.69)
9
9
  tilt (~> 2.0)
10
10
 
@@ -40,7 +40,7 @@ GEM
40
40
  karafka-core (>= 2.2.2, < 2.3.0)
41
41
  waterdrop (>= 2.6.10, < 3.0.0)
42
42
  zeitwerk (~> 2.3)
43
- karafka-core (2.2.3)
43
+ karafka-core (2.2.4)
44
44
  concurrent-ruby (>= 1.1)
45
45
  karafka-rdkafka (>= 0.13.6, < 0.14.0)
46
46
  karafka-rdkafka (0.13.6)
data/karafka-web.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.add_dependency 'erubi', '~> 1.4'
20
20
  spec.add_dependency 'karafka', '>= 2.2.9', '< 3.0.0'
21
- spec.add_dependency 'karafka-core', '>= 2.2.2', '< 3.0.0'
21
+ spec.add_dependency 'karafka-core', '>= 2.2.4', '< 3.0.0'
22
22
  spec.add_dependency 'roda', '~> 3.68', '>= 3.69'
23
23
  spec.add_dependency 'tilt', '~> 2.0'
24
24
 
@@ -11,6 +11,17 @@ module Karafka
11
11
  # This is used both in the processing for eviction and in the UI
12
12
  setting :ttl, default: 30_000
13
13
 
14
+ # Producer for the Web UI. By default it is a `Karafka.producer`, however it may be
15
+ # overwritten if we want to use a separate instance in case of heavy usage of the
16
+ # transactional producer as a default. In cases like this, Karafka may not be able to report
17
+ # data because it uses this producer and it may be locked because of the transaction in a
18
+ # user space.
19
+ setting(
20
+ :producer,
21
+ constructor: -> { ::Karafka.producer },
22
+ lazy: true
23
+ )
24
+
14
25
  # Topics naming - used for processing and UI
15
26
  setting :topics do
16
27
  # All the errors encountered will be dispatched to this topic for inspection
@@ -41,11 +52,13 @@ module Karafka
41
52
  setting :scheduler, default: Tracking::Scheduler.new
42
53
 
43
54
  setting :consumers do
44
- # Reports the metrics collected in the sampler
55
+ # Reports the metrics collected in the consumer sampler
45
56
  setting :reporter, default: Tracking::Consumers::Reporter.new
46
57
 
58
+ # Samples for fetching and storing metrics samples about the consumer process
47
59
  setting :sampler, default: Tracking::Consumers::Sampler.new
48
60
 
61
+ # Listeners needed for the Web UI to track consumer related changes
49
62
  setting :listeners, default: [
50
63
  Tracking::Consumers::Listeners::Status.new,
51
64
  Tracking::Consumers::Listeners::Errors.new,
@@ -57,10 +70,13 @@ module Karafka
57
70
  end
58
71
 
59
72
  setting :producers do
73
+ # Reports the metrics collected in the producer sampler
60
74
  setting :reporter, default: Tracking::Producers::Reporter.new
61
75
 
76
+ # Sampler for errors from producers
62
77
  setting :sampler, default: Tracking::Producers::Sampler.new
63
78
 
79
+ # Listeners needed for the Web UI to track producers related stuff
64
80
  setting :listeners, default: [
65
81
  Tracking::Producers::Listeners::Errors.new
66
82
  ]
@@ -55,7 +55,7 @@ module Karafka
55
55
  exists('consumers state')
56
56
  else
57
57
  creating('consumers state')
58
- ::Karafka.producer.produce_sync(
58
+ ::Karafka::Web.producer.produce_sync(
59
59
  topic: Karafka::Web.config.topics.consumers.states,
60
60
  key: Karafka::Web.config.topics.consumers.states,
61
61
  payload: DEFAULT_STATE.to_json
@@ -67,7 +67,7 @@ module Karafka
67
67
  exists('consumers metrics')
68
68
  else
69
69
  creating('consumers metrics')
70
- ::Karafka.producer.produce_sync(
70
+ ::Karafka::Web.producer.produce_sync(
71
71
  topic: Karafka::Web.config.topics.consumers.metrics,
72
72
  key: Karafka::Web.config.topics.consumers.metrics,
73
73
  payload: DEFAULT_METRICS.merge(dispatched_at: Time.now.to_f).to_json
@@ -11,6 +11,7 @@ module Karafka
11
11
  def call
12
12
  extend_routing
13
13
  subscribe_to_monitor
14
+ subscribe_to_close_web_producer
14
15
  end
15
16
 
16
17
  private
@@ -71,9 +72,28 @@ module Karafka
71
72
  ::Karafka.monitor.subscribe(listener)
72
73
  end
73
74
 
74
- # Installs all the producer related listeners
75
+ # Installs all the producer related listeners into Karafka default listener and
76
+ # into Karafka::Web listener in case it would be different than the Karafka one
75
77
  ::Karafka::Web.config.tracking.producers.listeners.each do |listener|
76
78
  ::Karafka.producer.monitor.subscribe(listener)
79
+
80
+ # Do not instrument twice in case only one default producer is used
81
+ next if ::Karafka.producer == ::Karafka::Web.producer
82
+
83
+ ::Karafka::Web.producer.monitor.subscribe(listener)
84
+ end
85
+ end
86
+
87
+ # In most cases we want to close the producer if possible.
88
+ # While we cannot do it easily in user processes and we should rely on WaterDrop
89
+ # finalization logic, we can do it in `karafka server` on terminate
90
+ #
91
+ # In other places, this producer anyhow should not be used.
92
+ def subscribe_to_close_web_producer
93
+ ::Karafka::App.monitor.subscribe('app.terminated') do
94
+ # If Web producer is the same as `Karafka.producer` it will do nothing as you can
95
+ # call `#close` multiple times without side effects
96
+ ::Karafka::Web.producer.close
77
97
  end
78
98
  end
79
99
  end
@@ -114,7 +114,7 @@ module Karafka
114
114
  def flush
115
115
  @flushed_at = monotonic_now
116
116
 
117
- producer.produce_many_async(
117
+ ::Karafka::Web.producer.produce_many_async(
118
118
  [
119
119
  {
120
120
  topic: Karafka::Web.config.topics.consumers.states,
@@ -135,9 +135,9 @@ module Karafka
135
135
  # slowdown any processing.
136
136
  def produce(messages)
137
137
  if messages.count >= PRODUCE_SYNC_THRESHOLD
138
- ::Karafka.producer.produce_many_sync(messages)
138
+ ::Karafka::Web.producer.produce_many_sync(messages)
139
139
  else
140
- ::Karafka.producer.produce_many_async(messages)
140
+ ::Karafka::Web.producer.produce_many_async(messages)
141
141
  end
142
142
  # Since we run this in a background thread, there may be a case upon shutdown, where the
143
143
  # producer is closed right before a potential dispatch. It is not worth dealing with this
@@ -83,9 +83,9 @@ module Karafka
83
83
  # slowdown any processing.
84
84
  def produce(messages)
85
85
  if messages.count >= PRODUCE_SYNC_THRESHOLD
86
- ::Karafka.producer.produce_many_sync(messages)
86
+ ::Karafka::Web.producer.produce_many_sync(messages)
87
87
  else
88
- ::Karafka.producer.produce_many_async(messages)
88
+ ::Karafka::Web.producer.produce_many_async(messages)
89
89
  end
90
90
  # Since we run this in a background thread, there may be a case upon shutdown, where the
91
91
  # producer is closed right before a potential dispatch. It is not worth dealing with this
@@ -14,8 +14,8 @@ module Karafka
14
14
  #
15
15
  # @return [Boolean]
16
16
  def active?
17
- return false unless ::Karafka::App.producer
18
- return false unless ::Karafka::App.producer.status.active?
17
+ return false unless ::Karafka::Web.producer
18
+ return false unless ::Karafka::Web.producer.status.active?
19
19
 
20
20
  true
21
21
  end
@@ -28,7 +28,7 @@ module Karafka
28
28
  def republish(topic_id, partition_id, offset)
29
29
  message = Ui::Models::Message.find(topic_id, partition_id, offset)
30
30
 
31
- delivery = ::Karafka.producer.produce_sync(
31
+ delivery = ::Karafka::Web.producer.produce_sync(
32
32
  topic: topic_id,
33
33
  partition: partition_id,
34
34
  payload: message.raw_payload,
@@ -3,6 +3,6 @@
3
3
  module Karafka
4
4
  module Web
5
5
  # Current gem version
6
- VERSION = '0.7.8'
6
+ VERSION = '0.7.9'
7
7
  end
8
8
  end
data/lib/karafka/web.rb CHANGED
@@ -13,6 +13,12 @@ module Karafka
13
13
  # Karafka Web UI + Karafka web monitoring
14
14
  module Web
15
15
  class << self
16
+ # @return [WaterDrop::Producer, nil] waterdrop messages producer or nil if not yet fully
17
+ # initialized. It may not be fully initialized until the configuration is done
18
+ def producer
19
+ @producer ||= Web.config.producer
20
+ end
21
+
16
22
  # @return [String] root path of this gem
17
23
  def gem_root
18
24
  Pathname.new(File.expand_path('../..', __dir__))
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.7.8
4
+ version: 0.7.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Mensfeld
@@ -35,7 +35,7 @@ cert_chain:
35
35
  AnG1dJU+yL2BK7vaVytLTstJME5mepSZ46qqIJXMuWob/YPDmVaBF39TDSG9e34s
36
36
  msG3BiCqgOgHAnL23+CN3Rt8MsuRfEtoTKpJVcCfoEoNHOkc
37
37
  -----END CERTIFICATE-----
38
- date: 2023-10-24 00:00:00.000000000 Z
38
+ date: 2023-10-25 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: erubi
@@ -77,7 +77,7 @@ dependencies:
77
77
  requirements:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: 2.2.2
80
+ version: 2.2.4
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.2.2
90
+ version: 2.2.4
91
91
  - - "<"
92
92
  - !ruby/object:Gem::Version
93
93
  version: 3.0.0
metadata.gz.sig CHANGED
Binary file