jetstream_bridge 1.11.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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/jetstream_bridge/publisher/outbox_repository.rb +12 -11
- data/lib/jetstream_bridge/publisher/publisher.rb +17 -14
- data/lib/jetstream_bridge/version.rb +1 -1
- data/lib/jetstream_bridge.rb +2 -2
- metadata +3 -3
- /data/lib/jetstream_bridge/{models/inbox_event.rb → inbox_event.rb} +0 -0
- /data/lib/jetstream_bridge/{models/outbox_event.rb → outbox_event.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6196adf923e1dff8c5d62c9e2e617234b701de9337e915bb09496d4ad625e9ff
|
4
|
+
data.tar.gz: e7f0ee0c49ae92a0304ad0e1e3e221c37c124420c30653cbcbed6e67d24e77c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 535122ca803451429cbd3ee1e5d56b6f6f45e7412a1bdbd0bfb210970641a3d3ada9d8f1f0737751cc0f330494b43a0912f52b596974dc271ab1bd8e33c77a70
|
7
|
+
data.tar.gz: 599b1ddc980439dc84d032fc3c855ac059f66c55fe8f6e55e27bc55e5f93f0555c6c41a74c64e250996f642cb4a738af66cd841283c1b496a5487ce0a0c96a52
|
data/Gemfile.lock
CHANGED
@@ -27,15 +27,15 @@ module JetstreamBridge
|
|
27
27
|
event_id = envelope['event_id'].to_s
|
28
28
|
|
29
29
|
attrs = {
|
30
|
-
event_id:
|
31
|
-
subject:
|
32
|
-
payload:
|
33
|
-
headers:
|
34
|
-
status:
|
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]
|
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]
|
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 =>
|
66
|
-
Logging.warn("Failed to persist outbox failure: #{
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
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'
|
118
|
+
'event_id' => options[:event_id] || SecureRandom.uuid,
|
116
119
|
'schema_version' => 1,
|
117
|
-
'event_type'
|
118
|
-
'producer'
|
119
|
-
'resource_id'
|
120
|
-
'occurred_at'
|
121
|
-
'trace_id'
|
122
|
-
'resource_type'
|
123
|
-
'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
|
data/lib/jetstream_bridge.rb
CHANGED
@@ -12,8 +12,8 @@ require_relative 'jetstream_bridge/consumer/consumer'
|
|
12
12
|
require_relative 'jetstream_bridge/railtie' if defined?(Rails::Railtie)
|
13
13
|
|
14
14
|
# Load gem-provided models from lib/
|
15
|
-
require_relative 'jetstream_bridge/
|
16
|
-
require_relative 'jetstream_bridge/
|
15
|
+
require_relative 'jetstream_bridge/inbox_event'
|
16
|
+
require_relative 'jetstream_bridge/outbox_event'
|
17
17
|
|
18
18
|
|
19
19
|
# JetstreamBridge main module.
|
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.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Attara
|
@@ -194,8 +194,8 @@ files:
|
|
194
194
|
- lib/jetstream_bridge/core/logging.rb
|
195
195
|
- lib/jetstream_bridge/core/model_codec_setup.rb
|
196
196
|
- lib/jetstream_bridge/core/model_utils.rb
|
197
|
-
- lib/jetstream_bridge/
|
198
|
-
- lib/jetstream_bridge/
|
197
|
+
- lib/jetstream_bridge/inbox_event.rb
|
198
|
+
- lib/jetstream_bridge/outbox_event.rb
|
199
199
|
- lib/jetstream_bridge/publisher/outbox_repository.rb
|
200
200
|
- lib/jetstream_bridge/publisher/publisher.rb
|
201
201
|
- lib/jetstream_bridge/railtie.rb
|
File without changes
|
File without changes
|