radiator 0.4.5 → 0.4.6pre1

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: f53430692cf228456ddec8f91bcb964b65b78aeebfcd7fa1eaab6c26e871ad7f
4
- data.tar.gz: 44e93244d8505fc8b82fee7157fc752a0f60fadf885bfcb204e64bb83bf74653
3
+ metadata.gz: 0f3d29e8d5a72406abdbe9a8a483a37bae11500ac161f6ef1d572590dfe21b44
4
+ data.tar.gz: 43f28b9697b5b183288e47eace0d99ce082b4bc0d1758752b91a8d5aba623201
5
5
  SHA512:
6
- metadata.gz: 93187ca8f3308436391d89193e0ae555b1e3f155e98a0981073a1d74c8801d16133f0baf7a63706ed70d1edbdbe67657348fd26a1e16c0dd6de651982bb60cd8
7
- data.tar.gz: 07df4deef02419958b07c399a399f66d1a28c7c5d7516f9c62bc117363c2c0ccd72702f6587f870c83640a70f05cbc9aa7f667ca763db022c77449f5f2c0a837
6
+ metadata.gz: 646108fed41039183164d59e89725c8df0845a94201b634de14b05d109a4e4b9b824ef4431e8ffa37a7b9ae64b3cc38696e104b53b5e6423eafeee41710b78e3
7
+ data.tar.gz: 4612d9495d2a77ee15660be224eea74082a94d6d29f1e7f5fe7d63bd8d03300ba623c7f7710d5fcd00f9cadc63915263f122b4a90885258e8b0f90d536ae9e98
data/README.md CHANGED
@@ -13,9 +13,9 @@ Radiator is an API Client for interaction with the STEEM network using Ruby.
13
13
  #### Changes in v0.4.5
14
14
 
15
15
  * Added support to query and stream a Steem Smart Contract backed side-chains like Steem Engine.
16
- * [Blockchain](https://www.rubydoc.info/gems/radiator/radiator/doc/Radiator/SSC/Blockchain.html)
17
- * [Stream](https://www.rubydoc.info/gems/radiator/radiator/doc/Radiator/SSC/Stream.html)
18
- * [Contracts](https://www.rubydoc.info/gems/radiator/radiator/doc/Radiator/SSC/Contracts.html)
16
+ * [Blockchain](https://www.rubydoc.info/gems/radiator/0.4.5/Radiator/SSC/Blockchain.html)
17
+ * [Stream](https://www.rubydoc.info/gems/radiator/0.4.5/Radiator/SSC/Stream.html)
18
+ * [Contracts](https://www.rubydoc.info/gems/radiator/0.4.5/Radiator/SSC/Contracts.html)
19
19
 
20
20
  #### Changes in v0.4.0
21
21
 
@@ -629,7 +629,7 @@ https://github.com/inertia186/radiator/issues/12
629
629
  ---
630
630
 
631
631
  <center>
632
- <img src="http://www.steemimg.com/images/2016/08/19/RadiatorCoolingFan-54in-Webfdcb1.png" />
632
+ <img src="https://steemitimages.com/0x0/http://www.steemimg.com/images/2016/08/19/RadiatorCoolingFan-54in-Webfdcb1.png" />
633
633
  </center>
634
634
 
635
635
  See my previous Ruby How To posts in: [#radiator](https://steemit.com/created/radiator) [#ruby](https://steemit.com/created/ruby)
@@ -7,6 +7,8 @@ module Radiator
7
7
  'User-Agent' => Radiator::AGENT_ID
8
8
  }
9
9
 
10
+ MAX_BACKOFF = 60.0
11
+
10
12
  def initialize(options = {})
11
13
  @root_url = options[:root_url] || 'https://api.steem-engine.com/rpc'
12
14
 
@@ -28,6 +30,12 @@ module Radiator
28
30
  true
29
31
  end
30
32
 
33
+ @persist = if options[:persist].nil?
34
+ true
35
+ else
36
+ options[:persist]
37
+ end
38
+
31
39
  if defined? Net::HTTP::Persistent::DEFAULT_POOL_SIZE
32
40
  @pool_size = options[:pool_size] || Net::HTTP::Persistent::DEFAULT_POOL_SIZE
33
41
  end
@@ -61,18 +69,24 @@ module Radiator
61
69
  end
62
70
 
63
71
  def http
64
- @http ||= if defined? Net::HTTP::Persistent::DEFAULT_POOL_SIZE
65
- Net::HTTP::Persistent.new(name: http_id, pool_size: @pool_size).tap do |http|
66
- http.keep_alive = 30
67
- http.idle_timeout = 10
68
- http.max_requests = @max_requests
69
- http.retry_change_requests = true
70
- http.reuse_ssl_sessions = @reuse_ssl_sessions
72
+ @http ||= if persist?
73
+ if defined? Net::HTTP::Persistent::DEFAULT_POOL_SIZE
74
+ Net::HTTP::Persistent.new(name: http_id, pool_size: @pool_size).tap do |http|
75
+ http.keep_alive = 30
76
+ http.idle_timeout = 10
77
+ http.max_requests = @max_requests
78
+ http.retry_change_requests = true
79
+ http.reuse_ssl_sessions = @reuse_ssl_sessions
80
+ end
81
+ else
82
+ # net-http-persistent < 3.0
83
+ Net::HTTP::Persistent.new(http_id) do |http|
84
+ http = Net::HTTP.new(uri.host, uri.port)
85
+ http.use_ssl = uri.scheme == 'https'
86
+ end
71
87
  end
72
88
  else
73
- # net-http-persistent < 3.0
74
- Net::HTTP::Persistent.new(http_id) do |http|
75
- http = Net::HTTP.new(uri.host, uri.port)
89
+ Net::HTTP.new(uri.host, uri.port).tap do |http|
76
90
  http.use_ssl = uri.scheme == 'https'
77
91
  end
78
92
  end
@@ -84,8 +98,27 @@ module Radiator
84
98
 
85
99
  def request(options)
86
100
  request = post_request
101
+ skip_health_check = options.delete(:skip_health_check)
87
102
  request.body = JSON[options.merge(jsonrpc: '2.0', id: rpc_id)]
88
103
 
104
+ unless skip_health_check
105
+ unless healthy?
106
+ @backoff ||= 0.1
107
+
108
+ backoff = @backoff
109
+
110
+ if !!backoff
111
+ raise "Too many failures on #{url}" if backoff >= MAX_BACKOFF
112
+
113
+ backoff *= backoff
114
+ @backoff = backoff
115
+ sleep backoff
116
+ end
117
+ end
118
+
119
+ @backoff = nil
120
+ end
121
+
89
122
  response = case http
90
123
  when Net::HTTP::Persistent then http.request(uri, request)
91
124
  when Net::HTTP then http.request(request)
@@ -100,6 +133,15 @@ module Radiator
100
133
 
101
134
  response.result
102
135
  end
136
+
137
+ def healthy?
138
+ warn("Health check not defined for: #{uri}")
139
+ true
140
+ end
141
+
142
+ def persist?
143
+ !!@persist
144
+ end
103
145
  end
104
146
  end
105
147
  end
@@ -42,6 +42,16 @@ module Radiator
42
42
  def transaction_info(trx_id)
43
43
  request(method: 'getTransactionInfo', params: {txid: trx_id})
44
44
  end
45
+ protected
46
+ def healthy?
47
+ begin
48
+ request(method: 'getBlockInfo', params: {blockNumber: -1}, skip_health_check: true).nil?
49
+ rescue => e
50
+ warn("Health check for #{uri.inspect} failed: #{e.inspect}")
51
+
52
+ !!shutdown
53
+ end
54
+ end
45
55
  end
46
56
  end
47
57
  end
@@ -66,6 +66,23 @@ module Radiator
66
66
  def find(options = {})
67
67
  request(method: 'find', params: options)
68
68
  end
69
+ protected
70
+ def healthy?
71
+ begin
72
+ request(method: 'find', params: {
73
+ contract: 'tokens',
74
+ table: 'transfers',
75
+ query: {
76
+ symbol: ''
77
+ },
78
+ limit: 0
79
+ }, skip_health_check: true).nil?
80
+ rescue => e
81
+ warn("Health check for #{uri.inspect} failed: #{e.inspect}")
82
+
83
+ !!shutdown
84
+ end
85
+ end
69
86
  end
70
87
  end
71
88
  end
@@ -1,4 +1,4 @@
1
1
  module Radiator
2
- VERSION = '0.4.5'
2
+ VERSION = '0.4.6pre1'
3
3
  AGENT_ID = "radiator/#{VERSION}"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: radiator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.6pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-31 00:00:00.000000000 Z
11
+ date: 2019-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -446,9 +446,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
446
446
  version: '0'
447
447
  required_rubygems_version: !ruby/object:Gem::Requirement
448
448
  requirements:
449
- - - ">="
449
+ - - ">"
450
450
  - !ruby/object:Gem::Version
451
- version: '0'
451
+ version: 1.3.1
452
452
  requirements: []
453
453
  rubyforge_project:
454
454
  rubygems_version: 2.7.7