zold 0.6.1 → 0.6.2

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
  SHA1:
3
- metadata.gz: 42d45258927844c4cc2c07418af8b5077787731b
4
- data.tar.gz: 508255ebe906bd0c4dd9fcb88ed12dee32a1973a
3
+ metadata.gz: c34164f9da323f0a19a831a982d4904b2c3eaffd
4
+ data.tar.gz: 77d4935724eab082b127abdc5505be79d02fe6e8
5
5
  SHA512:
6
- metadata.gz: 4783b3ade202e80fb6b252ed58cab12176a0bcb70cc4584e67e3e6fe49f1ec9fcd2fdb1df0020f7a2d13b20e865e99c591a14604e402b8725acc9168a6365b2b
7
- data.tar.gz: c8c189ee8908b4479b3b9e71f73776995ddcfc407cb2bdb6e32b15339c63bbdfc86a6f5a49845ad064bbd92cc1f50c2da557be6ae9d3a2673dbe478f4c80c0cc
6
+ metadata.gz: fa900d58a11e33b2f8855b62a7bd8503a39c68d1cdd3a270ad85defac1529fb120c38b3be8437513120911a0ec6725d8d23749503c92bd0ac8809dd8aa1767ac
7
+ data.tar.gz: 9d73f149efa4a79c9acf55edec7caeb5c12613ec115310a5023ec962fd7786e6975b54c1070965bb21bc7484ff4ad01cb1a1e63ac79bd2a8c2895a4a29331e38
data/Procfile CHANGED
@@ -1 +1 @@
1
- web: LC_ALL=UTF-8 ./bin/zold --no-colors --verbose --trace node --bind-port=$PORT --port=80 --host=b1.zold.io --threads=0 --standalone
1
+ web: LC_ALL=UTF-8 ./bin/zold node --no-colors --verbose --trace --bind-port=$PORT --port=80 --host=b1.zold.io --threads=0 --standalone --invoice=JKFq17yipfjLtX@0000000000000000
@@ -66,7 +66,12 @@ Available options:"
66
66
  def fetch(id, cps, opts)
67
67
  total = 0
68
68
  @remotes.all.each do |r|
69
- total += 1 if fetch_one(id, r, cps, opts)
69
+ done = fetch_one(id, r, cps, opts)
70
+ if done
71
+ total += 1
72
+ else
73
+ @remotes.error(r[:host], r[:port])
74
+ end
70
75
  end
71
76
  @log.debug("#{total} copies fetched, there are #{cps.all.count} available locally")
72
77
  end
@@ -121,35 +121,35 @@ Available options:"
121
121
  uri = URI("#{r[:home]}remotes")
122
122
  res = Http.new(uri).get
123
123
  unless res.code == '200'
124
- @remotes.remove(r[:host], r[:port])
124
+ @remotes.error(r[:host], r[:port])
125
125
  @log.info("#{Rainbow(r[:host]).red} #{res.code} \"#{res.message}\" #{uri}")
126
126
  next
127
127
  end
128
128
  begin
129
129
  json = JSON.parse(res.body)
130
130
  rescue JSON::ParserError => e
131
- remove(r[:host], r[:port])
131
+ error(r[:host], r[:port])
132
132
  @log.info("#{Rainbow(r[:host]).red} \"#{e.message}\": #{res.body}")
133
133
  next
134
134
  end
135
135
  score = Score.parse_json(json['score'])
136
136
  unless score.valid?
137
- remove(r[:host], r[:port])
137
+ error(r[:host], r[:port])
138
138
  @log.info("#{Rainbow(r[:host]).red} invalid score")
139
139
  next
140
140
  end
141
141
  if score.expired?
142
- remove(r[:host], r[:port])
142
+ error(r[:host], r[:port])
143
143
  @log.info("#{Rainbow(r[:host]).red} expired score")
144
144
  next
145
145
  end
146
146
  if score.strength < Score::STRENGTH && !opts['ignore-score-weakness']
147
- remove(r[:host], r[:port])
147
+ error(r[:host], r[:port])
148
148
  @log.info("#{Rainbow(r[:host]).red} score too weak: #{score.strength}")
149
149
  next
150
150
  end
151
151
  if r[:host] != score.host || r[:port] != score.port
152
- @remotes.remove(r[:host], r[:port])
152
+ @remotes.error(r[:host], r[:port])
153
153
  @remotes.add(score.host, score.port)
154
154
  @log.info("#{r[:host]}:#{r[:port]} renamed to #{score.host}:#{score.port}")
155
155
  end
data/lib/zold/remotes.rb CHANGED
@@ -43,7 +43,14 @@ module Zold
43
43
  end
44
44
 
45
45
  def all
46
- load.sort_by { |r| r[:score] }.reverse
46
+ list = load
47
+ max_score = list.map { |r| r[:score] }.max
48
+ max_score = 1 if max_score.zero?
49
+ max_errors = list.map { |r| r[:errors] }.max
50
+ max_errors = 1 if max_errors.zero?
51
+ list.sort_by do |r|
52
+ (1 - r[:errors] / max_errors) * 5 + (r[:score] / max_score)
53
+ end.reverse
47
54
  end
48
55
 
49
56
  def clean
@@ -88,6 +95,22 @@ module Zold
88
95
  load.find { |r| r[:host] == host.downcase && r[:port] == port }[:score]
89
96
  end
90
97
 
98
+ def errors(host, port = Remotes::PORT)
99
+ raise 'Port has to be of type Integer' unless port.is_a?(Integer)
100
+ raise "#{host}:#{port} is absent" unless exists?(host, port)
101
+ load.find { |r| r[:host] == host.downcase && r[:port] == port }[:errors]
102
+ end
103
+
104
+ def error(host, port = Remotes::PORT)
105
+ raise 'Port has to be of type Integer' unless port.is_a?(Integer)
106
+ raise "#{host}:#{port} is absent" unless exists?(host, port)
107
+ list = load
108
+ list.find do |r|
109
+ r[:host] == host.downcase && r[:port] == port
110
+ end[:errors] += 1
111
+ save(list)
112
+ end
113
+
91
114
  def rescore(host, port, score)
92
115
  raise 'Port has to be of type Integer' unless port.is_a?(Integer)
93
116
  raise "#{host}:#{port} is absent" unless exists?(host, port)
@@ -106,6 +129,7 @@ module Zold
106
129
  host: r[0],
107
130
  port: r[1].to_i,
108
131
  score: r[2].to_i,
132
+ errors: r[3].to_i,
109
133
  home: URI("http://#{r[0]}:#{r[1]}/")
110
134
  }
111
135
  end
@@ -114,7 +138,14 @@ module Zold
114
138
  def save(list)
115
139
  File.write(
116
140
  file,
117
- list.map { |r| "#{r[:host]},#{r[:port]},#{r[:score]}" }.join("\n")
141
+ list.map do |r|
142
+ [
143
+ r[:host],
144
+ r[:port],
145
+ r[:score],
146
+ r[:errors]
147
+ ].join(',')
148
+ end.join("\n")
118
149
  )
119
150
  end
120
151
 
data/lib/zold/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  module Zold
26
- VERSION = '0.6.1'.freeze
26
+ VERSION = '0.6.2'.freeze
27
27
  end
data/resources/remotes CHANGED
@@ -1,2 +1,2 @@
1
- b1.zold.io,80,0
2
- b2.zold.io,4096,0
1
+ b1.zold.io,80,0,0
2
+ b2.zold.io,4096,0,0
@@ -62,7 +62,7 @@ class TestRemote < Minitest::Test
62
62
  cmd.run(%w[remote add localhost 2])
63
63
  assert_equal(2, remotes.all.count)
64
64
  cmd.run(['remote', 'update', '--ignore-score-weakness'])
65
- assert_equal(1, remotes.all.count)
65
+ assert_equal(4, remotes.all.count)
66
66
  end
67
67
  end
68
68
  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.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko