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.

track number of errors and reconnects

+20 -7
+6
db/migrate/20260323175315_add_errors.rb
··· 1 + class AddErrors < ActiveRecord::Migration[7.2] 2 + def change 3 + add_column :reports, :error_count, :integer, null: false, default: 0 4 + add_column :reports, :reconnect_count, :integer, null: false, default: 0 5 + end 6 + end
+3 -1
db/schema.rb
··· 10 10 # 11 11 # It's strongly recommended that you check this file into your version control system. 12 12 13 - ActiveRecord::Schema[7.2].define(version: 2026_03_06_015640) do 13 + ActiveRecord::Schema[7.2].define(version: 2026_03_23_175315) do 14 14 create_table "reports", force: :cascade do |t| 15 15 t.datetime "start_time", precision: 0, null: false 16 16 t.string "host", null: false ··· 19 19 t.integer "events", null: false 20 20 t.string "source_type", null: false 21 21 t.boolean "connected", null: false 22 + t.integer "error_count", default: 0, null: false 23 + t.integer "reconnect_count", default: 0, null: false 22 24 t.index ["start_time"], name: "index_reports_on_start_time" 23 25 end 24 26 end
+11 -6
run_test.rb
··· 50 50 users = Set.new 51 51 minute = Time.now.to_i / 60 52 52 connected = false 53 + reconnects = 0 54 + errors = 0 55 + 56 + sky.on_connecting { puts "[#{Time.now}] #{host}: Connecting..." } 57 + sky.on_connect { puts "[#{Time.now}] #{host}: Connected ✓"; connected = true } 58 + sky.on_reconnect { puts "[#{Time.now}] #{host}: Connection lost, reconnecting..."; reconnects += 1 } 59 + sky.on_error { |e| puts "[#{Time.now}] #{host}: ERROR: #{e.message}"; errors += 1 } 53 60 54 61 sky.on_message do |msg| 55 62 events += 1 ··· 64 71 end 65 72 end 66 73 67 - sky.on_connecting { puts "[#{Time.now}] #{host}: Connecting..." } 68 - sky.on_connect { puts "[#{Time.now}] #{host}: Connected ✓"; connected = true } 69 - sky.on_error { |e| puts "[#{Time.now}] #{host}: ERROR: #{e.message}" } 70 - 71 74 trap('SIGINT') { sky.disconnect } 72 75 73 76 sky.connect 74 77 puts "[#{Time.now}] #{host}: Finished." 75 78 76 - output.puts(JSON.generate({ events: events, users: users.size, connected: connected })) 79 + output.puts(JSON.generate({ events: events, users: users.size, connected: connected, errors: errors, reconnects: reconnects })) 77 80 end 78 81 79 82 output.close ··· 105 108 source_type: worker.type, 106 109 users: result['users'], 107 110 events: result['events'], 108 - connected: result['connected'] 111 + connected: result['connected'], 112 + error_count: result['errors'], 113 + reconnect_count: result['reconnects'] 109 114 ) 110 115 end 111 116 end