phobos 2.1.0 → 2.1.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
- data/CHANGELOG.md +12 -0
- data/lib/phobos/actions/process_batch.rb +6 -1
- data/lib/phobos/configuration.rb +101 -0
- data/lib/phobos/log.rb +4 -0
- data/lib/phobos/version.rb +1 -1
- data/lib/phobos.rb +2 -93
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0956b5ef7d6d1cdd48c4f8fd36a8236d192450eda009f5313ec81d628784ce0b'
|
4
|
+
data.tar.gz: 17e608663beea493f386290bb8781f5c540baee9ba00e0fde47fce2504ee9f7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7df8dbd47d916c8d344badce4039598188c5ce53b3d595c9baa5e6d0fa5467482ca5ebdeddb972fcf9aded6f4ac8905add780bc8104b6d7cccdbb71d21c86c23
|
7
|
+
data.tar.gz: 6db4a6e57804d373eb055b6ab88cd709b8260e141a5853f4826f927c50912d2224f206c9751bd5186f87bf99aa3463ff3df6e65a536a17ec7f7aee58cffe89a5
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,18 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
``
|
7
7
|
## UNRELEASED
|
8
8
|
|
9
|
+
## [2.1.3] - 2022-05-13
|
10
|
+
|
11
|
+
- Rescue and log Kafka::HeartbeatError in batch processing
|
12
|
+
|
13
|
+
## [2.1.2] - 2022-01-27
|
14
|
+
|
15
|
+
- Fix packaging error.
|
16
|
+
|
17
|
+
## [2.1.1] - 2022-01-26
|
18
|
+
|
19
|
+
- Fix crash on Ruby 3.1 involving a change to the Psych gem.
|
20
|
+
|
9
21
|
## [2.1.0] - 2021-05-27
|
10
22
|
|
11
23
|
- Modify config to allow specifying kafka connection information separately for consumers and producers
|
@@ -4,6 +4,7 @@ module Phobos
|
|
4
4
|
module Actions
|
5
5
|
class ProcessBatch
|
6
6
|
include Phobos::Instrumentation
|
7
|
+
include Phobos::Log
|
7
8
|
|
8
9
|
attr_reader :metadata
|
9
10
|
|
@@ -26,7 +27,11 @@ module Phobos
|
|
26
27
|
message: message,
|
27
28
|
listener_metadata: @listener_metadata
|
28
29
|
).execute
|
29
|
-
|
30
|
+
begin
|
31
|
+
@listener.consumer.trigger_heartbeat
|
32
|
+
rescue Kafka::HeartbeatError => e
|
33
|
+
log_warn("Error sending Heartbeat #{e.class.name}-#{e}")
|
34
|
+
end
|
30
35
|
end
|
31
36
|
end
|
32
37
|
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'phobos/deep_struct'
|
4
|
+
|
5
|
+
module Phobos
|
6
|
+
module Configuration
|
7
|
+
def configure(configuration)
|
8
|
+
@config = fetch_configuration(configuration)
|
9
|
+
@config.class.send(:define_method, :producer_hash) do
|
10
|
+
Phobos.config.producer&.to_hash&.except(:kafka)
|
11
|
+
end
|
12
|
+
@config.class.send(:define_method, :consumer_hash) do
|
13
|
+
Phobos.config.consumer&.to_hash&.except(:kafka)
|
14
|
+
end
|
15
|
+
@config.listeners ||= []
|
16
|
+
configure_logger
|
17
|
+
end
|
18
|
+
|
19
|
+
# :nodoc:
|
20
|
+
def configure_logger
|
21
|
+
Logging.backtrace(true)
|
22
|
+
Logging.logger.root.level = silence_log ? :fatal : config.logger.level
|
23
|
+
|
24
|
+
configure_ruby_kafka_logger
|
25
|
+
configure_phobos_logger
|
26
|
+
|
27
|
+
logger.info do
|
28
|
+
Hash(message: 'Phobos configured', env: ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'N/A')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def fetch_configuration(configuration)
|
35
|
+
DeepStruct.new(read_configuration(configuration))
|
36
|
+
end
|
37
|
+
|
38
|
+
def read_configuration(configuration)
|
39
|
+
return configuration.to_h if configuration.respond_to?(:to_h)
|
40
|
+
|
41
|
+
config_erb = ERB.new(File.read(File.expand_path(configuration))).result
|
42
|
+
|
43
|
+
YAML.safe_load(
|
44
|
+
config_erb,
|
45
|
+
permitted_classes: [Symbol],
|
46
|
+
permitted_symbols: [],
|
47
|
+
aliases: true
|
48
|
+
)
|
49
|
+
rescue ArgumentError
|
50
|
+
YAML.safe_load(config_erb, [Symbol], [], true)
|
51
|
+
end
|
52
|
+
|
53
|
+
def configure_phobos_logger
|
54
|
+
if config.custom_logger
|
55
|
+
@logger = config.custom_logger
|
56
|
+
else
|
57
|
+
@logger = Logging.logger[self]
|
58
|
+
@logger.appenders = logger_appenders
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def configure_ruby_kafka_logger
|
63
|
+
if config.custom_kafka_logger
|
64
|
+
@ruby_kafka_logger = config.custom_kafka_logger
|
65
|
+
elsif config.logger.ruby_kafka
|
66
|
+
@ruby_kafka_logger = Logging.logger['RubyKafka']
|
67
|
+
@ruby_kafka_logger.appenders = logger_appenders
|
68
|
+
@ruby_kafka_logger.level = silence_log ? :fatal : config.logger.ruby_kafka.level
|
69
|
+
else
|
70
|
+
@ruby_kafka_logger = nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def logger_appenders
|
75
|
+
appenders = [Logging.appenders.stdout(layout: stdout_layout)]
|
76
|
+
|
77
|
+
if log_file
|
78
|
+
FileUtils.mkdir_p(File.dirname(log_file))
|
79
|
+
appenders << Logging.appenders.file(log_file, layout: json_layout)
|
80
|
+
end
|
81
|
+
|
82
|
+
appenders
|
83
|
+
end
|
84
|
+
|
85
|
+
def log_file
|
86
|
+
config.logger.file
|
87
|
+
end
|
88
|
+
|
89
|
+
def json_layout
|
90
|
+
Logging.layouts.json(date_pattern: Constants::LOG_DATE_PATTERN)
|
91
|
+
end
|
92
|
+
|
93
|
+
def stdout_layout
|
94
|
+
if config.logger.stdout_json == true
|
95
|
+
json_layout
|
96
|
+
else
|
97
|
+
Logging.layouts.pattern(date_pattern: Constants::LOG_DATE_PATTERN)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/lib/phobos/log.rb
CHANGED
data/lib/phobos/version.rb
CHANGED
data/lib/phobos.rb
CHANGED
@@ -13,7 +13,7 @@ require 'kafka'
|
|
13
13
|
require 'logging'
|
14
14
|
require 'erb'
|
15
15
|
|
16
|
-
require 'phobos/
|
16
|
+
require 'phobos/configuration'
|
17
17
|
require 'phobos/version'
|
18
18
|
require 'phobos/constants'
|
19
19
|
require 'phobos/log'
|
@@ -49,22 +49,11 @@ module Logging
|
|
49
49
|
end
|
50
50
|
|
51
51
|
module Phobos
|
52
|
+
extend Configuration
|
52
53
|
class << self
|
53
54
|
attr_reader :config, :logger
|
54
55
|
attr_accessor :silence_log
|
55
56
|
|
56
|
-
def configure(configuration)
|
57
|
-
@config = fetch_configuration(configuration)
|
58
|
-
@config.class.send(:define_method, :producer_hash) do
|
59
|
-
Phobos.config.producer&.to_hash&.except(:kafka)
|
60
|
-
end
|
61
|
-
@config.class.send(:define_method, :consumer_hash) do
|
62
|
-
Phobos.config.consumer&.to_hash&.except(:kafka)
|
63
|
-
end
|
64
|
-
@config.listeners ||= []
|
65
|
-
configure_logger
|
66
|
-
end
|
67
|
-
|
68
57
|
def add_listeners(configuration)
|
69
58
|
listeners_config = fetch_configuration(configuration)
|
70
59
|
@config.listeners += listeners_config.listeners
|
@@ -91,85 +80,5 @@ module Phobos
|
|
91
80
|
location = caller.find { |line| line !~ %r{/phobos/} }
|
92
81
|
warn "DEPRECATION WARNING: #{message}: #{location}"
|
93
82
|
end
|
94
|
-
|
95
|
-
# :nodoc:
|
96
|
-
def configure_logger
|
97
|
-
Logging.backtrace(true)
|
98
|
-
Logging.logger.root.level = silence_log ? :fatal : config.logger.level
|
99
|
-
|
100
|
-
configure_ruby_kafka_logger
|
101
|
-
configure_phobos_logger
|
102
|
-
|
103
|
-
logger.info do
|
104
|
-
Hash(message: 'Phobos configured', env: ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'N/A')
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
private
|
109
|
-
|
110
|
-
def fetch_configuration(configuration)
|
111
|
-
DeepStruct.new(read_configuration(configuration))
|
112
|
-
end
|
113
|
-
|
114
|
-
def read_configuration(configuration)
|
115
|
-
return configuration.to_h if configuration.respond_to?(:to_h)
|
116
|
-
|
117
|
-
YAML.safe_load(
|
118
|
-
ERB.new(
|
119
|
-
File.read(File.expand_path(configuration))
|
120
|
-
).result,
|
121
|
-
[Symbol],
|
122
|
-
[],
|
123
|
-
true
|
124
|
-
)
|
125
|
-
end
|
126
|
-
|
127
|
-
def configure_phobos_logger
|
128
|
-
if config.custom_logger
|
129
|
-
@logger = config.custom_logger
|
130
|
-
else
|
131
|
-
@logger = Logging.logger[self]
|
132
|
-
@logger.appenders = logger_appenders
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def configure_ruby_kafka_logger
|
137
|
-
if config.custom_kafka_logger
|
138
|
-
@ruby_kafka_logger = config.custom_kafka_logger
|
139
|
-
elsif config.logger.ruby_kafka
|
140
|
-
@ruby_kafka_logger = Logging.logger['RubyKafka']
|
141
|
-
@ruby_kafka_logger.appenders = logger_appenders
|
142
|
-
@ruby_kafka_logger.level = silence_log ? :fatal : config.logger.ruby_kafka.level
|
143
|
-
else
|
144
|
-
@ruby_kafka_logger = nil
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def logger_appenders
|
149
|
-
appenders = [Logging.appenders.stdout(layout: stdout_layout)]
|
150
|
-
|
151
|
-
if log_file
|
152
|
-
FileUtils.mkdir_p(File.dirname(log_file))
|
153
|
-
appenders << Logging.appenders.file(log_file, layout: json_layout)
|
154
|
-
end
|
155
|
-
|
156
|
-
appenders
|
157
|
-
end
|
158
|
-
|
159
|
-
def log_file
|
160
|
-
config.logger.file
|
161
|
-
end
|
162
|
-
|
163
|
-
def json_layout
|
164
|
-
Logging.layouts.json(date_pattern: Constants::LOG_DATE_PATTERN)
|
165
|
-
end
|
166
|
-
|
167
|
-
def stdout_layout
|
168
|
-
if config.logger.stdout_json == true
|
169
|
-
json_layout
|
170
|
-
else
|
171
|
-
Logging.layouts.pattern(date_pattern: Constants::LOG_DATE_PATTERN)
|
172
|
-
end
|
173
|
-
end
|
174
83
|
end
|
175
84
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phobos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Túlio Ornelas
|
@@ -15,7 +15,7 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date:
|
18
|
+
date: 2022-05-13 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: bundler
|
@@ -277,6 +277,7 @@ files:
|
|
277
277
|
- lib/phobos/cli.rb
|
278
278
|
- lib/phobos/cli/runner.rb
|
279
279
|
- lib/phobos/cli/start.rb
|
280
|
+
- lib/phobos/configuration.rb
|
280
281
|
- lib/phobos/constants.rb
|
281
282
|
- lib/phobos/deep_struct.rb
|
282
283
|
- lib/phobos/echo_handler.rb
|
@@ -314,7 +315,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
314
315
|
- !ruby/object:Gem::Version
|
315
316
|
version: '0'
|
316
317
|
requirements: []
|
317
|
-
rubygems_version: 3.
|
318
|
+
rubygems_version: 3.3.5
|
318
319
|
signing_key:
|
319
320
|
specification_version: 4
|
320
321
|
summary: Simplifying Kafka for ruby apps
|