Class: Zold::Remotes
- Inherits:
-
Object
- Object
- Zold::Remotes
- Defined in:
- lib/zold/remotes.rb
Overview
All remotes
Defined Under Namespace
Constant Summary collapse
- PORT =
The default TCP port all nodes are supposed to use.
4096
Instance Method Summary collapse
- #add(host, port = Remotes::PORT) ⇒ Object
- #all ⇒ Object
- #clean ⇒ Object
- #error(host, port = Remotes::PORT) ⇒ Object
- #exists?(host, port = Remotes::PORT) ⇒ Boolean
-
#initialize(file) ⇒ Remotes
constructor
A new instance of Remotes.
- #iterate(log, farm: Farm::Empty.new) ⇒ Object
- #remove(host, port = Remotes::PORT) ⇒ Object
- #rescore(host, port, score) ⇒ Object
- #reset ⇒ Object
Constructor Details
#initialize(file) ⇒ Remotes
Returns a new instance of Remotes.
75 76 77 |
# File 'lib/zold/remotes.rb', line 75 def initialize(file) @file = file end |
Instance Method Details
#add(host, port = Remotes::PORT) ⇒ Object
107 108 109 110 111 112 113 114 115 116 |
# File 'lib/zold/remotes.rb', line 107 def add(host, port = Remotes::PORT) raise 'Port has to be of type Integer' unless port.is_a?(Integer) raise 'Port can\'t be negative' if port < 0 raise 'Port can\'t be over 65536' if port > 0xffff raise "#{host}:#{port} alread exists" if exists?(host, port) list = load list << { host: host.downcase, port: port, score: 0 } list.uniq! { |r| "#{r[:host]}:#{r[:port]}" } save(list) end |
#all ⇒ Object
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/zold/remotes.rb', line 79 def all list = load max_score = list.map { |r| r[:score] }.max || 0 max_score = 1 if max_score.zero? max_errors = list.map { |r| r[:errors] }.max || 0 max_errors = 1 if max_errors.zero? list.sort_by do |r| (1 - r[:errors] / max_errors) * 5 + (r[:score] / max_score) end.reverse end |
#clean ⇒ Object
90 91 92 |
# File 'lib/zold/remotes.rb', line 90 def clean save([]) end |
#error(host, port = Remotes::PORT) ⇒ Object
141 142 143 144 145 146 147 148 149 |
# File 'lib/zold/remotes.rb', line 141 def error(host, port = Remotes::PORT) raise 'Port has to be of type Integer' unless port.is_a?(Integer) raise "#{host}:#{port} is absent" unless exists?(host, port) list = load list.find do |r| r[:host] == host.downcase && r[:port] == port end[:errors] += 1 save(list) end |
#exists?(host, port = Remotes::PORT) ⇒ Boolean
102 103 104 105 |
# File 'lib/zold/remotes.rb', line 102 def exists?(host, port = Remotes::PORT) raise 'Port has to be of type Integer' unless port.is_a?(Integer) !load.find { |r| r[:host] == host.downcase && r[:port] == port }.nil? end |
#iterate(log, farm: Farm::Empty.new) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/zold/remotes.rb', line 126 def iterate(log, farm: Farm::Empty.new) best = farm.best[0] require_relative 'score' score = best.nil? ? Score::ZERO : best all.each do |r| begin yield Remotes::Remote.new(r[:host], r[:port], score) rescue StandardError => e error(r[:host], r[:port]) log.info("#{Rainbow("#{r[:host]}:#{r[:port]}").red}: #{e.}") log.debug(e.backtrace[0..5].join("\n\t")) end end end |
#remove(host, port = Remotes::PORT) ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/zold/remotes.rb', line 118 def remove(host, port = Remotes::PORT) raise 'Port has to be of type Integer' unless port.is_a?(Integer) raise "#{host}:#{port} is absent" unless exists?(host, port) list = load list.reject! { |r| r[:host] == host.downcase && r[:port] == port } save(list) end |
#rescore(host, port, score) ⇒ Object
151 152 153 154 155 156 157 158 159 |
# File 'lib/zold/remotes.rb', line 151 def rescore(host, port, score) raise 'Port has to be of type Integer' unless port.is_a?(Integer) raise "#{host}:#{port} is absent" unless exists?(host, port) list = load list.find do |r| r[:host] == host.downcase && r[:port] == port end[:score] = score save(list) end |
#reset ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/zold/remotes.rb', line 94 def reset FileUtils.mkdir_p(File.dirname(@file)) FileUtils.copy( File.join(File.dirname(__FILE__), '../../resources/remotes'), @file ) end |