require 'skyfall' relays = [ 'atproto.africa', 'bsky.network', 'relay1.us-east.bsky.network', 'relay1.us-west.bsky.network', 'relay.feeds.blue', 'relay.fire.hose.cam', 'relay3.fr.hose.cam', 'relay.upcloud.world', 'relay.hayescmd.net', 'relay.xero.systems', 'northamerica.firehose.network', 'europe.firehose.network', 'asia.firehose.network', ] maxlen = relays.map(&:length).max relays.each do |host| pid = fork do sky = Skyfall::Firehose.new(host, :subscribe_repos) events = 0 users = Set.new minute = Time.now.to_i / 60 sky.on_message do |msg| events += 1 users << msg.did now = Time.now.to_i / 60 if now > minute puts "[#{Time.now}] #{host.ljust(maxlen)} | events: #{events.to_s.ljust(8)} | users: #{users.size}" minute = now end end sky.on_connecting { puts "[#{Time.now}] #{host}: Connecting..."} sky.on_connect { puts "[#{Time.now}] #{host}: Connected ✓"} trap("SIGINT") { sky.disconnect } sky.connect puts "[#{Time.now}] #{host}: Finished." end end begin sleep 1000000 rescue Interrupt puts puts "Stopping..." end