A tool for measuring the coverage of Bluesky/ATProto relays
at master 44 lines 1.1 kB view raw
1#!/usr/bin/env ruby 2 3require 'bundler/setup' 4require 'sinatra' 5require 'yaml' 6 7require 'thin' if $PROGRAM_NAME == __FILE__ 8 9require_relative 'init' 10require_relative 'report' 11 12$config = YAML.load(File.read(SOURCES)) 13$owners = ($config['relays'] + $config['jetstreams']).map { |x| x.is_a?(Hash) ? [x['host'], x] : [x, nil] }.then { Hash[it] } 14 15helpers do 16 def format_num(n) 17 n.to_s.reverse.gsub(/(\d\d\d(?!$))/, "\\1,").reverse 18 end 19 20 def owner_link(report) 21 if data = $owners[report.host] 22 if data['owner'] && data['owner_link'] 23 %(<a href="#{data['owner_link']}" target="_blank">#{data['owner']}</a>) 24 elsif data['owner'].to_s.start_with?('@') 25 %(<a href="https://bsky.app/profile/#{data['owner'].gsub(/^@/, '')}" target="_blank">#{data['owner']}</a>) 26 elsif data['owner'] 27 data['owner'] 28 else 29 nil 30 end 31 end 32 end 33end 34 35get '/' do 36 @last_test = Report.maximum(:start_time) 37 38 if @last_test 39 @reports = Report.where(start_time: @last_test).order('users DESC, connected DESC').to_a 40 @max_users = @reports.first.users 41 end 42 43 erb :index 44end