A tool for measuring the coverage of Bluesky/ATProto relays
9
fork

Configure Feed

Select the types of activity you want to include in your feed.

first prototype

Kuba Suder 6d428d58

+59
+59
relay_bench.rb
··· 1 + require 'skyfall' 2 + 3 + relays = [ 4 + 'atproto.africa', 5 + 'bsky.network', 6 + 'relay1.us-east.bsky.network', 7 + 'relay1.us-west.bsky.network', 8 + 'relay.feeds.blue', 9 + 'relay.fire.hose.cam', 10 + 'relay3.fr.hose.cam', 11 + 'relay.upcloud.world', 12 + 'relay.hayescmd.net', 13 + 'relay.xero.systems', 14 + 'northamerica.firehose.network', 15 + 'europe.firehose.network', 16 + 'asia.firehose.network', 17 + ] 18 + 19 + #wss://jetstream2.fr.hose.cam/subscribe 20 + 21 + maxlen = relays.map(&:length).max 22 + 23 + relays.each do |host| 24 + pid = fork do 25 + sky = Skyfall::Firehose.new(host, :subscribe_repos) 26 + 27 + events = 0 28 + users = Set.new 29 + minute = Time.now.to_i / 60 30 + 31 + sky.on_message do |msg| 32 + events += 1 33 + users << msg.did 34 + 35 + now = Time.now.to_i / 60 36 + if now > minute 37 + puts "[#{Time.now}] #{host.ljust(maxlen)} | events: #{events.to_s.ljust(8)} | users: #{users.size}" 38 + minute = now 39 + end 40 + end 41 + 42 + sky.on_connecting { puts "[#{Time.now}] #{host}: Connecting..."} 43 + sky.on_connect { puts "[#{Time.now}] #{host}: Connected ✓"} 44 + 45 + trap("SIGINT") { 46 + sky.disconnect 47 + } 48 + 49 + sky.connect 50 + puts "[#{Time.now}] #{host}: Finished." 51 + end 52 + end 53 + 54 + begin 55 + sleep 1000000 56 + rescue Interrupt 57 + puts 58 + puts "Stopping..." 59 + end