1
0
mirror of https://github.com/Eising/kipketer.git synced 2024-05-11 05:55:17 +00:00
Allan Eising e0ff5ca760 First commit
2015-10-27 21:15:36 +01:00

247 lines
8.3 KiB
Ruby

class Hastighedstest < Sinatra::Base
# @!group Reports controller
# @method get_reports
# Generate reports
get '/reports' do
@pagename = "reports"
@pagetitle = "Generate Reports"
@page = params.fetch "page", 1
@page = @page.to_i
if params[:crid] =~ /(N[A-Z]{2}-\d{6})/i
atests = Tests.where(:crid => $1.upcase).all
if atests.count == 0
flash[:notice] = "No results found."
redirect to("/reports")
end
elsif not params[:crid].nil?
flash[:notice] = "No results found."
redirect to("/reports")
else
atests = Tests.all
end
tests = []
atests.each do |test|
if test.test_results_dataset.count > 0
tests << test
end
end
p tests
p tests.class
@tests = tests.paginate(:page => @page, :per_page => 20)
haml :'reports/reports'
end
# @method get_reports_configure
# Configure the report for a given id
# @param id [Integer] the report id to configure
get '/reports/configure/:id' do
@pagename = "reports_configure"
@pagetitle = "Configure Report"
id = params[:id]
test = Tests.where(:id => id)
if test.count == 0
raise Sinatra::NotFound
else
@test = test.first
end
if params[:remote]
backbone_template = @test.form.backbone_template.contents_deconfigure
cpe_template = @test.form.cpe_template.contents_deconfigure
# Load template values
template_fields = JSON.parse(@test.template_fields)
# Find the pair entry
pairs = settings.pairs
pair = pairs.select { |x| x["remote"] == params[:remote] }.first
# add defaults to the two hashes
template_fields[:testcpe] = pair["cpe"]
template_fields[:testbb] = pair["bb"]
template_fields[:pairlocal] = pair["local"]
template_fields[:pairremote] = pair["remote"]
if pair.has_key? "netlocal"
template_fields[:netlocal] = pair["netlocal"]
template_fields[:netremote] = pair["netremote"]
end
@backbone_config = Mustache.render(backbone_template, template_fields)
@cpe_config = Mustache.render(cpe_template, template_fields)
end
haml :'reports/configure'
end
# @method post_reports_view
# Views a report
# @note This is supposed to be run through pdfkit as view.pdf
post '/reports/view' do
# This meant to be run with pdfkit as view.pdf
test = Tests.where(:id => params[:test_id])
passed = true
if test.count == 0
# Raise an exception if the Test ID isn't in the DB
raise Sinatra::NotFound
else
@test = test.first
end
if params[:rtt_test_id]
@rtt_test = true
@rtt = JSON.parse(Results.where(:id => params[:rtt_test_id]).first.results)
end
if params[:be_test_id]
@be_test = true
@be_test_id = params[:be_test_id]
@be_result = Results.where(:id => @be_test_id).first
@be = get_thrulay_results(@be_result.results)
@be_passed = validate_thrulay_results(@be_test_id, 80)
if @be_passed == false
passed = false
end
end
if params[:ef_test_id]
@ef_test = true
@ef_test_id = params[:ef_test_id]
@ef_result = Results.where(:id => @ef_test_id).first
@ef = get_thrulay_results(@ef_result.results)
@ef_passed = validate_thrulay_results(@ef_test_id, 28)
if @ef_passed == false
passed = false
end
end
# Delete the request
if params[:delete] == "true" and passed
test.update(:rfs => true)
end
haml :'reports/view', :layout => false
end
# @method get_reports_auto_id
# Autoconfigures and displays a report
# @note This is meant to be run through pdfkit by adding .pdf after the id
# @param id [Integer] Id to view, suffix .pdf to view as pdf
get '/reports/auto/:id' do
# This meant to be run with pdfkit as view.pdf
test = Tests.where(:id => params[:id])
if test.count == 0
# Raise an exception if the Test ID isn't in the DB
raise Sinatra::NotFound
else
@test = test.first
end
external_ds = @test.test_results_dataset.where(:test_type => "external")
if external_ds.count > 0
if env['REQUEST_PATH'] =~ /\.pdf$/
new_path = env['REQUEST_PATH'].gsub(/\.pdf$/, '')
redirect to(new_path)
end
result = external_ds.last
res = JSON.parse(result.results)
test = result.test
file = res["path"]
test = result.test
Tests.where(:id => test.id).update(:rfs => true)
tempfile = Tempfile.new(test.crid)
kit = PDFKit.new("#{request.base_url}/internal/reports/manual/#{test.id}", :page_size => 'A4', :print_media_type => true)
report = kit.to_pdf
pdf = CombinePDF.new
pdf << CombinePDF.parse(report)
pdf << CombinePDF.parse(File.read("./#{file}"))
pdf.save(tempfile.path)
content_type 'application/pdf'
File.read(tempfile.path)
else
rtt_ds = @test.test_results_dataset.where(:test_type => "rtt")
if rtt_ds.count > 0
@rtt = JSON.parse(rtt_ds.last.results)
@rtt_test = true
@rtt_passed = verify_owamp(@rtt)
end
be_ds = @test.test_results_dataset.where(:test_type => "be")
if be_ds.count > 0
@be_result = be_ds.last
@be_test_id = @be_result.id
@be = get_thrulay_results(be_ds.last.results)
@be_test = true
@be_passed = validate_thrulay_results(be_ds.last.id, 80)
end
ef_ds = @test.test_results_dataset.where(:test_type => "ef")
if ef_ds.count > 0
@ef_result = ef_ds.last
@ef_test_id = @ef_result.id
@ef_test = true
@ef = get_thrulay_results(ef_ds.last.results)
@ef_passed = validate_thrulay_results(ef_ds.last.id, 28)
end
passed = true
passed = false if @rtt_test and not @rtt_passed
passed = false if @be_test and not @be_passed
passed = false if @ef_test and not @ef_passed
if passed
test.update(:rfs => true)
haml :'reports/view', :layout => false
else
haml :'reports/fail', :layout => false
end
end
end
# @method post_reports_merge
# Merges a report with an external report
post '/reports/merge' do
result_id = params[:result_id]
result = Results.where(:id => result_id)
if not result.count == 1
$stderr.puts "result #{params[:test_id]} not found"
halt(404)
end
result = result.last
res = JSON.parse(result.results)
file = res["path"]
test = result.test
if params[:delete] == "true"
Tests.where(:id => test.id).update(:rfs => true)
end
tempfile = Tempfile.new(test.crid)
kit = PDFKit.new("#{request.base_url}/internal/reports/manual/#{test.id}", :page_size => 'A4', :print_media_type => true)
report = kit.to_pdf
pdf = CombinePDF.new
pdf << CombinePDF.parse(report)
pdf << CombinePDF.parse(File.read("./#{file}"))
pdf.save(tempfile.path)
content_type 'application/pdf'
File.read(tempfile.path)
end
get '/internal/reports/manual/:id' do
# This is an internal URL
test = Tests.where(:id => params[:id])
if test.count == 0
# Raise an exception if the Test ID isn't in the DB
raise Sinatra::NotFound
else
@test = test.first
end
haml :'reports/manual', :layout => false
end
end