#!/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