class PickynodeBCHD
Allows you to easily add/remove/connect/disconnect nodes based on User Agent.
Constants
- VERSION
Public Class Methods
new(opts = {})
click to toggle source
# File lib/pickynode_bchd.rb, line 14 def initialize(opts = {}) @opts = opts end
Public Instance Methods
add(filter, limit = nil)
click to toggle source
# File lib/pickynode_bchd.rb, line 18 def add(filter, limit = nil) return unless filter validate_limit(limit) blockchair_addr_types .select { |_, v| v.include?(filter) } .each_with_index do |(k, _), i| break if limit == i run_cmd(%(bchctl addnode "#{k}" add)) end end
clear_cache()
click to toggle source
# File lib/pickynode_bchd.rb, line 92 def clear_cache @addr_types = nil @blockchair_addr_types = nil end
connect(filter, limit = nil)
click to toggle source
# File lib/pickynode_bchd.rb, line 46 def connect(filter, limit = nil) return unless filter validate_limit(limit) blockchair_addr_types .select { |_, v| v.include?(filter) } .each_with_index do |(k, _), i| break if limit == i run_cmd(%(bchctl node connect "#{k}")) end end
disconnect(filter, limit = nil)
click to toggle source
# File lib/pickynode_bchd.rb, line 60 def disconnect(filter, limit = nil) return unless filter validate_limit(limit) addr_types .select { |_, v| v.include?(filter) } .each_with_index do |(k, _), i| break if limit == i run_cmd(%(bchctl node disconnect "#{k}")) end end
display()
click to toggle source
# File lib/pickynode_bchd.rb, line 74 def display ap addr_types end
info()
click to toggle source
# File lib/pickynode_bchd.rb, line 78 def info ap getinfo end
remove(filter, limit = nil)
click to toggle source
# File lib/pickynode_bchd.rb, line 32 def remove(filter, limit = nil) return unless filter validate_limit(limit) addr_types .select { |_, v| v.include?(filter) } .each_with_index do |(k, _), i| break if limit == i run_cmd(%(bchctl node remove "#{k}")) end end
run()
click to toggle source
# File lib/pickynode_bchd.rb, line 82 def run add(@opts[:add], @opts[:limit]) connect(@opts[:connect], @opts[:limit]) remove(@opts[:remove], @opts[:limit]) disconnect(@opts[:disconnect], @opts[:limit]) display_info end
Private Instance Methods
addr_types()
click to toggle source
# File lib/pickynode_bchd.rb, line 109 def addr_types return @addr_types if @addr_types nodes = getpeerinfo parsed_nodes = JSON.parse(nodes) @addr_types = parsed_nodes.map do |n| [n['addr'], n['subver']] end.to_h rescue JSON::ParserError {} end
blockchair_addr_types()
click to toggle source
# File lib/pickynode_bchd.rb, line 121 def blockchair_addr_types return @blockchair_addr_types if @blockchair_addr_types parsed_nodelist = JSON.parse(blockchair_snapshot) @blockchair_addr_types = parsed_nodelist['data']['nodes'].transform_values do |v| v['version'] end rescue JSON::ParserError {} end
blockchair_snapshot()
click to toggle source
# File lib/pickynode_bchd.rb, line 132 def blockchair_snapshot Net::HTTP.get(URI.parse('https://api.blockchair.com/bitcoin-cash/nodes')) end
display_info()
click to toggle source
# File lib/pickynode_bchd.rb, line 99 def display_info info if @opts[:info] display if @opts.values.select { |v| v }.empty? end
getinfo()
click to toggle source
# File lib/pickynode_bchd.rb, line 136 def getinfo JSON.parse(`bchctl getinfo`) rescue JSON::ParserError {} end
getpeerinfo()
click to toggle source
# File lib/pickynode_bchd.rb, line 142 def getpeerinfo `bchctl getpeerinfo` end
run_cmd(cmd)
click to toggle source
# File lib/pickynode_bchd.rb, line 104 def run_cmd(cmd) puts "Running #{cmd}" if @opts[:output] || @opts[:debug] `#{cmd}` unless @opts[:debug] end
validate_limit(limit)
click to toggle source
# File lib/pickynode_bchd.rb, line 146 def validate_limit(limit) return unless limit raise 'Limit must be greater than 0' unless limit > 0 end