jetstream_bridge 1.12.0 → 1.13.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2ee7c06993977d72ea689592c1e9e9ec39c21f24b8e7483c751fadfad5d271d
4
- data.tar.gz: dd51392076945977ba1e40436d8bc01f77ea9671c2318e21c434e020b4784899
3
+ metadata.gz: 6196adf923e1dff8c5d62c9e2e617234b701de9337e915bb09496d4ad625e9ff
4
+ data.tar.gz: e7f0ee0c49ae92a0304ad0e1e3e221c37c124420c30653cbcbed6e67d24e77c1
5
5
  SHA512:
6
- metadata.gz: 0f71638e9afe0283fdc76834b71ee640e7eecb312deaa6160a4babf7dfc895a5fa9213810d192f6e45ac9f1d3e6729c828f027e3ec9505bfb2fca9b3f9a3caef
7
- data.tar.gz: a1e0a4ffc02d0372344a84ec1b6d07288cf8c026a35f38d0ddaaf395fa9835a0e958fc7a4e1027b65fb5f1ca9b80a59715579b317d9d2f132ad1f4fdbb13abb6
6
+ metadata.gz: 535122ca803451429cbd3ee1e5d56b6f6f45e7412a1bdbd0bfb210970641a3d3ada9d8f1f0737751cc0f330494b43a0912f52b596974dc271ab1bd8e33c77a70
7
+ data.tar.gz: 599b1ddc980439dc84d032fc3c855ac059f66c55fe8f6e55e27bc55e5f93f0555c6c41a74c64e250996f642cb4a738af66cd841283c1b496a5487ce0a0c96a52
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jetstream_bridge (1.12.0)
4
+ jetstream_bridge (1.13.0)
5
5
  activerecord (>= 6.0)
6
6
  activesupport (>= 6.0)
7
7
  nats-pure (~> 2.4)
@@ -27,15 +27,15 @@ module JetstreamBridge
27
27
  event_id = envelope['event_id'].to_s
28
28
 
29
29
  attrs = {
30
- event_id: event_id,
31
- subject: subject,
32
- payload: ModelUtils.json_dump(envelope),
33
- headers: ModelUtils.json_dump({ 'Nats-Msg-Id' => event_id }),
34
- status: 'publishing',
30
+ event_id: event_id,
31
+ subject: subject,
32
+ payload: ModelUtils.json_dump(envelope),
33
+ headers: ModelUtils.json_dump({ 'Nats-Msg-Id' => event_id }),
34
+ status: 'publishing',
35
35
  last_error: nil
36
36
  }
37
- attrs[:attempts] = 1 + (record.attempts || 0) if record.respond_to?(:attempts)
38
- attrs[:enqueued_at]= (record.enqueued_at || now) if record.respond_to?(:enqueued_at)
37
+ attrs[:attempts] = 1 + (record.attempts || 0) if record.respond_to?(:attempts)
38
+ attrs[:enqueued_at] = (record.enqueued_at || now) if record.respond_to?(:enqueued_at)
39
39
  attrs[:updated_at] = now if record.respond_to?(:updated_at)
40
40
 
41
41
  ModelUtils.assign_known_attrs(record, attrs)
@@ -45,8 +45,8 @@ module JetstreamBridge
45
45
  def persist_success(record)
46
46
  now = Time.now.utc
47
47
  attrs = { status: 'sent' }
48
- attrs[:sent_at] = now if record.respond_to?(:sent_at)
49
- attrs[:updated_at]= now if record.respond_to?(:updated_at)
48
+ attrs[:sent_at] = now if record.respond_to?(:sent_at)
49
+ attrs[:updated_at] = now if record.respond_to?(:updated_at)
50
50
  ModelUtils.assign_known_attrs(record, attrs)
51
51
  record.save!
52
52
  end
@@ -61,9 +61,10 @@ module JetstreamBridge
61
61
 
62
62
  def persist_exception(record, error)
63
63
  return unless record
64
+
64
65
  persist_failure(record, "#{error.class}: #{error.message}")
65
- rescue => e2
66
- Logging.warn("Failed to persist outbox failure: #{e2.class}: #{e2.message}",
66
+ rescue StandardError => e
67
+ Logging.warn("Failed to persist outbox failure: #{e.class}: #{e.message}",
67
68
  tag: 'JetstreamBridge::Publisher')
68
69
  end
69
70
  end
@@ -6,6 +6,7 @@ require_relative '../core/connection'
6
6
  require_relative '../core/logging'
7
7
  require_relative '../core/config'
8
8
  require_relative '../core/model_utils'
9
+ require_relative 'outbox_repository'
9
10
 
10
11
  module JetstreamBridge
11
12
  # Publishes to "{env}.data.sync.{app}.{dest}".
@@ -14,10 +15,10 @@ module JetstreamBridge
14
15
  RETRY_BACKOFFS = [0.25, 1.0].freeze
15
16
 
16
17
  TRANSIENT_ERRORS = begin
17
- errs = [NATS::IO::Timeout, NATS::IO::Error]
18
- errs << NATS::IO::SocketTimeoutError if defined?(NATS::IO::SocketTimeoutError)
19
- errs.freeze
20
- end
18
+ errs = [NATS::IO::Timeout, NATS::IO::Error]
19
+ errs << NATS::IO::SocketTimeoutError if defined?(NATS::IO::SocketTimeoutError)
20
+ errs.freeze
21
+ end
21
22
 
22
23
  def initialize
23
24
  @jts = Connection.connect!
@@ -42,6 +43,7 @@ module JetstreamBridge
42
43
 
43
44
  def ensure_destination!
44
45
  return unless JetstreamBridge.config.destination_app.to_s.empty?
46
+
45
47
  raise ArgumentError, 'destination_app must be configured'
46
48
  end
47
49
 
@@ -78,7 +80,7 @@ module JetstreamBridge
78
80
  ok = with_retries { do_publish(subject, envelope) }
79
81
  ok ? repo.persist_success(record) : repo.persist_failure(record, 'Publish returned false')
80
82
  ok
81
- rescue => e
83
+ rescue StandardError => e
82
84
  repo.persist_exception(record, e) if defined?(repo) && defined?(record)
83
85
  log_error(false, e)
84
86
  end
@@ -88,10 +90,11 @@ module JetstreamBridge
88
90
  def with_retries(retries = DEFAULT_RETRIES)
89
91
  attempts = 0
90
92
  begin
91
- return yield
93
+ yield
92
94
  rescue *TRANSIENT_ERRORS => e
93
95
  attempts += 1
94
96
  return log_error(false, e) if attempts > retries
97
+
95
98
  backoff(attempts, e)
96
99
  retry
97
100
  end
@@ -112,15 +115,15 @@ module JetstreamBridge
112
115
 
113
116
  def build_envelope(resource_type, event_type, payload, options = {})
114
117
  {
115
- 'event_id' => options[:event_id] || SecureRandom.uuid,
118
+ 'event_id' => options[:event_id] || SecureRandom.uuid,
116
119
  'schema_version' => 1,
117
- 'event_type' => event_type,
118
- 'producer' => JetstreamBridge.config.app_name,
119
- 'resource_id' => (payload['id'] || payload[:id]).to_s,
120
- 'occurred_at' => (options[:occurred_at] || Time.now.utc).iso8601,
121
- 'trace_id' => options[:trace_id] || SecureRandom.hex(8),
122
- 'resource_type' => resource_type,
123
- 'payload' => payload
120
+ 'event_type' => event_type,
121
+ 'producer' => JetstreamBridge.config.app_name,
122
+ 'resource_id' => (payload['id'] || payload[:id]).to_s,
123
+ 'occurred_at' => (options[:occurred_at] || Time.now.utc).iso8601,
124
+ 'trace_id' => options[:trace_id] || SecureRandom.hex(8),
125
+ 'resource_type' => resource_type,
126
+ 'payload' => payload
124
127
  }
125
128
  end
126
129
  end
@@ -4,5 +4,5 @@
4
4
  #
5
5
  # Version constant for the gem.
6
6
  module JetstreamBridge
7
- VERSION = '1.12.0'
7
+ VERSION = '1.13.0'
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jetstream_bridge
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Attara