zold 0.13.14 → 0.13.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/zold/commands/node.rb +4 -2
- data/lib/zold/commands/routines/spread.rb +48 -0
- data/lib/zold/node/entrance.rb +7 -4
- data/lib/zold/version.rb +1 -1
- data/test/commands/routines/test_spread.rb +45 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee79ed1a6d5050ca1df7ced93d9bf5f2b488c160
|
4
|
+
data.tar.gz: 1a01a16eaa9006a2c82a7142d918d3acddf24e7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6aac2cf9156a6c3439a610419256a4f5a2c4f19dc0a594b29b29b10a816a5eacaf5ea1406b8f5631af384dc0fbeb5395bb9533242c6d033630787a8f2a5c07b8
|
7
|
+
data.tar.gz: 72c085b6d56e2f19340906c3d106079f406c33709b5bdb47ea40b3e1151f1e0fb91ca92ada87869e482f32eb221f675090cbe56a503f3fc101218c52919d2536
|
data/lib/zold/commands/node.rb
CHANGED
@@ -158,7 +158,7 @@ module Zold
|
|
158
158
|
threads: opts[:threads], strength: opts[:strength]
|
159
159
|
)
|
160
160
|
Front.set(:farm, farm)
|
161
|
-
metronome = metronome(farm, opts)
|
161
|
+
metronome = metronome(farm, entrance, opts)
|
162
162
|
begin
|
163
163
|
@log.info("Starting up the web front at http://#{opts[:host]}:#{opts[:port]}...")
|
164
164
|
Front.run!
|
@@ -217,8 +217,10 @@ module Zold
|
|
217
217
|
pid
|
218
218
|
end
|
219
219
|
|
220
|
-
def metronome(farm, opts)
|
220
|
+
def metronome(farm, entrance, opts)
|
221
221
|
metronome = Metronome.new(@log)
|
222
|
+
require_relative 'routines/spread'
|
223
|
+
metronome.add(Routines::Spread.new(opts, @wallets, entrance, log: @log))
|
222
224
|
unless opts[:standalone]
|
223
225
|
require_relative 'routines/reconnect'
|
224
226
|
metronome.add(Routines::Reconnect.new(opts, @remotes, farm, log: @log))
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Copyright (c) 2018 Yegor Bugayenko
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
# SOFTWARE.
|
20
|
+
|
21
|
+
require_relative '../remote'
|
22
|
+
require_relative '../pull'
|
23
|
+
require_relative '../pay'
|
24
|
+
require_relative '../push'
|
25
|
+
|
26
|
+
# Spread random wallets to the network.
|
27
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
28
|
+
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
29
|
+
# License:: MIT
|
30
|
+
module Zold
|
31
|
+
# Routines module
|
32
|
+
module Routines
|
33
|
+
# Spread them
|
34
|
+
class Spread
|
35
|
+
def initialize(opts, wallets, entrance, log: Log::Quiet.new)
|
36
|
+
@opts = opts
|
37
|
+
@wallets = wallets
|
38
|
+
@entrance = entrance
|
39
|
+
@log = log
|
40
|
+
end
|
41
|
+
|
42
|
+
def exec(_ = 0)
|
43
|
+
sleep(60) unless @opts['routine-immediately']
|
44
|
+
@entrance.spread(@wallets.all.sample(10).map { |w| Id.new(w) })
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/zold/node/entrance.rb
CHANGED
@@ -97,6 +97,12 @@ module Zold
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
+
def spread(ids)
|
101
|
+
return if ids.empty?
|
102
|
+
@push_mutex.synchronize { @modified += ids }
|
103
|
+
@pushes.post { push_one } if @pushes.length < 2
|
104
|
+
end
|
105
|
+
|
100
106
|
private
|
101
107
|
|
102
108
|
# Returns a list of modifed wallets (as Zold::Id)
|
@@ -128,10 +134,7 @@ and modified nothing (this is most likely a bug!)")
|
|
128
134
|
).run(['merge', id.to_s])
|
129
135
|
Clean.new(wallets: @wallets, copies: copies.root, log: @log).run(['clean', id.to_s])
|
130
136
|
copies.remove(localhost, Remotes::PORT)
|
131
|
-
|
132
|
-
@push_mutex.synchronize { @modified += modified }
|
133
|
-
@pushes.post { push_one } if @pushes.length < 2
|
134
|
-
end
|
137
|
+
spread(modified)
|
135
138
|
modified
|
136
139
|
end
|
137
140
|
|
data/lib/zold/version.rb
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Copyright (c) 2018 Yegor Bugayenko
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
# SOFTWARE.
|
20
|
+
|
21
|
+
require 'minitest/autorun'
|
22
|
+
require 'webmock/minitest'
|
23
|
+
require_relative '../../test__helper'
|
24
|
+
require_relative '../../fake_home'
|
25
|
+
require_relative '../../node/fake_node'
|
26
|
+
require_relative '../../../lib/zold/commands/routines/spread.rb'
|
27
|
+
|
28
|
+
# Spread test.
|
29
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
30
|
+
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
31
|
+
# License:: MIT
|
32
|
+
class TestSpread < Minitest::Test
|
33
|
+
def test_spread_wallets
|
34
|
+
FakeHome.new.run do |home|
|
35
|
+
5.times { home.create_wallet }
|
36
|
+
opts = {
|
37
|
+
'routine-immediately' => true
|
38
|
+
}
|
39
|
+
entrance = Zold::Entrance.new(
|
40
|
+
home.wallets, home.remotes, home.copies(home.create_wallet).root, 'x', log: test_log
|
41
|
+
)
|
42
|
+
Zold::Routines::Spread.new(opts, home.wallets, entrance, log: test_log).exec
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zold
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
@@ -354,6 +354,7 @@ files:
|
|
354
354
|
- lib/zold/commands/remote.rb
|
355
355
|
- lib/zold/commands/routines/bonuses.rb
|
356
356
|
- lib/zold/commands/routines/reconnect.rb
|
357
|
+
- lib/zold/commands/routines/spread.rb
|
357
358
|
- lib/zold/commands/show.rb
|
358
359
|
- lib/zold/commands/taxes.rb
|
359
360
|
- lib/zold/copies.rb
|
@@ -381,6 +382,7 @@ files:
|
|
381
382
|
- resources/remotes
|
382
383
|
- test/commands/routines/test_bonuses.rb
|
383
384
|
- test/commands/routines/test_reconnect.rb
|
385
|
+
- test/commands/routines/test_spread.rb
|
384
386
|
- test/commands/test_calculate.rb
|
385
387
|
- test/commands/test_clean.rb
|
386
388
|
- test/commands/test_create.rb
|
@@ -455,6 +457,7 @@ test_files:
|
|
455
457
|
- features/support/env.rb
|
456
458
|
- test/commands/routines/test_bonuses.rb
|
457
459
|
- test/commands/routines/test_reconnect.rb
|
460
|
+
- test/commands/routines/test_spread.rb
|
458
461
|
- test/commands/test_calculate.rb
|
459
462
|
- test/commands/test_clean.rb
|
460
463
|
- test/commands/test_create.rb
|