deimos-ruby 1.19.4 → 1.19.5

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: ebc86e599570ecca44db7513b6867291ab15dc40e1d0449874bace006560905c
4
- data.tar.gz: 3d840e13761a83f44ea03babbe55956367e490efdb22c15e4fa969f2621e715e
3
+ metadata.gz: 6be8380428e48dd415fd6ec606832fab6204a280effc65e65e967ef72dca1c32
4
+ data.tar.gz: 1096e0da58a961c3875b5d8545a6c226ba60ebacd5c60639f09acce4dcb73374
5
5
  SHA512:
6
- metadata.gz: ef1ad52fedf17ebc3310ea4921072a2480c1c651168ab4f78c4522332e28580a82d17e63129b4fc1fb03c46df64433f9c8e2fb96bf79d7148c9852ef58a0a1ae
7
- data.tar.gz: bfa9b9ca8d2685ff98e715d98f60e845c8d360799e996b578fb47f8e86027c7c2d8ee4f79c29c479b37390bf20abe6089598887ed8d73216cbd716b123dcf170
6
+ metadata.gz: 7770d8bf7eb8c9b1db538891a025586411c24c076cfe49474e312ca859386366d24cf57007c0e1230fa98dd2aa17ca3b0fc1c0f9324003918a7df00e0738944f
7
+ data.tar.gz: '02019bdab7dd827f9373de64250c10119ab56dcf441369f3bec7c023e3c524f403fcdb35202c4e92cdfa0b66175ca17905c86ab407cc8f45fea49bad1d33c6b5'
data/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## UNRELEASED
9
9
 
10
+ # 1.19.5 - 2023-03-29
11
+
12
+ - Feature: add additional setting to Deimos.config - payload_log
13
+
10
14
  # 1.19.4 - 2023-03-23
11
15
 
12
16
  - Feature: Limit amount of transactions in a single database call with `max_db_batch_size`
@@ -10,12 +10,13 @@ Nested configuration is denoted in simple dot notation:
10
10
  configurations.
11
11
 
12
12
  ## Base Configuration
13
- Config name|Default|Description
14
- -----------|-------|-----------
15
- logger|`Logger.new(STDOUT)`|The logger that Deimos will use.
16
- phobos_logger|`Deimos.config.logger`|The logger passed to Phobos.
17
- metrics|`Deimos::Metrics::Mock.new`|The metrics backend use for reporting.
18
- tracer|`Deimos::Tracing::Mock.new`|The tracer backend used for debugging.
13
+ Config name| Default |Description
14
+ -----------|-----------------------------|-----------
15
+ logger| `Logger.new(STDOUT)` |The logger that Deimos will use.
16
+ payload_log| `:full` |Determines how much data is logged per payload.</br>`:full` - all keys and payloads are logged.</br>`:keys` - only keys are logged.</br>`:count` - only the total count of messages are logged.
17
+ phobos_logger| `Deimos.config.logger` |The logger passed to Phobos.
18
+ metrics| `Deimos::Metrics::Mock.new` |The metrics backend use for reporting.
19
+ tracer| `Deimos::Tracing::Mock.new` |The tracer backend used for debugging.
19
20
 
20
21
  ## Defining Producers
21
22
 
@@ -9,16 +9,7 @@ module Deimos
9
9
  # @param messages [Array<Deimos::Message>]
10
10
  # @return [void]
11
11
  def publish(producer_class:, messages:)
12
- Deimos.config.logger.info(
13
- message: 'Publishing messages',
14
- topic: messages.first&.topic,
15
- payloads: messages.map do |message|
16
- {
17
- payload: message.payload,
18
- key: message.key
19
- }
20
- end
21
- )
12
+ Deimos.config.logger.info(log_message(messages))
22
13
  execute(producer_class: producer_class, messages: messages)
23
14
  end
24
15
 
@@ -28,6 +19,37 @@ module Deimos
28
19
  def execute(producer_class:, messages:)
29
20
  raise NotImplementedError
30
21
  end
22
+
23
+ private
24
+
25
+ def log_message(messages)
26
+ log_message = {
27
+ message: 'Publishing messages',
28
+ topic: messages.first&.topic
29
+ }
30
+
31
+ case Deimos.config.payload_log
32
+ when :keys
33
+ log_message.merge!(
34
+ payload_keys: messages.map(&:key)
35
+ )
36
+ when :count
37
+ log_message.merge!(
38
+ payloads_count: messages.count
39
+ )
40
+ else
41
+ log_message.merge!(
42
+ payloads: messages.map do |message|
43
+ {
44
+ payload: message.payload,
45
+ key: message.key
46
+ }
47
+ end
48
+ )
49
+ end
50
+
51
+ log_message
52
+ end
31
53
  end
32
54
  end
33
55
  end
@@ -95,6 +95,9 @@ module Deimos
95
95
  # @return [Logger]
96
96
  setting :logger, Logger.new(STDOUT)
97
97
 
98
+ # @return [Symbol]
99
+ setting :payload_log, :full
100
+
98
101
  # @return [Logger]
99
102
  setting :phobos_logger, default_proc: proc { Deimos.config.logger.clone }
100
103
 
@@ -143,7 +143,7 @@ module Deimos
143
143
  Deimos::Backends::Test.sent_messages.any? do |m|
144
144
  hash_matcher = RSpec::Matchers::BuiltIn::Match.new(message)
145
145
  hash_matcher.send(:match,
146
- message.to_h,
146
+ message&.respond_to?(:to_h) ? message.to_h : message,
147
147
  m[:payload]&.with_indifferent_access) &&
148
148
  topic == m[:topic] &&
149
149
  (key.present? ? key == m[:key] : true) &&
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Deimos
4
- VERSION = '1.19.4'
4
+ VERSION = '1.19.5'
5
5
  end
@@ -7,4 +7,28 @@ RSpec.describe Deimos::Backends::Base do
7
7
  with(messages: messages, producer_class: MyProducer)
8
8
  described_class.publish(producer_class: MyProducer, messages: messages)
9
9
  end
10
+
11
+ describe 'payload_log method' do
12
+ it 'should return whole payload (default behavior)' do
13
+ log_message = described_class.send(:log_message, messages)
14
+ expect(log_message[:payloads].count).to eq(3)
15
+ expect(log_message[:payloads].first[:payload]).to eq({ 'foo' => 1 })
16
+ expect(log_message[:payloads].first[:key]).to eq('foo1')
17
+ end
18
+
19
+ it 'should return only keys of messages' do
20
+ Deimos.config.payload_log = :keys
21
+ log_message = described_class.send(:log_message, messages)
22
+ expect(log_message[:payload_keys].count).to eq(3)
23
+ expect(log_message[:payload_keys]).to be_a(Array)
24
+ expect(log_message[:payload_keys].first).to eq('foo1')
25
+ end
26
+
27
+ it 'should return only messages count' do
28
+ Deimos.config.payload_log = :count
29
+ log_message = described_class.send(:log_message, messages)
30
+ expect(log_message[:payloads_count]).to be_a(Integer)
31
+ expect(log_message[:payloads_count]).to eq(3)
32
+ end
33
+ end
10
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deimos-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.4
4
+ version: 1.19.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Orner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-23 00:00:00.000000000 Z
11
+ date: 2023-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avro_turf