Compares number of events / unique repos sent from each listed ATProto relay
relay_bench.rb
1require 'skyfall'
2
3relays = [
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
19maxlen = relays.map(&:length).max
20
21relays.each do |host|
22 pid = fork do
23 sky = Skyfall::Firehose.new(host, :subscribe_repos)
24
25 events = 0
26 users = Set.new
27 minute = Time.now.to_i / 60
28
29 sky.on_message do |msg|
30 events += 1
31 users << msg.did
32
33 now = Time.now.to_i / 60
34 if now > minute
35 puts "[#{Time.now}] #{host.ljust(maxlen)} | events: #{events.to_s.ljust(8)} | users: #{users.size}"
36 minute = now
37 end
38 end
39
40 sky.on_connecting { puts "[#{Time.now}] #{host}: Connecting..."}
41 sky.on_connect { puts "[#{Time.now}] #{host}: Connected ✓"}
42
43 trap("SIGINT") {
44 sky.disconnect
45 }
46
47 sky.connect
48 puts "[#{Time.now}] #{host}: Finished."
49 end
50end
51
52begin
53 sleep 1000000
54rescue Interrupt
55 puts
56 puts "Stopping..."
57end