istox 0.1.156.2 → 0.1.157.1
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/.idea/istox-gem.iml +2 -1852
- data/Gemfile.lock +21 -15
- data/istox.gemspec +1 -0
- data/lib/istox.rb +1 -0
- data/lib/istox/consumers/blockchain_status_handler.rb +1 -1
- data/lib/istox/helpers/formatter.rb +6 -4
- data/lib/istox/helpers/publisher.rb +18 -18
- data/lib/istox/helpers/sns_publisher.rb +38 -0
- data/lib/istox/version.rb +1 -1
- metadata +21 -6
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
istox (0.1.
|
4
|
+
istox (0.1.157)
|
5
5
|
amazing_print
|
6
6
|
awesome_print
|
7
|
+
aws-sdk-sns (~> 1)
|
7
8
|
binding_of_caller
|
8
9
|
bunny (>= 2.12.0)
|
9
10
|
exponential-backoff (= 0.0.4)
|
@@ -63,8 +64,8 @@ GEM
|
|
63
64
|
i18n (>= 0.7, < 2)
|
64
65
|
minitest (~> 5.1)
|
65
66
|
tzinfo (~> 1.1)
|
66
|
-
amazing_print (1.2.
|
67
|
-
amq-protocol (2.3.
|
67
|
+
amazing_print (1.2.1)
|
68
|
+
amq-protocol (2.3.2)
|
68
69
|
arel (9.0.0)
|
69
70
|
awesome_print (1.8.0)
|
70
71
|
aws-eventstream (1.1.0)
|
@@ -74,6 +75,9 @@ GEM
|
|
74
75
|
aws-partitions (~> 1, >= 1.239.0)
|
75
76
|
aws-sigv4 (~> 1.1)
|
76
77
|
jmespath (~> 1.0)
|
78
|
+
aws-sdk-sns (1.24.0)
|
79
|
+
aws-sdk-core (~> 3, >= 3.71.0)
|
80
|
+
aws-sigv4 (~> 1.1)
|
77
81
|
aws-sdk-xray (1.4.0)
|
78
82
|
aws-sdk-core (~> 3)
|
79
83
|
aws-sigv4 (~> 1.0)
|
@@ -82,13 +86,14 @@ GEM
|
|
82
86
|
aws-xray-sdk (0.11.4)
|
83
87
|
aws-sdk-xray (~> 1.4.0)
|
84
88
|
multi_json (~> 1)
|
89
|
+
bigdecimal (2.0.0)
|
85
90
|
binding_of_caller (0.8.0)
|
86
91
|
debug_inspector (>= 0.0.1)
|
87
92
|
builder (3.2.4)
|
88
93
|
bullet (5.7.6)
|
89
94
|
activesupport (>= 3.0.0)
|
90
95
|
uniform_notifier (~> 1.11.0)
|
91
|
-
bunny (2.
|
96
|
+
bunny (2.16.1)
|
92
97
|
amq-protocol (~> 2.3, >= 2.3.1)
|
93
98
|
byebug (11.1.3)
|
94
99
|
coderay (1.1.2)
|
@@ -115,21 +120,21 @@ GEM
|
|
115
120
|
ffi (1.13.1)
|
116
121
|
globalid (0.4.2)
|
117
122
|
activesupport (>= 4.2.0)
|
118
|
-
google-protobuf (3.
|
123
|
+
google-protobuf (3.13.0-universal-darwin)
|
119
124
|
googleapis-common-protos-types (1.0.5)
|
120
125
|
google-protobuf (~> 3.11)
|
121
126
|
graphlient (0.4.0)
|
122
127
|
faraday (>= 1.0)
|
123
128
|
faraday_middleware
|
124
129
|
graphql-client
|
125
|
-
graphql (1.
|
130
|
+
graphql (1.11.3)
|
126
131
|
graphql-client (0.16.0)
|
127
132
|
activesupport (>= 3.0)
|
128
133
|
graphql (~> 1.8)
|
129
|
-
grpc (1.
|
130
|
-
google-protobuf (~> 3.
|
134
|
+
grpc (1.31.1-universal-darwin)
|
135
|
+
google-protobuf (~> 3.12)
|
131
136
|
googleapis-common-protos-types (~> 1.0)
|
132
|
-
grpc-tools (1.
|
137
|
+
grpc-tools (1.31.1)
|
133
138
|
gruf (2.8.1)
|
134
139
|
activesupport (> 4)
|
135
140
|
concurrent-ruby (> 1)
|
@@ -166,7 +171,8 @@ GEM
|
|
166
171
|
nio4r (2.3.1)
|
167
172
|
nokogiri (1.10.9)
|
168
173
|
mini_portile2 (~> 2.4.0)
|
169
|
-
oj (3.10.
|
174
|
+
oj (3.10.9)
|
175
|
+
bigdecimal (~> 2.0)
|
170
176
|
ougai (1.8.5)
|
171
177
|
oj (~> 3.10)
|
172
178
|
paranoia (2.4.2)
|
@@ -218,16 +224,16 @@ GEM
|
|
218
224
|
redis-activesupport (5.2.0)
|
219
225
|
activesupport (>= 3, < 7)
|
220
226
|
redis-store (>= 1.3, < 2)
|
221
|
-
redis-namespace (1.
|
227
|
+
redis-namespace (1.8.0)
|
222
228
|
redis (>= 3.0.4)
|
223
|
-
redis-rack (2.1.
|
229
|
+
redis-rack (2.1.3)
|
224
230
|
rack (>= 2.0.8, < 3)
|
225
231
|
redis-store (>= 1.2, < 2)
|
226
232
|
redis-rails (5.0.2)
|
227
233
|
redis-actionpack (>= 5.0, < 6)
|
228
234
|
redis-activesupport (>= 5.0, < 6)
|
229
235
|
redis-store (>= 1.2, < 2)
|
230
|
-
redis-store (1.
|
236
|
+
redis-store (1.9.0)
|
231
237
|
redis (>= 4, < 5)
|
232
238
|
rspec (3.8.0)
|
233
239
|
rspec-core (~> 3.8.0)
|
@@ -250,7 +256,7 @@ GEM
|
|
250
256
|
rspec-mocks (~> 3.8.0)
|
251
257
|
rspec-support (~> 3.8.0)
|
252
258
|
rspec-support (3.8.0)
|
253
|
-
slop (4.8.
|
259
|
+
slop (4.8.2)
|
254
260
|
sprockets (3.7.2)
|
255
261
|
concurrent-ruby (~> 1.0)
|
256
262
|
rack (> 1, < 3)
|
@@ -265,7 +271,7 @@ GEM
|
|
265
271
|
tzinfo (1.2.6)
|
266
272
|
thread_safe (~> 0.1)
|
267
273
|
uniform_notifier (1.11.0)
|
268
|
-
vault (0.
|
274
|
+
vault (0.15.0)
|
269
275
|
aws-sigv4
|
270
276
|
websocket-driver (0.7.0)
|
271
277
|
websocket-extensions (>= 0.1.0)
|
data/istox.gemspec
CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
|
33
33
|
spec.add_dependency 'amazing_print'
|
34
34
|
spec.add_dependency 'awesome_print'
|
35
|
+
spec.add_dependency 'aws-sdk-sns', '~> 1'
|
35
36
|
spec.add_dependency 'binding_of_caller'
|
36
37
|
spec.add_dependency 'bunny', '>= 2.12.0'
|
37
38
|
spec.add_dependency 'exponential-backoff', '0.0.4'
|
data/lib/istox.rb
CHANGED
@@ -16,6 +16,7 @@ module Istox
|
|
16
16
|
require 'istox/helpers/logger'
|
17
17
|
require 'istox/interfaces/chainhub/transaction'
|
18
18
|
require 'istox/helpers/publisher'
|
19
|
+
require 'istox/helpers/sns_publisher'
|
19
20
|
require 'istox/helpers/subscriber'
|
20
21
|
require 'istox/helpers/bunny_boot'
|
21
22
|
require 'istox/helpers/rate_limit'
|
@@ -88,7 +88,7 @@ module Istox
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def mark_resource_handled(receipt)
|
91
|
-
receipt.update(resource_handled: true)
|
91
|
+
receipt.reload.update(resource_handled: true)
|
92
92
|
rescue StandardError => e
|
93
93
|
log.warn "Unable to update resource_handled for receipt #{receipt.inspect},
|
94
94
|
but will silently ignore the error"
|
@@ -2,21 +2,23 @@ module Istox
|
|
2
2
|
class Formatter
|
3
3
|
class << self
|
4
4
|
# format a number, eg. 20000.134 > 20,000.14
|
5
|
-
def number(input, round_mode: :half_up, precision: 2)
|
5
|
+
def number(input, round_mode: :half_up, precision: 2, abs_num: false)
|
6
6
|
BigDecimal.mode(BigDecimal::ROUND_MODE, round_mode)
|
7
7
|
|
8
8
|
input = 0 if input.blank?
|
9
9
|
|
10
10
|
input = ::BigDecimal.new(input.to_s).round(precision, round_mode)
|
11
11
|
|
12
|
+
input = input.abs if abs_num
|
13
|
+
|
12
14
|
result = format("%.#{precision}f", input)
|
13
15
|
|
14
16
|
result.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
|
15
17
|
end
|
16
18
|
|
17
|
-
# format a money, eg. 20000.134 > SGD 20,000.14, position can be :front or :behind
|
18
|
-
def money(input, round_mode: :half_up, precision: 2, currency:, position: :front)
|
19
|
-
result = number(input, round_mode: round_mode, precision: precision)
|
19
|
+
# format a money, eg. 20000.134 > SGD 20,000.14, position can be :front or :behind, abs_num: whether to absolute the number
|
20
|
+
def money(input, round_mode: :half_up, precision: 2, currency:, position: :front, abs_num: false)
|
21
|
+
result = number(input, round_mode: round_mode, precision: precision, abs_num: abs_num)
|
20
22
|
|
21
23
|
return currency + ' ' + result if position == :front
|
22
24
|
|
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'securerandom'
|
2
2
|
require 'istox/helpers/logger'
|
3
3
|
|
4
|
+
class RabbitMQPublishError < StandardError
|
5
|
+
end
|
6
|
+
|
4
7
|
module Istox
|
5
8
|
# Publisher is relying on BunnyBoot to publish message, please make sure BunnyBoot is initalised properly first during runtime.
|
6
9
|
class Publisher
|
@@ -179,13 +182,7 @@ module Istox
|
|
179
182
|
log.debug "Got a returned message info: #{return_info}"
|
180
183
|
log.debug "Got a returned message properties: #{properties}"
|
181
184
|
log.debug "Got a returned message content: #{content}"
|
182
|
-
|
183
|
-
::Istox::BunnyBoot.find_trackers("message_id:#{properties[:message_id]}").each do |key|
|
184
|
-
log.debug("On_return, update key #{key} in redis on status and retry counter")
|
185
|
-
::Istox::BunnyBoot.update_tracker_by_status(key, 2)
|
186
|
-
::Istox::BunnyBoot.update_tracker_incr_retry(key)
|
187
|
-
end
|
188
|
-
=end
|
185
|
+
|
189
186
|
if properties[:headers] && properties[:headers][:sender]
|
190
187
|
@error = Hash.new if @error.nil?
|
191
188
|
tid = properties[:headers][:sender]
|
@@ -204,7 +201,7 @@ module Istox
|
|
204
201
|
end
|
205
202
|
|
206
203
|
# Handle republish: check and increase retry count
|
207
|
-
def republish(ex, options = {}, message)
|
204
|
+
def republish(ex, options = {}, message, error)
|
208
205
|
options[:headers] = {} if options[:headers].nil?
|
209
206
|
|
210
207
|
if options[:headers][:republish].nil?
|
@@ -213,11 +210,12 @@ module Istox
|
|
213
210
|
else
|
214
211
|
options[:headers][:republish_count] += 1
|
215
212
|
if options[:headers][:republish_count] > 10
|
216
|
-
log.
|
213
|
+
log.fatal "Already retry to publish for 10 times, and give up retry"
|
217
214
|
log.info "Publish options: #{options.inspect}"
|
218
215
|
log.info "Publish to exchange: #{ex.name}"
|
219
216
|
log.info "Publish payload: #{message.inspect}"
|
220
|
-
|
217
|
+
|
218
|
+
raise RabbitMQPublishError, "Publish fails after retries(10): #{error}"
|
221
219
|
end
|
222
220
|
end
|
223
221
|
|
@@ -250,13 +248,13 @@ module Istox
|
|
250
248
|
success = ex.channel.wait_for_confirms
|
251
249
|
if success
|
252
250
|
log.debug("Message confirm success: remove message for #{channel_id}")
|
253
|
-
# ::Istox::BunnyBoot.del_tracker_on_channel channel_id
|
254
|
-
# republish(ex, options, message)
|
255
251
|
if @error.nil? || @error[Thread.current.object_id].nil?
|
252
|
+
# republish(ex, options, message, 'simulate errors')
|
256
253
|
true
|
257
254
|
else
|
255
|
+
error = @error[Thread.current.object_id][:return_info][:reply_text]
|
258
256
|
@error[Thread.current.object_id] = nil
|
259
|
-
republish(ex,options,message)
|
257
|
+
republish(ex, options, message, error)
|
260
258
|
end
|
261
259
|
else
|
262
260
|
ex.channel.nacked_set.each do |n|
|
@@ -264,18 +262,20 @@ module Istox
|
|
264
262
|
# options = ::Istox::BunnyBoot.find_tracker_on_channel(channel_id, n, 'options')
|
265
263
|
# options = JSON.parse(options, :symbolize_names => true)
|
266
264
|
# options[:delivery_tag] = n
|
267
|
-
republish(ex, options, message)
|
265
|
+
republish(ex, options, message, 'broker processing fails')
|
268
266
|
end
|
269
267
|
end
|
270
268
|
end
|
271
269
|
rescue Bunny::ConnectionClosedError => e
|
272
|
-
log.
|
270
|
+
log.error "Publish fails due to #{e}"
|
273
271
|
# For network related retry, sleep 2 second before retry
|
274
272
|
# Because it may take some seconds for automatic recovery of network
|
275
273
|
sleep 2
|
276
|
-
republish(ex,options,message)
|
274
|
+
republish(ex, options, message, e.message)
|
275
|
+
rescue RabbitMQPublishError => e
|
276
|
+
raise RabbitMQPublishError, e.message
|
277
277
|
rescue => e
|
278
|
-
log.
|
278
|
+
log.error "Publish error happening: #{e.message}"
|
279
279
|
|
280
280
|
# If the error indicates that the channel is already closed
|
281
281
|
# then clear hash @channel and @exchange
|
@@ -287,7 +287,7 @@ module Istox
|
|
287
287
|
end
|
288
288
|
|
289
289
|
# Republish msg
|
290
|
-
republish(ex, options, message)
|
290
|
+
republish(ex, options, message, e.message)
|
291
291
|
end
|
292
292
|
end
|
293
293
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'aws-sdk-sns'
|
2
|
+
|
3
|
+
module Istox
|
4
|
+
class SnsPublisher
|
5
|
+
class << self
|
6
|
+
# exception will not be thrown if throw_exception is set to false, exception will only be printed out and swallowed
|
7
|
+
def publish(message, topic_arn: nil, throw_exception: false)
|
8
|
+
if message.nil?
|
9
|
+
log.info('No message to publish, skipping SNS publish now...')
|
10
|
+
return
|
11
|
+
end
|
12
|
+
|
13
|
+
log.info('Publishing to SNS...')
|
14
|
+
|
15
|
+
message = JSON.generate(message) unless message.is_a? String
|
16
|
+
|
17
|
+
sns_client.publish({ topic_arn: topic_arn || ENV.fetch('PUSHER_TOPIC_ARN', ''), message: message })
|
18
|
+
|
19
|
+
log.info('Publish to SNS successfully.')
|
20
|
+
rescue StandardError => e
|
21
|
+
log.fatal 'Unable to publish SNS message.'
|
22
|
+
log.fatal(e)
|
23
|
+
log.info('Failed to publish SNS, ignoring...') unless throw_exception
|
24
|
+
|
25
|
+
raise e if throw_exception
|
26
|
+
end
|
27
|
+
|
28
|
+
def sns_client
|
29
|
+
return @sns_client if @sns_client.present?
|
30
|
+
|
31
|
+
Aws.config.update({ region: ENV.fetch('AWS_REGION', 'ap-southeast-1'),
|
32
|
+
credentials: Aws::Credentials.new(ENV.fetch('AWS_STS_ACCESS_KEY_ID'), ENV.fetch('AWS_STS_SECRET_ACCESS_KEY')) })
|
33
|
+
|
34
|
+
@sns_client = Aws::SNS::Client.new(region: ENV.fetch('AWS_REGION', 'ap-southeast-1'))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/istox/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: istox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.157.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Siong Leng
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amazing_print
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-sns
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: binding_of_caller
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -509,6 +523,7 @@ files:
|
|
509
523
|
- lib/istox/helpers/regex_helper.rb
|
510
524
|
- lib/istox/helpers/remote_model_cache.rb
|
511
525
|
- lib/istox/helpers/result_handler.rb
|
526
|
+
- lib/istox/helpers/sns_publisher.rb
|
512
527
|
- lib/istox/helpers/subscriber.rb
|
513
528
|
- lib/istox/helpers/vault.rb
|
514
529
|
- lib/istox/helpers/xray/grpc_client_xray_interceptor.rb
|
@@ -524,7 +539,7 @@ files:
|
|
524
539
|
homepage: http://www.abc.com
|
525
540
|
licenses: []
|
526
541
|
metadata: {}
|
527
|
-
post_install_message:
|
542
|
+
post_install_message:
|
528
543
|
rdoc_options: []
|
529
544
|
require_paths:
|
530
545
|
- lib
|
@@ -539,8 +554,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
539
554
|
- !ruby/object:Gem::Version
|
540
555
|
version: '0'
|
541
556
|
requirements: []
|
542
|
-
rubygems_version: 3.0.
|
543
|
-
signing_key:
|
557
|
+
rubygems_version: 3.0.6
|
558
|
+
signing_key:
|
544
559
|
specification_version: 4
|
545
560
|
summary: istox backend shared gem
|
546
561
|
test_files: []
|