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 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