meeseeker 0.0.9 → 1.0.0

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: 6b0c21a1d80f88d64cb337412bc98bfa587477720f4e6d8de0ec4c25781d9af4
4
- data.tar.gz: '090cde6805a1bed78470c51413f83edf753c698677b169d77a929cc88d75e9e6'
3
+ metadata.gz: d0ed288dbda6b6cac7cd3e77e520d443a3c908cd9abd5933d5e867e836f11139
4
+ data.tar.gz: c0fad654f2f6afc353b02c8404ee7a3ceac2096ed797d32a1078b8ae28cced9e
5
5
  SHA512:
6
- metadata.gz: 974862220d3dfc63c34fc2883fcf982cbc80e5085a58cfc262c28fb8b3dde9c912c46d604a692ec30137d93007e31de643dfae4bfd60a9ded749771a68fd4369
7
- data.tar.gz: 0ba23902a5fe150682b4d720f620e8a80c94131ec118ae8b23c83b3fd6e60889b06752ac9d8cc47878b633e4a556ae293da87720ca2bd8c8e7776c8ac3e6e1a2
6
+ metadata.gz: 210246f8ab9fa1bab680be81a1b8577ec09b0d252227186a83f2a9e68445722a3dbd9a61a4bb9eda990ca3b3da0c5a377d3c70f245c330c5cc5a74ffdba2cb83
7
+ data.tar.gz: 26dc21a2cddb435bf480a00ec46ea23c2afd94d0c068967266a1120a6dab6050093e0d9969e81c6fe0caaae37c8854327da8a039c1a269b5c9fe047dea3df550
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Redis based block follower is an efficient way for multiple apps to stream the Steem Blockchain.
4
4
 
5
+ [![Build Status](https://travis-ci.org/inertia186/meeseeker.svg?branch=master)](https://travis-ci.org/inertia186/meeseeker)
6
+
5
7
  If you have multiple applications that need to perform actions as operations occur, `meeseeker` will allow your apps to each perform actions for specific operations without each app having to stream the entire blockchain.
6
8
 
7
9
  *In a nutshell:* The overarching intent here is to provide a "live view" of the blockchain, *not* store the entire blockchain. Apps can attach to your redis source and ask, "What *just* happened?"
@@ -32,7 +32,12 @@ module Meeseeker
32
32
  trx_index = 0
33
33
  end
34
34
 
35
- op_type = op.type.split('_')[0..-2].join('_')
35
+ op_type = if op.type.end_with? '_operation'
36
+ op.type.split('_')[0..-2].join('_')
37
+ else
38
+ op.type
39
+ end
40
+
36
41
  key = "#{current_key_prefix}:#{trx_index}:#{op_type}"
37
42
  puts key
38
43
  end
@@ -49,7 +54,11 @@ module Meeseeker
49
54
  if Meeseeker.include_block_header
50
55
  catch :block_header do
51
56
  block_api.get_block_header(block_num: block_num) do |result|
52
- throw :block_header if result.nil || result.header.nil?
57
+ if result.nil? || result.header.nil?
58
+ puts "Node returned empty result for block_header on block_num: #{block_num} (rate limiting?). Retrying ..."
59
+ sleep 3
60
+ throw :block_header
61
+ end
53
62
 
54
63
  block_payload.merge!(result.header.to_h)
55
64
  end
@@ -132,6 +141,8 @@ module Meeseeker
132
141
  loop do
133
142
  begin
134
143
  stream.blocks(options) do |b, n|
144
+ redo if b.nil?
145
+
135
146
  b.transactions.each_with_index do |transaction, index|
136
147
  transaction.operations.each do |op|
137
148
  op = op.merge(timestamp: b.timestamp)
@@ -153,9 +164,13 @@ module Meeseeker
153
164
  # See: https://developers.steem.io/tutorials-recipes/virtual-operations-when-streaming-blockchain-transactions
154
165
 
155
166
  loop do
167
+ # TODO (HF23) Switch to account_history_api.enum_virtual_ops if supported.
156
168
  condenser_api ||= Steem::CondenserApi.new(url: Meeseeker.node_url)
157
169
  condenser_api.get_ops_in_block(n, true) do |vops|
158
- redo if vops.nil?
170
+ if vops.nil?
171
+ puts "Node returned empty result for get_ops_in_block on block_num: #{n} (rate limiting?). Retrying ..."
172
+ vops = []
173
+ end
159
174
 
160
175
  if vops.empty? && mode != :head
161
176
  # Usually, we just need to slow down to allow virtual ops to
@@ -1,4 +1,4 @@
1
1
  module Meeseeker
2
- VERSION = '0.0.9'
2
+ VERSION = '1.0.0'
3
3
  AGENT_ID = "meeseeker/#{VERSION}"
4
4
  end
data/meeseeker.gemspec CHANGED
@@ -27,8 +27,10 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency 'simplecov', '~> 0.15', '>= 0.15.1'
28
28
  s.add_development_dependency 'pry', '~> 0.11', '>= 0.11.3'
29
29
  s.add_development_dependency 'irb', '~> 1.0', '>= 1.0.0'
30
+ s.add_development_dependency 'mock_redis', '~> 0.22', '>= 0.22.0'
30
31
 
31
32
  s.add_dependency 'redis', '~> 4.1', '>= 4.1.0'
32
- s.add_dependency 'steem-mechanize', '~> 0.0', '>= 0.0.5'
33
+ s.add_dependency 'steem-ruby', '~> 0.9', '>= 0.9.4'
34
+ s.add_dependency 'mechanize', '~> 2.7', '>= 2.7.6'
33
35
  s.add_dependency 'rb-readline', '~> 0.5', '>= 0.5.5'
34
36
  end
@@ -13,17 +13,27 @@ module Meeseeker
13
13
  Rake.application.load_rakefile
14
14
  Dir.chdir(pwd)
15
15
 
16
- if !!Meeseeker.redis.get(Meeseeker::LAST_BLOCK_NUM_KEY)
17
- fail "Found existing keys. Please use 'rake reset' to enable this test."
16
+ begin
17
+ if !!Meeseeker.redis.get(Meeseeker::LAST_BLOCK_NUM_KEY)
18
+ fail "Found existing keys. Please use 'rake reset' to enable this test."
19
+ end
20
+ rescue Redis::CannotConnectError => e
21
+ puts "Cannot connect to redis, using MockRedis instead."
22
+
23
+ Meeseeker.redis = MockRedis.new
18
24
  end
19
25
  end
20
26
 
21
27
  def test_verify_all_jobs
22
28
  max_blocks = 30 # must be at least 15 to get past irreversible
23
-
24
- assert Rake::Task['verify:block_org'].invoke(max_blocks)
25
- assert Rake::Task['verify:steem_engine_block_org'].invoke(max_blocks)
26
- assert Rake::Task['verify:witness:schedule'].invoke(max_blocks)
29
+
30
+ begin
31
+ assert Rake::Task['verify:block_org'].invoke(max_blocks)
32
+ assert Rake::Task['verify:steem_engine_block_org'].invoke(max_blocks)
33
+ assert Rake::Task['verify:witness:schedule'].invoke(max_blocks)
34
+ rescue Redis::TimeoutError => e
35
+ skip "Timed out."
36
+ end
27
37
 
28
38
  Rake::Task['reset'].invoke
29
39
  end
data/test/test_helper.rb CHANGED
@@ -6,6 +6,7 @@ SimpleCov.start
6
6
  SimpleCov.merge_timeout 3600
7
7
 
8
8
  require 'meeseeker'
9
+ require 'mock_redis'
9
10
  require 'minitest/autorun'
10
11
  require 'minitest/line/describe_track'
11
12
  require 'minitest/hell'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meeseeker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 1.0.0
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-10-08 00:00:00.000000000 Z
11
+ date: 2020-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -74,22 +74,22 @@ dependencies:
74
74
  name: minitest-proveit
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
- - - "~>"
78
- - !ruby/object:Gem::Version
79
- version: '1.0'
80
77
  - - ">="
81
78
  - !ruby/object:Gem::Version
82
79
  version: 1.0.0
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.0'
90
87
  - - ">="
91
88
  - !ruby/object:Gem::Version
92
89
  version: 1.0.0
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '1.0'
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: simplecov
95
95
  requirement: !ruby/object:Gem::Requirement
@@ -134,62 +134,102 @@ dependencies:
134
134
  name: irb
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - "~>"
138
- - !ruby/object:Gem::Version
139
- version: '1.0'
140
137
  - - ">="
141
138
  - !ruby/object:Gem::Version
142
139
  version: 1.0.0
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '1.0'
143
143
  type: :development
144
144
  prerelease: false
145
145
  version_requirements: !ruby/object:Gem::Requirement
146
146
  requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: 1.0.0
147
150
  - - "~>"
148
151
  - !ruby/object:Gem::Version
149
152
  version: '1.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: mock_redis
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
150
157
  - - ">="
151
158
  - !ruby/object:Gem::Version
152
- version: 1.0.0
159
+ version: 0.22.0
160
+ - - "~>"
161
+ - !ruby/object:Gem::Version
162
+ version: '0.22'
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 0.22.0
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.22'
153
173
  - !ruby/object:Gem::Dependency
154
174
  name: redis
155
175
  requirement: !ruby/object:Gem::Requirement
156
176
  requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: 4.1.0
157
180
  - - "~>"
158
181
  - !ruby/object:Gem::Version
159
182
  version: '4.1'
183
+ type: :runtime
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
160
187
  - - ">="
161
188
  - !ruby/object:Gem::Version
162
189
  version: 4.1.0
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '4.1'
193
+ - !ruby/object:Gem::Dependency
194
+ name: steem-ruby
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '0.9'
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: 0.9.4
163
203
  type: :runtime
164
204
  prerelease: false
165
205
  version_requirements: !ruby/object:Gem::Requirement
166
206
  requirements:
167
207
  - - "~>"
168
208
  - !ruby/object:Gem::Version
169
- version: '4.1'
209
+ version: '0.9'
170
210
  - - ">="
171
211
  - !ruby/object:Gem::Version
172
- version: 4.1.0
212
+ version: 0.9.4
173
213
  - !ruby/object:Gem::Dependency
174
- name: steem-mechanize
214
+ name: mechanize
175
215
  requirement: !ruby/object:Gem::Requirement
176
216
  requirements:
177
217
  - - "~>"
178
218
  - !ruby/object:Gem::Version
179
- version: '0.0'
219
+ version: '2.7'
180
220
  - - ">="
181
221
  - !ruby/object:Gem::Version
182
- version: 0.0.5
222
+ version: 2.7.6
183
223
  type: :runtime
184
224
  prerelease: false
185
225
  version_requirements: !ruby/object:Gem::Requirement
186
226
  requirements:
187
227
  - - "~>"
188
228
  - !ruby/object:Gem::Version
189
- version: '0.0'
229
+ version: '2.7'
190
230
  - - ">="
191
231
  - !ruby/object:Gem::Version
192
- version: 0.0.5
232
+ version: 2.7.6
193
233
  - !ruby/object:Gem::Dependency
194
234
  name: rb-readline
195
235
  requirement: !ruby/object:Gem::Requirement
@@ -255,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
255
295
  version: '0'
256
296
  requirements: []
257
297
  rubyforge_project:
258
- rubygems_version: 2.7.7
298
+ rubygems_version: 2.7.10
259
299
  signing_key:
260
300
  specification_version: 4
261
301
  summary: Redis based block follower is an efficient way for multiple apps to stream