class CgminerApiClient::Miner
Attributes
host[RW]
port[RW]
timeout[RW]
Public Class Methods
new(host = nil, port = nil, timeout = nil)
click to toggle source
# File lib/cgminer_api_client/miner.rb, line 11 def initialize(host = nil, port = nil, timeout = nil) @host = host ? host : CgminerApiClient.default_host @port = port ? port : CgminerApiClient.default_port @timeout = timeout ? timeout : CgminerApiClient.default_timeout end
Public Instance Methods
available?(force_reload = false)
click to toggle source
# File lib/cgminer_api_client/miner.rb, line 32 def available?(force_reload = false) @available = nil if force_reload @available ||= begin open_socket(@host, @port, @timeout).close true rescue false end end
method_missing(name, *args)
click to toggle source
# File lib/cgminer_api_client/miner.rb, line 43 def method_missing(name, *args) query(name, *args) end
query(method, *params)
click to toggle source
# File lib/cgminer_api_client/miner.rb, line 17 def query(method, *params) if available? request = {command: method} unless params.length == 0 params = params.map { |p| p.to_s.gsub('\\', '\\\\').gsub(',', '\,') } request[:parameter] = params.join(',') end response = perform_request(request) data = sanitized(response) method.to_s.match('\+') ? data : data[method.to_sym] end end
Private Instance Methods
check_status(data)
click to toggle source
# File lib/cgminer_api_client/miner.rb, line 76 def check_status(data) status = data['STATUS'][0] sc = status['STATUS'] c = status['Code'] msg = status['Msg'] case sc when 'S' when 'I' puts "Info from API [#{c}]: #{msg}" when 'W' puts "Warning from API [#{c}]: #{msg}" else raise "#{c}: #{msg}" end end
perform_request(request)
click to toggle source
# File lib/cgminer_api_client/miner.rb, line 49 def perform_request(request) begin s = open_socket(@host, @port, @timeout) rescue raise "Connection to #{@host}:#{@port} failed" end s.write(request.to_json) response = s.read.strip.chars.map { |c| c.ord >= 32 ? c : "\\u#{'%04x' % c.ord}" }.join s.close response.gsub! '}{', '}, {' response.gsub! '[,{', '[ {' data = JSON.parse(response) if request[:command].to_s.match('\+') data.each_pair do |command, response| check_status(response.first) if response.respond_to?(:first) end else check_status(data) end return data end
sanitized(data)
click to toggle source
# File lib/cgminer_api_client/miner.rb, line 93 def sanitized(data) if data.is_a?(Hash) data.inject({}) { |n, (k, v)| n[k.to_s.downcase.tr(' ', '_').to_sym] = sanitized(v); n } elsif data.is_a?(Array) data.map { |v| sanitized(v) } else data end end