Added rudimentary chart generation for benchmarks
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
357bb69257
commit
6aca95d832
68
public/js/reports.js
Normal file
68
public/js/reports.js
Normal file
@ -0,0 +1,68 @@
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#generate_button').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
url: '/reports',
|
||||
data: {
|
||||
type: $('#report_type').val(),
|
||||
choice: $('#report_choice').val(),
|
||||
compare: $('#report_compare').val(),
|
||||
}
|
||||
}).done(function(data) {
|
||||
benchChart.options.title.text = data.choice;
|
||||
benchChart.data.labels = data.names;
|
||||
benchChart.data.datasets[0].data = data.avg_results;
|
||||
benchChart.data.datasets[1].data = data.min_results;
|
||||
benchChart.update();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
var benchChart = new Chart(document.getElementById('chart_canvas').getContext('2d'), {
|
||||
type: 'horizontalBar',
|
||||
data: {
|
||||
labels: [],
|
||||
datasets: [
|
||||
{
|
||||
label: 'Average FPS',
|
||||
data: [],
|
||||
backgroundColor: 'hotpink',
|
||||
borderColor: '#212121',
|
||||
borderWidth: 1,
|
||||
},
|
||||
{
|
||||
label: 'Minimum FPS',
|
||||
data: [],
|
||||
backgroundColor: 'cornflowerblue',
|
||||
borderColor: '#212121',
|
||||
borderWidth: 1,
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
title: {
|
||||
display: true,
|
||||
text: 'N/a'
|
||||
},
|
||||
scales: {
|
||||
xAxes: [{
|
||||
display: true,
|
||||
ticks: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}]
|
||||
},
|
||||
animation: {
|
||||
onComplete: function() {
|
||||
var dwnbtn = $('#download_button');
|
||||
dwnbtn.attr('href', benchChart.toBase64Image());
|
||||
dwnbtn.attr('download', 'benchmark_chart.png');
|
||||
dwnbtn.attr('disabled', false);
|
||||
},
|
||||
}
|
||||
}
|
||||
});
|
@ -8,7 +8,7 @@ class Hardware < Sequel::Model(:hardware)
|
||||
def bench_results
|
||||
br = {}
|
||||
|
||||
@results.each do |r|
|
||||
results.each do |r|
|
||||
br[r.benchmark.name.to_s] = [] unless br.key?(r.benchmark.name)
|
||||
|
||||
br[r.benchmark.name.to_s].push(r.avg_score)
|
||||
|
@ -4,3 +4,4 @@ require_relative 'index'
|
||||
require_relative 'hardware'
|
||||
require_relative 'benchmark'
|
||||
require_relative 'result'
|
||||
require_relative 'reports'
|
||||
|
46
src/routes/reports.rb
Normal file
46
src/routes/reports.rb
Normal file
@ -0,0 +1,46 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# /reports routes
|
||||
class GameData < Sinatra::Base
|
||||
|
||||
get '/reports' do
|
||||
benchmarks = Benchmark.order(:name).all()
|
||||
hardware = Hardware.order(:name).all()
|
||||
|
||||
erb :'reports/index', locals: {
|
||||
title: 'Generate Reports',
|
||||
hardware: hardware,
|
||||
benchmarks: benchmarks
|
||||
}
|
||||
end
|
||||
|
||||
post '/reports' do
|
||||
report_type = params[:type]
|
||||
report_choice = params[:choice]
|
||||
report_compare = params[:compare]
|
||||
|
||||
if report_type == 'benchmark'
|
||||
choice = Benchmark.where(id: report_choice).first().name
|
||||
names = []
|
||||
avg_results = []
|
||||
min_results = []
|
||||
|
||||
report_compare.each do |c|
|
||||
hrd = Hardware.where(id: c).first()
|
||||
names.push(hrd.name)
|
||||
|
||||
res = Result.where(benchmark_id: report_choice, hardware_id: c).first()
|
||||
avg_results.push(res.avg_score)
|
||||
min_results.push(res.min_score)
|
||||
end
|
||||
|
||||
json({
|
||||
choice: choice,
|
||||
names: names,
|
||||
avg_results: avg_results,
|
||||
min_results: min_results
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
end
|
@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'sinatra/base'
|
||||
require 'sinatra/json'
|
||||
require 'sequel'
|
||||
require 'sqlite3'
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js" charset="utf-8"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.7.5/js/foundation.min.js" charset="utf-8"></script>
|
||||
<script src="/js/edgeville.js" charset="utf-8"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js" charset="utf-8"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- main navigation -->
|
||||
|
35
views/reports/index.erb
Normal file
35
views/reports/index.erb
Normal file
@ -0,0 +1,35 @@
|
||||
<div class="grid-x grid-margin-x">
|
||||
<form class="cell small-12" action="/reports" method="post">
|
||||
<div class="grid-x grid-margin-x">
|
||||
<select class="cell medium-6" id="report_type" name="report_type" disabled>
|
||||
<option value="benchmark">Benchmark</option>
|
||||
<option value="hardware">Hardware</option>
|
||||
</select>
|
||||
|
||||
<select class="cell medium-6" id="report_choice" name="report_choice">
|
||||
<% benchmarks.each do |b| %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<select class="cell small-12" id="report_compare" name="report_compare[]" multiple>
|
||||
<% hardware.each do |h| %>
|
||||
<option value="<%= h.id %>"><%= h.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="button" id="generate_button" value="Generate">
|
||||
<a href="#" class="button" id="download_button" disabled>Download</a>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<canvas id="chart_canvas" width="100%" height="25"></canvas>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- load the chart.js library -->
|
||||
<!-- load chart functionality -->
|
||||
<script src="/js/reports.js" charset="utf-8"></script>
|
Loading…
Reference in New Issue
Block a user