Skip to content

Instantly share code, notes, and snippets.

@metalefty
Created March 18, 2020 07:57
Show Gist options
  • Save metalefty/b1422a78d9b0ac6a977e521a7b9b958d to your computer and use it in GitHub Desktop.
Save metalefty/b1422a78d9b0ac6a977e521a7b9b958d to your computer and use it in GitHub Desktop.
bitcoin-seeder-route53
#!ruby
require 'pry'
require 'aws-sdk-route53'
file = ARGV[0]
nodes = []
File.open(file) do |f|
f.each_line do |l|
next if l =~ /^#/ # skip header line
e = l.chomp.split(/\s+/, 11)
# separete IP address and port
address = e[0]
addr_port_delimiter = (address =~ /:\d+$/)
addr = address[0, addr_port_delimiter]
port = address[addr_port_delimiter + 1..-1]
nodes << {
addr: addr,
port: port&.to_i,
good: e[1]!= "0",
last_succcess: e[2]&.to_i,
uptime_2h: e[3]&.chomp('%')&.to_f,
uptime_8h: e[4]&.chomp('%')&.to_f,
uptime_1d: e[5]&.chomp('%')&.to_f,
uptime_7d: e[6]&.chomp('%')&.to_f,
uptime_30d: e[7]&.chomp('%')&.to_f,
blocks: e[8]&.to_i,
svcs: e[9],
version: e[10]
}
end
end
# sort by availability
ipv6_addrs = []
ipv4_addrs = []
nodes.select{|e| e[:good] }.sort_by{ |e| e[:uptime_2h]}.reverse.each do |e|
if e[:addr][0] == '['
ipv6_addrs << e[:addr]&.delete('[-]')
else
ipv4_addrs << e[:addr]
end
end
route53 = Aws::Route53::Client.new()
change_batch =
{
change_batch: {
changes: [
{
action: "UPSERT",
resource_record_set:
{
name: "seed.vmeta.jp.",
resource_records: ipv4_addrs.first(25).map{|e| { value: e} },
ttl: 30,
type: "A",
},
},
{
action: "UPSERT",
resource_record_set:
{
name: "seed.vmeta.jp.",
resource_records: ipv6_addrs.first(15).map{|e| { value: e} },
ttl: 30,
type: "AAAA",
},
},
],
},
hosted_zone_id: "Z270XH96UBKUL7"
}
route53.change_resource_record_sets(change_batch)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment