#!/usr/bin/env ruby require 'bundler/setup' require 'sinatra' require 'time' require 'yaml' require 'thin' if $PROGRAM_NAME == __FILE__ require_relative 'init' require_relative 'models' $config = YAML.load(File.read(SOURCES)) $owners = ($config['relays'] + $config['jetstreams']).map { |x| x.is_a?(Hash) ? [x['host'], x] : [x, nil] }.then { Hash[it] } helpers do def format_num(n) n.to_s.reverse.gsub(/(\d\d\d(?!$))/, "\\1,").reverse end def owner_link(report) if data = $owners[report.host] if data['owner'] && data['owner_link'] %(#{data['owner']}) elsif data['owner'].to_s.start_with?('@') %(#{data['owner']}) elsif data['owner'] data['owner'] else nil end end end end get '/' do @last_test = TestRun.order(:start_time).last if @last_test @test_run = @last_test @reports = @test_run.reports.order('users DESC, connected DESC').to_a @uptimes = Ping.current_uptimes end erb :index end get '/reports/' do @test_runs = TestRun.order(start_time: :desc).includes(:reports).to_a erb :reports end get '/reports/:date' do |date| if date !~ /\A[0-9]{4}\-[0-9]{2}\-[0-9]{2}\z/ halt 404 end date = Date.parse(date) @test_run = TestRun.where('start_time >= ? AND start_time < ?', date.to_time, (date + 1).to_time).first if @test_run @reports = @test_run.reports.order('users DESC, connected DESC').to_a @uptimes = Ping.current_uptimes erb :index else halt 404 end end