karafka-web 0.2.2 → 0.2.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 +5 -0
- data/Gemfile.lock +6 -5
- data/lib/karafka/web/tracking/consumers/listeners/errors.rb +24 -9
- data/lib/karafka/web/tracking/consumers/sampler.rb +14 -2
- data/lib/karafka/web/tracking/reporter.rb +5 -6
- data/lib/karafka/web/ui/helpers/application_helper.rb +10 -0
- data/lib/karafka/web/ui/pro/views/consumers/_consumer.erb +1 -5
- data/lib/karafka/web/ui/pro/views/consumers/consumer/_metrics.erb +1 -5
- data/lib/karafka/web/ui/pro/views/errors/_detail.erb +2 -0
- data/lib/karafka/web/ui/pro/views/jobs/_job.erb +1 -3
- data/lib/karafka/web/ui/views/consumers/_consumer.erb +1 -5
- data/lib/karafka/web/ui/views/errors/_detail.erb +2 -0
- data/lib/karafka/web/ui/views/jobs/_job.erb +1 -3
- data/lib/karafka/web/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '069037558ca061c8dd11c4fd48658699814f9904668463a957c7fabeff16fb4c'
|
4
|
+
data.tar.gz: 7627bf19b437d6b9e040c7d164a615d6cfcf0777d0294bb5958e4ea8b8e8a20c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bbd71a7eb35f534dbd262089651aaa241b481b44cd7e9841954571f47d7c8737c0f9c8dd14f479fec5d8b80315f5317c9177ca4c1a11689b8e973541a9107c4
|
7
|
+
data.tar.gz: 4b5100c7fb244bb53e5590b94cf16ef98203295944ffffb44f5e29af912848608e0d514d4eeaca0f47ff9aee85cb86e17712f79ceb698eccd96ea9ddf070fa4d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Karafka Web changelog
|
2
2
|
|
3
|
+
## 0.2.3 (2023-03-04)
|
4
|
+
- [Improvement] Snapshot current consumer tags upon consumer errors.
|
5
|
+
- [Improvement] Optimize exception message extraction from errors.
|
6
|
+
- [Improvement] Slightly change error reporting structure (backwards compatible) to collect process tags on errors and to align with other reports.
|
7
|
+
|
3
8
|
## 0.2.2 (2023-02-25)
|
4
9
|
- [Fix] Fix status page reference in Pro.
|
5
10
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
karafka-web (0.2.
|
4
|
+
karafka-web (0.2.3)
|
5
5
|
erubi (~> 1.4)
|
6
6
|
karafka (>= 2.0.33, < 3.0.0)
|
7
7
|
karafka-core (>= 2.0.12, < 3.0.0)
|
@@ -17,7 +17,7 @@ GEM
|
|
17
17
|
minitest (>= 5.1)
|
18
18
|
tzinfo (~> 2.0)
|
19
19
|
byebug (11.1.3)
|
20
|
-
concurrent-ruby (1.2.
|
20
|
+
concurrent-ruby (1.2.2)
|
21
21
|
diff-lcs (1.5.0)
|
22
22
|
docile (1.4.0)
|
23
23
|
erubi (1.12.0)
|
@@ -70,13 +70,14 @@ GEM
|
|
70
70
|
tilt (2.1.0)
|
71
71
|
tzinfo (2.0.6)
|
72
72
|
concurrent-ruby (~> 1.0)
|
73
|
-
waterdrop (2.4.
|
74
|
-
karafka-core (>= 2.0.
|
73
|
+
waterdrop (2.4.11)
|
74
|
+
karafka-core (>= 2.0.12, < 3.0.0)
|
75
75
|
zeitwerk (~> 2.3)
|
76
76
|
webrick (1.8.1)
|
77
77
|
zeitwerk (2.6.7)
|
78
78
|
|
79
79
|
PLATFORMS
|
80
|
+
arm64-darwin-21
|
80
81
|
x86_64-linux
|
81
82
|
|
82
83
|
DEPENDENCIES
|
@@ -88,4 +89,4 @@ DEPENDENCIES
|
|
88
89
|
simplecov
|
89
90
|
|
90
91
|
BUNDLED WITH
|
91
|
-
2.4.
|
92
|
+
2.4.7
|
@@ -28,7 +28,8 @@ module Karafka
|
|
28
28
|
error_message: error_message,
|
29
29
|
backtrace: backtrace,
|
30
30
|
details: details,
|
31
|
-
occurred_at: float_now
|
31
|
+
occurred_at: float_now,
|
32
|
+
process: sampler.to_report[:process].slice(:name, :tags)
|
32
33
|
}
|
33
34
|
|
34
35
|
sampler.counters[:errors] += 1
|
@@ -55,6 +56,13 @@ module Karafka
|
|
55
56
|
|
56
57
|
private
|
57
58
|
|
59
|
+
# @return [Object] sampler for the metrics
|
60
|
+
# @note We use this sampler to get basic process details that we want to assign
|
61
|
+
# to the error
|
62
|
+
def consumer_sampler
|
63
|
+
@consumer_sampler ||= ::Karafka::Web.config.tracking.consumers.sampler
|
64
|
+
end
|
65
|
+
|
58
66
|
# @param consumer [::Karafka::BaseConsumer]
|
59
67
|
# @return [Hash] hash with consumer specific info for details of error
|
60
68
|
def extract_consumer_info(consumer)
|
@@ -65,7 +73,8 @@ module Karafka
|
|
65
73
|
first_offset: consumer.messages.first.offset,
|
66
74
|
last_offset: consumer.messages.last.offset,
|
67
75
|
comitted_offset: consumer.coordinator.seek_offset - 1,
|
68
|
-
consumer: consumer.class.to_s
|
76
|
+
consumer: consumer.class.to_s,
|
77
|
+
tags: consumer.tags
|
69
78
|
}
|
70
79
|
end
|
71
80
|
|
@@ -74,12 +83,6 @@ module Karafka
|
|
74
83
|
# @param error [StandardError] error that occurred
|
75
84
|
# @return [Array<String, String, String>] array with error name, message and backtrace
|
76
85
|
def extract_error_info(error)
|
77
|
-
error_message = error.message.to_s.dup
|
78
|
-
error_message.force_encoding('utf-8')
|
79
|
-
error_message.scrub!
|
80
|
-
|
81
|
-
backtrace = (error.backtrace || [])
|
82
|
-
|
83
86
|
app_root = "#{::Karafka.root}/"
|
84
87
|
|
85
88
|
gem_home = if ENV.key?('GEM_HOME')
|
@@ -90,15 +93,27 @@ module Karafka
|
|
90
93
|
|
91
94
|
gem_home = "#{gem_home}/"
|
92
95
|
|
96
|
+
backtrace = error.backtrace || []
|
93
97
|
backtrace.map! { |line| line.gsub(app_root, '') }
|
94
98
|
backtrace.map! { |line| line.gsub(gem_home, '') }
|
95
99
|
|
96
100
|
[
|
97
101
|
error.class.name,
|
98
|
-
|
102
|
+
extract_exception_message(error),
|
99
103
|
backtrace.join("\n")
|
100
104
|
]
|
101
105
|
end
|
106
|
+
|
107
|
+
# @param error [StandardError] error that occurred
|
108
|
+
# @return [String] formatted exception message
|
109
|
+
def extract_exception_message(error)
|
110
|
+
error_message = error.message.to_s[0, 10_000]
|
111
|
+
error_message.force_encoding('utf-8')
|
112
|
+
error_message.scrub! if error_message.respond_to?(:scrub!)
|
113
|
+
error_message
|
114
|
+
rescue StandardError
|
115
|
+
'!!! Error message extraction failed !!!'
|
116
|
+
end
|
102
117
|
end
|
103
118
|
end
|
104
119
|
end
|
@@ -60,7 +60,7 @@ module Karafka
|
|
60
60
|
started_at: @started_at,
|
61
61
|
name: process_name,
|
62
62
|
status: ::Karafka::App.config.internal.status.to_s,
|
63
|
-
listeners:
|
63
|
+
listeners: listeners,
|
64
64
|
concurrency: concurrency,
|
65
65
|
memory_usage: memory_usage,
|
66
66
|
memory_total_usage: memory_total_usage,
|
@@ -76,7 +76,7 @@ module Karafka
|
|
76
76
|
waterdrop: ::WaterDrop::VERSION
|
77
77
|
},
|
78
78
|
|
79
|
-
stats:
|
79
|
+
stats: jobs_queue_statistics.merge(
|
80
80
|
utilization: utilization
|
81
81
|
).merge(total: @counters),
|
82
82
|
|
@@ -112,6 +112,12 @@ module Karafka
|
|
112
112
|
times[:total].sum / 1_000 / concurrency / timefactor * 100
|
113
113
|
end
|
114
114
|
|
115
|
+
# @return [Integer] number of listeners
|
116
|
+
def listeners
|
117
|
+
# This can be zero before the server starts
|
118
|
+
Karafka::Server.listeners&.count.to_i
|
119
|
+
end
|
120
|
+
|
115
121
|
# @return [String] Unique process name
|
116
122
|
def process_name
|
117
123
|
@process_name ||= "#{Socket.gethostname}:#{::Process.pid}:#{SecureRandom.hex(6)}"
|
@@ -142,6 +148,12 @@ module Karafka
|
|
142
148
|
end
|
143
149
|
end
|
144
150
|
|
151
|
+
# @return [Hash] job queue statistics
|
152
|
+
def jobs_queue_statistics
|
153
|
+
# We return empty stats in case jobs queue is not yet initialized
|
154
|
+
Karafka::Server.jobs_queue&.statistics || { busy: 0, enqueued: 0 }
|
155
|
+
end
|
156
|
+
|
145
157
|
# Total memory used in the OS
|
146
158
|
def memory_total_usage
|
147
159
|
case RUBY_PLATFORM
|
@@ -44,12 +44,14 @@ module Karafka
|
|
44
44
|
|
45
45
|
@consumer_contract.validate!(consumer_report)
|
46
46
|
|
47
|
+
process_name = consumer_report[:process][:name]
|
48
|
+
|
47
49
|
# Report consumers statuses
|
48
50
|
messages = [
|
49
51
|
{
|
50
52
|
topic: ::Karafka::Web.config.topics.consumers.reports,
|
51
53
|
payload: consumer_report.to_json,
|
52
|
-
key:
|
54
|
+
key: process_name,
|
53
55
|
partition: 0
|
54
56
|
}
|
55
57
|
]
|
@@ -58,12 +60,9 @@ module Karafka
|
|
58
60
|
messages += consumer_sampler.errors.map do |error|
|
59
61
|
{
|
60
62
|
topic: Karafka::Web.config.topics.errors,
|
61
|
-
|
62
|
-
payload: error.merge(
|
63
|
-
process_name: consumer_report[:process][:name]
|
64
|
-
).to_json,
|
63
|
+
payload: error.to_json,
|
65
64
|
# Always dispatch errors from the same process to the same partition
|
66
|
-
key:
|
65
|
+
key: process_name
|
67
66
|
}
|
68
67
|
end
|
69
68
|
|
@@ -74,6 +74,16 @@ module Karafka
|
|
74
74
|
bg
|
75
75
|
end
|
76
76
|
|
77
|
+
# Renders tags one after another
|
78
|
+
#
|
79
|
+
# @param tags_array [Array<String>]
|
80
|
+
# @return [String] tags badges
|
81
|
+
def tags(tags_array)
|
82
|
+
tags_array
|
83
|
+
.map { |tag| %(<span class="badge bg-info">#{tag}</span>) }
|
84
|
+
.join(' ')
|
85
|
+
end
|
86
|
+
|
77
87
|
# Takes a kafka report state and recommends background style color
|
78
88
|
# @param state [String] state
|
79
89
|
# @return [String] background style
|
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.2.
|
4
|
+
version: 0.2.3
|
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-03-04 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: erubi
|
metadata.gz.sig
CHANGED
Binary file
|