zold 0.14.43 → 0.14.44

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: 2d3d3cbafabdb79387b1ea775c412ed345fce48b8ec09f105b9470b98c463c98
4
- data.tar.gz: 38a2639c5918fe32722b7f4b75257645452ccb267ff4f418421bdb913bf68801
3
+ metadata.gz: 15f35aaff14857e15ecdb5e4c702711250f214f92eb1328e02a574ec9b8bd553
4
+ data.tar.gz: d7e082ffa042e988a17c57e41ff491070c0660a488fe5996daf8aca1d7b1aec0
5
5
  SHA512:
6
- metadata.gz: c6307a75f3d546103a4f07bc5ee0a98518e7ba4246982a2495ecea94b208a7fd05795c7b79ac9ea72a52650da81f1c1a795eff094c68345106f5f73e121a446e
7
- data.tar.gz: ac69c5944e3d9dbaa1947108feb9fe0a67a310bf391ae7ae16daecb4b11162150d30f5919c2ffd16faa07d01cda57d05339036ee9bfbe38ada753ed46487209b
6
+ metadata.gz: 989f7648468a8288a5429b059c4b7015c332c00f056230030ecc8b41ed1691053660bbf1714e16cd4def078e6102fb6775d5dd28c44a15e7ae3d71c7ec5f2986
7
+ data.tar.gz: 59e60d9116b5695ec7b8bc41b43f8cd1fc6621aba6dd53af2a82f139974d788bfc2e6bf22d39653c477c41ad65bef26fdcd27eea19d7959929ea4fd00b12e515
@@ -37,7 +37,9 @@ module Zold
37
37
  def to_s
38
38
  return '?' if @time.nil?
39
39
  sec = Time.now - @time
40
- if sec < 60
40
+ if sec < 1
41
+ "#{(sec * 1000).round}ms"
42
+ elsif sec < 60
41
43
  "#{sec.round(2)}s"
42
44
  elsif sec < 60 * 60
43
45
  "#{(sec / 60).round}m"
@@ -88,7 +88,7 @@ Available options:"
88
88
  end
89
89
  raise "There are no remote nodes, run 'zold remote reset'" if nodes.value.zero?
90
90
  raise "No nodes out of #{nodes.value} have the wallet #{id}" if done.value.zero? && !opts['quiet-if-absent']
91
- @log.info("#{done.value} copies of #{id} fetched in #{(Time.now - start).round}s with the total score of \
91
+ @log.info("#{done.value} copies of #{id} fetched in #{Age.new(start)} with the total score of \
92
92
  #{total.value} from #{nodes.value} nodes")
93
93
  @log.debug("#{cps.all.count} local copies:")
94
94
  cps.all.each do |c|
@@ -130,7 +130,7 @@ Available options:"
130
130
  copy = cps.add(File.read(f), score.host, score.port, score.value)
131
131
  @log.info("#{r} returned #{body.length}b/#{wallet.balance}/#{wallet.txns.count}t/\
132
132
  #{digest(json)}/#{Age.new(json['mtime'])}/#{json['copies']}c \
133
- as copy #{copy} of #{id} in #{(Time.now - start).round(2)}s: #{Rainbow(score.value).green} (#{json['version']})")
133
+ as copy #{copy} of #{id} in #{Age.new(start)}: #{Rainbow(score.value).green} (#{json['version']})")
134
134
  end
135
135
  score.value
136
136
  end
@@ -24,6 +24,7 @@ require 'slop'
24
24
  require 'rainbow'
25
25
  require_relative 'args'
26
26
  require_relative '../backtrace'
27
+ require_relative '../age'
27
28
  require_relative '../log'
28
29
  require_relative '../id'
29
30
  require_relative '../wallet'
@@ -72,20 +73,22 @@ Available options:"
72
73
  score = 0
73
74
  cps.each_with_index do |c, idx|
74
75
  wallet = Wallet.new(c[:path])
75
- merge_one(opts, patch, wallet, "#{c[:name]}/#{idx}/#{c[:score]}")
76
+ name = "#{c[:name]}/#{idx}/#{c[:score]}"
77
+ merge_one(opts, patch, wallet, name)
76
78
  score += c[:score]
77
79
  end
78
80
  @wallets.find(id) do |wallet|
81
+ start = Time.now
79
82
  if wallet.exists?
80
83
  merge_one(opts, patch, wallet, 'localhost')
81
- @log.debug("Local copy of #{id} merged: #{patch}")
84
+ @log.debug("Local copy of #{id} merged in #{Age.new(start)}: #{patch}")
82
85
  else
83
86
  @log.debug("Local copy of #{id} is absent, nothing to merge")
84
87
  end
85
88
  modified = patch.save(wallet.path, overwrite: true)
86
89
  if modified
87
90
  @log.info("#{cps.count} copies with the total score of #{score} successfully merged \
88
- into #{wallet.id}/#{wallet.balance}/#{wallet.txns.count}t")
91
+ into #{wallet.id}/#{wallet.balance}/#{wallet.txns.count}t in #{Age.new(start)}")
89
92
  else
90
93
  @log.info("Nothing changed in #{wallet.id} after merge of #{cps.count} copies")
91
94
  end
@@ -94,9 +97,10 @@ into #{wallet.id}/#{wallet.balance}/#{wallet.txns.count}t")
94
97
  end
95
98
 
96
99
  def merge_one(opts, patch, wallet, name)
100
+ start = Time.now
97
101
  @log.debug("Building a patch for #{wallet.id} from remote copy #{name}...")
98
102
  patch.join(wallet, !opts['no-baseline'])
99
- @log.debug("Copy #{name} of #{wallet.id} merged: #{patch}")
103
+ @log.debug("Copy #{name} of #{wallet.id} merged in #{Age.new(start)}: #{patch}")
100
104
  rescue StandardError => e
101
105
  @log.error("Can't merge copy #{name}: #{e.message}")
102
106
  @log.debug(Backtrace.new(e).to_s)
@@ -23,6 +23,7 @@
23
23
  require 'open3'
24
24
  require 'slop'
25
25
  require_relative '../version'
26
+ require_relative '../age'
26
27
  require_relative '../score'
27
28
  require_relative '../backtrace'
28
29
  require_relative '../metronome'
@@ -264,8 +265,7 @@ module Zold
264
265
  end
265
266
  nohup_log.print("Nothing else left to read from ##{thr.pid}\n")
266
267
  code = thr.value.to_i
267
- nohup_log.print("Exit code of process ##{thr.pid} is #{code}, was alive for \
268
- #{((Time.now - start) / 60).round} min: #{cmd}\n")
268
+ nohup_log.print("Exit code of process ##{thr.pid} is #{code}, was alive for #{Age.new(start)}: #{cmd}\n")
269
269
  code
270
270
  end
271
271
  end
@@ -24,6 +24,7 @@ require 'slop'
24
24
  require 'rainbow'
25
25
  require_relative 'args'
26
26
  require_relative '../log'
27
+ require_relative '../age'
27
28
  require_relative '../wallet'
28
29
  require_relative '../wallets'
29
30
  require_relative '../prefixes'
@@ -60,6 +61,7 @@ Available options:"
60
61
 
61
62
  # Returns list of Wallet IDs which were affected
62
63
  def propagate(id, _)
64
+ start = Time.now
63
65
  modified = []
64
66
  @wallets.find(id) do |wallet|
65
67
  wallet.txns.select { |t| t.amount.negative? }.each do |t|
@@ -85,7 +87,7 @@ Available options:"
85
87
  end
86
88
  end
87
89
  modified.uniq!
88
- @log.debug("Wallet #{id} propagated successfully, #{modified.count} wallets affected")
90
+ @log.debug("Wallet #{id} propagated successfully in #{Age.new(start)}, #{modified.count} wallets affected")
89
91
  modified
90
92
  end
91
93
  end
@@ -25,6 +25,7 @@ require 'slop'
25
25
  require 'json'
26
26
  require 'net/http'
27
27
  require_relative 'args'
28
+ require_relative '../age'
28
29
  require_relative '../log'
29
30
  require_relative '../id'
30
31
  require_relative '../http'
@@ -77,7 +78,7 @@ Available options:"
77
78
  end
78
79
  raise "There are no remote nodes, run 'zold remote reset'" if nodes.zero?
79
80
  raise "No nodes out of #{nodes} accepted the wallet #{id}" if done.zero?
80
- @log.info("Push finished to #{done} nodes out of #{nodes} in #{(Time.now - start).round}s, \
81
+ @log.info("Push finished to #{done} nodes out of #{nodes} in #{Age.new(start)}, \
81
82
  total score for #{id} is #{total}")
82
83
  end
83
84
 
@@ -96,7 +97,7 @@ total score for #{id} is #{total}")
96
97
  @wallets.find(id) do |wallet|
97
98
  if response.code == '304'
98
99
  @log.info("#{r}: same version #{content.length}b/#{wallet.txns.count}t \
99
- of #{wallet.id} there, in #{(Time.now - start).round(2)}s")
100
+ of #{wallet.id} there, in #{Age.new(start)}")
100
101
  return 0
101
102
  end
102
103
  r.assert_code(200, response)
@@ -106,7 +107,7 @@ of #{wallet.id} there, in #{(Time.now - start).round(2)}s")
106
107
  r.assert_score_ownership(score)
107
108
  r.assert_score_strength(score) unless opts['ignore-score-weakness']
108
109
  @log.info("#{r} accepted #{content.length}b/#{wallet.digest[0, 6]}/#{wallet.txns.count}t of #{wallet.id} \
109
- in #{(Time.now - start).round(2)}s: #{Rainbow(score.value).green} (#{json['version']})")
110
+ in #{Age.new(start)}: #{Rainbow(score.value).green} (#{json['version']})")
110
111
  score.value
111
112
  end
112
113
  end
@@ -29,6 +29,7 @@ require 'time'
29
29
  require_relative 'args'
30
30
  require_relative '../node/farm'
31
31
  require_relative '../log'
32
+ require_relative '../age'
32
33
  require_relative '../json_page'
33
34
  require_relative '../http'
34
35
  require_relative '../remotes'
@@ -244,8 +245,7 @@ it's recommended to reboot, but I don't do it because of --never-reboot")
244
245
  end
245
246
  end
246
247
  capacity << { host: score.host, port: score.port, count: json['all'].count }
247
- @log.info("#{r}: the score is #{Rainbow(score.value).green} (#{json['version']}) \
248
- in #{(Time.now - start).round(2)}s")
248
+ @log.info("#{r}: the score is #{Rainbow(score.value).green} (#{json['version']}) in #{Age.new(start)}")
249
249
  end
250
250
  max_capacity = capacity.map { |c| c[:count] }.max || 0
251
251
  capacity.each do |c|
@@ -21,6 +21,7 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  require_relative 'log'
24
+ require_relative 'age'
24
25
  require_relative 'verbose_thread'
25
26
  require_relative 'backtrace'
26
27
 
@@ -60,10 +61,10 @@ module Zold
60
61
  start = Time.now
61
62
  begin
62
63
  r.exec(step)
63
- @log.info("Routine #{r.class.name} ##{step} done in #{(Time.now - start).round(2)}s")
64
+ @log.info("Routine #{r.class.name} ##{step} done in #{Age.new(start)}")
64
65
  rescue StandardError => e
65
66
  @failures[r.class.name] = Backtrace.new(e).to_s
66
- @log.error("Routine #{r.class.name} ##{step} failed in #{(Time.now - start).round(2)}s")
67
+ @log.error("Routine #{r.class.name} ##{step} failed in #{Age.new(start)}")
67
68
  @log.error(Backtrace.new(e).to_s)
68
69
  end
69
70
  step += 1
@@ -80,13 +81,13 @@ module Zold
80
81
  @threads.each do |t|
81
82
  tstart = Time.now
82
83
  if t.join(60)
83
- @log.info("Thread #{t.name} finished in #{(Time.now - tstart).round(2)}s")
84
+ @log.info("Thread #{t.name} finished in #{Age.new(tstart)}")
84
85
  else
85
86
  t.exit
86
- @log.info("Thread #{t.name} killed in #{(Time.now - tstart).round(2)}s")
87
+ @log.info("Thread #{t.name} killed in #{Age.new(tstart)}")
87
88
  end
88
89
  end
89
- @log.info("Metronome stopped in #{(Time.now - start).round(2)}s, #{@failures.count} failures")
90
+ @log.info("Metronome stopped in #{Age.new(start)}, #{@failures.count} failures")
90
91
  end
91
92
  end
92
93
  end
@@ -22,6 +22,7 @@
22
22
 
23
23
  require 'concurrent'
24
24
  require_relative '../log'
25
+ require_relative '../age'
25
26
  require_relative '../id'
26
27
  require_relative '../verbose_thread'
27
28
 
@@ -117,7 +118,7 @@ module Zold
117
118
  return if id.empty? || body.empty?
118
119
  start = Time.now
119
120
  @entrance.push(Id.new(id), body)
120
- @log.debug("Pushed #{id}/#{body.length}b to #{@entrance.class.name} in #{(Time.now - start).round}s")
121
+ @log.debug("Pushed #{id}/#{body.length}b to #{@entrance.class.name} in #{Age.new(start)}")
121
122
  end
122
123
 
123
124
  def queue
@@ -24,6 +24,7 @@ require 'time'
24
24
  require 'open3'
25
25
  require_relative '../log'
26
26
  require_relative '../score'
27
+ require_relative '../age'
27
28
  require_relative '../verbose_thread'
28
29
  require_relative '../backtrace'
29
30
  require_relative '../atomic_file'
@@ -118,7 +119,7 @@ module Zold
118
119
  start = Time.now
119
120
  finish(@cleanup)
120
121
  @threads.each { |t| finish(t) }
121
- @log.info("Farm stopped in #{(Time.now - start).round(2)}s")
122
+ @log.info("Farm stopped in #{Age.new(start)}")
122
123
  end
123
124
  end
124
125
 
@@ -129,14 +130,14 @@ module Zold
129
130
  @alive = false
130
131
  @log.info("Attempting to terminate the thread \"#{thread.name}\"...")
131
132
  loop do
132
- delay = (Time.now - start).round(2)
133
+ delay = Time.now - start
133
134
  if thread.join(0.1)
134
- @log.info("Thread \"#{thread.name}\" finished in #{delay}s")
135
+ @log.info("Thread \"#{thread.name}\" finished in #{Age.new(start)}")
135
136
  break
136
137
  end
137
138
  if delay > 10
138
139
  thread.exit
139
- @log.error("Thread \"#{thread.name}\" forcefully terminated after #{delay}s")
140
+ @log.error("Thread \"#{thread.name}\" forcefully terminated after #{Age.new(start)}")
140
141
  end
141
142
  end
142
143
  end
@@ -123,7 +123,11 @@ among #{payer.txns.count} transactions: #{txn.to_text}")
123
123
  before = AtomicFile.new(file).read if File.exist?(file)
124
124
  wallet = Wallet.new(file)
125
125
  wallet.init(@id, @key, overwrite: overwrite, network: @network)
126
- @txns.each { |t| wallet.add(t) }
126
+ File.open(file, 'a') do |f|
127
+ @txns.each do |txn|
128
+ f.print "#{txn}\n"
129
+ end
130
+ end
127
131
  wallet.refurbish
128
132
  after = AtomicFile.new(file).read
129
133
  before != after
@@ -27,6 +27,7 @@ require 'net/http'
27
27
  require 'time'
28
28
  require 'fileutils'
29
29
  require_relative 'backtrace'
30
+ require_relative 'age'
30
31
  require_relative 'score'
31
32
  require_relative 'http'
32
33
  require_relative 'node/farm'
@@ -100,7 +101,7 @@ module Zold
100
101
 
101
102
  def assert_valid_score(score)
102
103
  raise "Invalid score #{score}" unless score.valid?
103
- raise "Expired score #{score}" if score.expired?
104
+ raise "Expired score (#{Age.new(score.time)}) #{score}" if score.expired?
104
105
  end
105
106
 
106
107
  def assert_score_ownership(score)
@@ -197,8 +198,7 @@ module Zold
197
198
  raise 'Took too long to execute' if (Time.now - start).round > timeout
198
199
  rescue StandardError => e
199
200
  error(r[:host], r[:port])
200
- log.info("#{Rainbow("#{r[:host]}:#{r[:port]}").red}: #{e.message} \
201
- in #{(Time.now - start).round}s")
201
+ log.info("#{Rainbow("#{r[:host]}:#{r[:port]}").red}: #{e.message} in #{Age.new(start)}")
202
202
  log.debug(Backtrace.new(e).to_s)
203
203
  remove(r[:host], r[:port]) if errors > Remotes::TOLERANCE
204
204
  end
@@ -25,6 +25,6 @@
25
25
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Zold
28
- VERSION = '0.14.43'
28
+ VERSION = '0.14.44'
29
29
  PROTOCOL = 2
30
30
  end
@@ -54,7 +54,7 @@ module Zold
54
54
  EXTENSION = '.z'
55
55
 
56
56
  def initialize(file)
57
- @file = File.extname(file).empty? ? "#{file}#{EXTENSION}" : file
57
+ @file = File.absolute_path(File.extname(file).empty? ? "#{file}#{EXTENSION}" : file)
58
58
  @txns = Txns::Cached.new(Txns.new(@file))
59
59
  @head = Head::Cached.new(Head.new(@file))
60
60
  end
@@ -28,6 +28,7 @@ require_relative '../test__helper'
28
28
  require_relative 'fake_node'
29
29
  require_relative '../fake_home'
30
30
  require_relative '../../lib/zold/http'
31
+ require_relative '../../lib/zold/age'
31
32
  require_relative '../../lib/zold/json_page'
32
33
  require_relative '../../lib/zold/score'
33
34
 
@@ -209,8 +210,7 @@ class FrontTest < Minitest::Test
209
210
  Zold::Http.new(uri: URI("http://localhost:#{port}/"), score: nil).get
210
211
  end
211
212
  end
212
- sec = (Time.now - start) / total
213
- test_log.info("Average response time is #{sec.round(2)}s")
213
+ test_log.info("Average response time is #{Zold::Age.new(start)}")
214
214
  end
215
215
 
216
216
  def app
@@ -53,7 +53,7 @@ module Minitest
53
53
  end
54
54
  sleep 1
55
55
  sec = Time.now - start
56
- raise "'#{actual}' is not equal to '#{expected}' even after #{sec.round}s of waiting" if sec > max
56
+ raise "'#{actual}' is not equal to '#{expected}' even after #{Age.new(start)} of waiting" if sec > max
57
57
  end
58
58
  end
59
59
 
@@ -25,6 +25,7 @@ require 'tmpdir'
25
25
  require 'webmock/minitest'
26
26
  require_relative 'test__helper'
27
27
  require_relative '../lib/zold/log'
28
+ require_relative '../lib/zold/age'
28
29
  require_relative '../lib/zold/remotes'
29
30
  require_relative '../lib/zold/verbose_thread'
30
31
 
@@ -218,7 +219,7 @@ class TestRemotes < Minitest::Test
218
219
  remotes.iterate(test_log) { remotes.all }
219
220
  remotes.remove('127.0.0.1', 8080 + t)
220
221
  end
221
- test_log.info("Total time: #{Time.now - start}")
222
+ test_log.info("Total time: #{Zold::Age.new(start)}")
222
223
  end
223
224
  end
224
225
 
@@ -23,6 +23,7 @@
23
23
  require 'minitest/autorun'
24
24
  require_relative 'fake_home'
25
25
  require_relative '../lib/zold/key'
26
+ require_relative '../lib/zold/age'
26
27
  require_relative '../lib/zold/id'
27
28
  require_relative '../lib/zold/wallet'
28
29
  require_relative '../lib/zold/txn'
@@ -51,7 +52,7 @@ class TestWallet < Minitest::Test
51
52
  wallet.txns
52
53
  wallet.sub(Zold::Amount.new(zld: 39.99), "NOPREFIX@#{Zold::Id.new}", key)
53
54
  time = Time.now - start
54
- assert(time < 0.5, "Too slow: #{time.round(2)} seconds")
55
+ assert(time < 0.5, "Too slow: #{Zold::Age.new(start)} seconds")
55
56
  end
56
57
  end
57
58
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.43
4
+ version: 0.14.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-10 00:00:00.000000000 Z
11
+ date: 2018-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cachy