meeseeker 0.0.9 → 1.0.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/README.md +2 -0
- data/lib/meeseeker/block_follower_job.rb +18 -3
- data/lib/meeseeker/version.rb +1 -1
- data/meeseeker.gemspec +3 -1
- data/test/meeseeker/meeseeker_test.rb +16 -6
- data/test/test_helper.rb +1 -0
- metadata +60 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0ed288dbda6b6cac7cd3e77e520d443a3c908cd9abd5933d5e867e836f11139
|
4
|
+
data.tar.gz: c0fad654f2f6afc353b02c8404ee7a3ceac2096ed797d32a1078b8ae28cced9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
+
[](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.
|
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
|
-
|
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
|
-
|
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
|
data/lib/meeseeker/version.rb
CHANGED
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-
|
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
|
-
|
17
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
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
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
|
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:
|
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:
|
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: '
|
209
|
+
version: '0.9'
|
170
210
|
- - ">="
|
171
211
|
- !ruby/object:Gem::Version
|
172
|
-
version:
|
212
|
+
version: 0.9.4
|
173
213
|
- !ruby/object:Gem::Dependency
|
174
|
-
name:
|
214
|
+
name: mechanize
|
175
215
|
requirement: !ruby/object:Gem::Requirement
|
176
216
|
requirements:
|
177
217
|
- - "~>"
|
178
218
|
- !ruby/object:Gem::Version
|
179
|
-
version: '
|
219
|
+
version: '2.7'
|
180
220
|
- - ">="
|
181
221
|
- !ruby/object:Gem::Version
|
182
|
-
version:
|
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: '
|
229
|
+
version: '2.7'
|
190
230
|
- - ">="
|
191
231
|
- !ruby/object:Gem::Version
|
192
|
-
version:
|
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.
|
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
|