Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
bc5ae4962f | |||
ec2bf45a6e | |||
57163b10e4 | |||
25d394627d | |||
85dfdb163a | |||
b593ef7593 | |||
26698082f4 | |||
42a0b95015 | |||
5cc3b8f824 | |||
d59c75281e | |||
55e4f397f8 | |||
49d1276031 | |||
bc70fb8dd0 | |||
0231ebad2d | |||
541b5236f0 | |||
6215cecb53 |
@ -1,6 +1,6 @@
|
||||
pipeline:
|
||||
style:
|
||||
image: ruby:3.0
|
||||
image: ruby:3.4
|
||||
commands:
|
||||
- 'gem install rake'
|
||||
- 'bundle config set --local path "vendor/bundle"'
|
||||
|
@ -1,3 +1,3 @@
|
||||
$ ->
|
||||
# run foundation scripts
|
||||
$(document).foundation()
|
||||
console.log('Ready.')
|
||||
|
@ -1,55 +1,116 @@
|
||||
$(document).ready ->
|
||||
$('#generate_button').on 'click', (e) ->
|
||||
e.preventDefault()
|
||||
$.ajax(
|
||||
method: 'POST'
|
||||
url: '/reports'
|
||||
data:
|
||||
type: $('#report_type').val()
|
||||
choice: $('#report_choice').val()
|
||||
compare: $('#report_compare').val()
|
||||
).done (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()
|
||||
return
|
||||
return
|
||||
return
|
||||
$ ->
|
||||
chartInstance = null
|
||||
|
||||
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: ->
|
||||
dwnbtn = $('#download_button')
|
||||
dwnbtn.attr 'href', benchChart.toBase64Image()
|
||||
dwnbtn.attr 'download', 'benchmark_chart.png'
|
||||
dwnbtn.attr 'disabled', false
|
||||
return
|
||||
)
|
||||
$('#report-benchmarks').on 'change', (e) ->
|
||||
$('#report-tests option').prop('selected', false)
|
||||
|
||||
$('#reports-download').on 'click', (e) ->
|
||||
e.preventDefault()
|
||||
canvas = $('#benchmark-chart')[0]
|
||||
a = document.createElement 'a'
|
||||
a.href = canvas.toDataURL 'image/png'
|
||||
a.download = 'chart.png'
|
||||
a.click()
|
||||
|
||||
$('#reports-button').on 'click', (e) ->
|
||||
e.preventDefault()
|
||||
$('#reports-download').attr('disabled', true)
|
||||
chartInstance.destroy() if chartInstance
|
||||
|
||||
benchmarkId = $('#report-benchmarks').val()
|
||||
testIds = $('#report-tests').val()
|
||||
|
||||
benchmarkSearchParams = new URLSearchParams
|
||||
benchmark_id: benchmarkId
|
||||
benchmarkRes = await fetch("/api/v1/benchmark/details?#{benchmarkSearchParams}")
|
||||
benchmarkData = await benchmarkRes.json()
|
||||
|
||||
data =
|
||||
labels: []
|
||||
datasets: []
|
||||
|
||||
switch benchmarkData.scoring
|
||||
when 'pts'
|
||||
data.datasets.push({
|
||||
label: 'Average Score'
|
||||
data: []
|
||||
})
|
||||
when 'fps'
|
||||
data.datasets.push({
|
||||
label: 'Average FPS'
|
||||
data: []
|
||||
})
|
||||
data.datasets.push({
|
||||
label: 'Minimum FPS'
|
||||
data: []
|
||||
})
|
||||
when 'ms'
|
||||
data.datasets.push({
|
||||
label: 'Average Frame Time'
|
||||
data: []
|
||||
})
|
||||
data.datasets.push({
|
||||
label: 'Minimum Frame Time'
|
||||
data: []
|
||||
})
|
||||
|
||||
for testId in testIds
|
||||
try
|
||||
testSearchParams = new URLSearchParams
|
||||
test_id: testId
|
||||
testRes = await fetch("/api/v1/test/details?#{testSearchParams}")
|
||||
testData = await testRes.json()
|
||||
|
||||
resultSearchParams = new URLSearchParams
|
||||
test_id: testId
|
||||
benchmark_id: benchmarkId
|
||||
resultRes = await fetch("/api/v1/result/list?#{resultSearchParams}")
|
||||
resultData = await resultRes.json()
|
||||
|
||||
avg_total = 0
|
||||
min_total = 0
|
||||
max_total = 0
|
||||
|
||||
for result in resultData
|
||||
avg_total += result.avg_score
|
||||
min_total += result.min_score if result.min_score
|
||||
max_total += result.max_score if result.max_score
|
||||
|
||||
data.labels.push(testData.name)
|
||||
data.datasets[0].data.push(avg_total / resultData.length)
|
||||
console.log(data.datasets[0].data)
|
||||
switch benchmarkData.scoring
|
||||
when 'fps', 'ms'
|
||||
data.datasets[1].data.push(min_total / resultData.length)
|
||||
catch error
|
||||
console.error 'An error occurred while fetching benchmark results.', error
|
||||
|
||||
ctx = $('#benchmark-chart')[0].getContext('2d')
|
||||
|
||||
options =
|
||||
indexAxis: 'y'
|
||||
plugins:
|
||||
title:
|
||||
display: true
|
||||
text: benchmarkData.name
|
||||
font:
|
||||
size: '24'
|
||||
datalabels:
|
||||
anchor: 'end'
|
||||
align: 'left'
|
||||
color: 'black'
|
||||
font:
|
||||
weight: 'bold'
|
||||
formatter: (value) -> value
|
||||
scales:
|
||||
y:
|
||||
beginAtZero: true
|
||||
|
||||
chartInstance = new Chart ctx,
|
||||
type: 'bar'
|
||||
data: data
|
||||
options: options
|
||||
plugins: [ChartDataLabels]
|
||||
|
||||
$('#reports-download').attr('disabled', false)
|
||||
$('#benchmark-chart').removeClass('disabled')
|
||||
|
@ -10,7 +10,7 @@ fetchTestBenchmarkResults = (testId, benchmarkId) ->
|
||||
resultSearchParams = new URLSearchParams
|
||||
test_id: testId
|
||||
benchmark_id: benchmarkId
|
||||
resultRes = await fetch("/api/v1/results?#{resultSearchParams}")
|
||||
resultRes = await fetch("/api/v1/result/list?#{resultSearchParams}")
|
||||
resultData = await resultRes.json()
|
||||
|
||||
avg_total = 0
|
||||
@ -24,7 +24,7 @@ fetchTestBenchmarkResults = (testId, benchmarkId) ->
|
||||
|
||||
tableRow = $("#results-table tr[data-benchmark-id=#{benchmarkId}]")
|
||||
|
||||
tableRow.append('<td>' + benchmarkData.name + '</td>')
|
||||
tableRow.append('<td><a href="/benchmark/' + benchmarkData.id + '">' + benchmarkData.name + '</a></td>')
|
||||
tableRow.append('<td>' + benchmarkData.scoring + '</td>')
|
||||
tableRow.append('<td>' + resultData.length + '</td>')
|
||||
|
||||
|
@ -4,10 +4,18 @@
|
||||
$primary-color: cornflowerblue
|
||||
$primary-color-highlight: color.adjust($primary-color, $lightness: -10%)
|
||||
|
||||
html
|
||||
width: 100%
|
||||
height: 100%
|
||||
|
||||
body
|
||||
background: rgb(240, 235, 248)
|
||||
|
||||
table
|
||||
border: 1px solid #666
|
||||
|
||||
#wrapper
|
||||
background: white
|
||||
padding: 1.5rem 2rem
|
||||
border: 1px solid #bbb
|
||||
border-radius: 8px
|
||||
|
9
config/puma.rb
Normal file
9
config/puma.rb
Normal file
@ -0,0 +1,9 @@
|
||||
app_dir = File.expand_path('..', __dir__)
|
||||
directory app_dir
|
||||
|
||||
environment ENV.fetch('RACK_ENV', 'development')
|
||||
|
||||
bind 'tcp://0.0.0.0:9292'
|
||||
workers 2
|
||||
threads 1, 5
|
||||
|
7
src/appinfo.rb
Normal file
7
src/appinfo.rb
Normal file
@ -0,0 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module AppInfo
|
||||
|
||||
VERSION = '0.1.1'
|
||||
|
||||
end
|
@ -3,12 +3,12 @@
|
||||
# Helpers - view helper functions
|
||||
module Helpers
|
||||
|
||||
def ruby_version()
|
||||
def ruby_version
|
||||
return RUBY_VERSION
|
||||
end
|
||||
|
||||
def app_version()
|
||||
return `git describe --tags`
|
||||
def app_version
|
||||
return AppInfo::VERSION
|
||||
end
|
||||
|
||||
def date_format(date)
|
||||
|
@ -3,6 +3,7 @@
|
||||
# Benchmark - database model for PC benchmarks
|
||||
class Benchmark < Sequel::Model
|
||||
|
||||
many_to_many :tests
|
||||
one_to_many :results
|
||||
|
||||
end
|
||||
|
@ -5,6 +5,10 @@ class Test < Sequel::Model
|
||||
|
||||
one_to_many :result
|
||||
many_to_one :hardware
|
||||
many_to_many :benchmark
|
||||
many_to_many :benchmarks
|
||||
|
||||
def has_benchmark(benchmark_id)
|
||||
return benchmarks_dataset.where(Sequel[:benchmarks][:id] => benchmark_id).any?
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -11,7 +11,7 @@ class GameData < Sinatra::Base
|
||||
json benchmark.values()
|
||||
end
|
||||
|
||||
get '/api/v1/results' do
|
||||
get '/api/v1/result/list' do
|
||||
test_id = params[:test_id]
|
||||
benchmark_id = params[:benchmark_id]
|
||||
|
||||
@ -20,4 +20,12 @@ class GameData < Sinatra::Base
|
||||
json results.map(&:values)
|
||||
end
|
||||
|
||||
get '/api/v1/test/details' do
|
||||
test_id = params[:test_id]
|
||||
|
||||
tst = Test.where(id: test_id).first()
|
||||
|
||||
json tst.values()
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -15,6 +15,7 @@ class GameData < Sinatra::Base
|
||||
get '/test/add' do
|
||||
hardware = Hardware.order(:name).all()
|
||||
benchmarks = Benchmark.order(:name).all()
|
||||
|
||||
erb :'test/add', locals: {
|
||||
title: 'Add Test',
|
||||
hardware: hardware,
|
||||
@ -46,23 +47,44 @@ class GameData < Sinatra::Base
|
||||
}
|
||||
end
|
||||
|
||||
get '/test/:hardware_id/edit' do
|
||||
hardware = Hardware.where(id: params[:hardware_id]).first()
|
||||
get '/test/:test_id/edit' do
|
||||
tst = Test.where(id: params[:test_id]).first()
|
||||
hardware = Hardware.order(:name).all()
|
||||
benchmarks = Benchmark.order(:name).all()
|
||||
|
||||
erb :'test/edit', locals: {
|
||||
title: "Editing: #{hardware.name}",
|
||||
hardware: hardware
|
||||
title: "Editing: #{tst.name}",
|
||||
test: tst,
|
||||
hardware: hardware,
|
||||
benchmarks: benchmarks
|
||||
}
|
||||
end
|
||||
|
||||
post '/test/:hardware_id/edit' do
|
||||
hardware = Hardware.where(id: params[:hardware_id]).first()
|
||||
post '/test/:test_id/edit' do
|
||||
tst = Test.where(id: params[:test_id]).first()
|
||||
|
||||
hardware.update(
|
||||
name: params[:hardware_name],
|
||||
type: params[:hardware_type]
|
||||
tst.update(
|
||||
name: params[:test_name],
|
||||
hardware_id: params[:test_hardware],
|
||||
description: params[:test_description]
|
||||
)
|
||||
|
||||
redirect "/hardware/#{hardware.id}"
|
||||
# create an array of the selected benchmarks
|
||||
selected_benchmarks = Array(params[:test_benchmarks])
|
||||
# remove benchmarks no longer associated with the test
|
||||
tst.benchmarks.each do |b|
|
||||
if not selected_benchmarks.include?(b)
|
||||
tst.remove_benchmark(b)
|
||||
end
|
||||
end
|
||||
# associate the benchmarks to the test
|
||||
selected_benchmarks.each do |b|
|
||||
if not tst.has_benchmark(b)
|
||||
tst.add_benchmark(b)
|
||||
end
|
||||
end
|
||||
|
||||
redirect "/test/#{tst.id}"
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -5,6 +5,8 @@ require 'sinatra/json'
|
||||
require 'sequel'
|
||||
require 'sqlite3'
|
||||
|
||||
require_relative 'appinfo'
|
||||
|
||||
# Load the Sequel timestamps plugin
|
||||
Sequel::Model.plugin(:timestamps)
|
||||
# Initialize Sequel gem for database actions
|
||||
|
@ -26,11 +26,15 @@
|
||||
<div class="row mb-3">
|
||||
<div class="col-12">
|
||||
<label for="benchmark_description">Benchmark description</label>
|
||||
<textarea id="benchmark_description" class="form-control" name="benchmark_description">Enter a description/notes here.</textarea>
|
||||
<textarea id="benchmark_description" class="form-control" name="benchmark_description" placeholder="Enter a description/notes here."></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input class="btn btn-primary" type="submit" value="Create Benchmark">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<input class="btn btn-primary w-100" type="submit" value="Create Benchmark">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
@ -26,11 +26,15 @@
|
||||
<div class="row mb-3">
|
||||
<div class="col-12">
|
||||
<label for="benchmark_description">Benchmark description</label>
|
||||
<textarea id="benchmark_description" class="form-control" name="benchmark_description"><%= benchmark.description %></textarea>
|
||||
<textarea id="benchmark_description" class="form-control" name="benchmark_description" placeholder="Enter a description/notes here."><%= benchmark.description %></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input class="btn btn-primary" type="submit" value="Submit Changes">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<input class="btn btn-primary w-100" type="submit" value="Submit Changes">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
@ -16,3 +16,34 @@
|
||||
<p><%= benchmark.description %></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h3 class="mb-3">Tests using this benchmark:</h3>
|
||||
|
||||
<% if benchmark.tests.length > 0 %>
|
||||
<table class="table table-hover table-responsive">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Test title</th>
|
||||
<th>Benchmarks</th>
|
||||
<th>Last updated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% benchmark.tests.each do |t| %>
|
||||
<tr>
|
||||
<td><a href="/test/<%= t.id %>"><%= t.name %></a></td>
|
||||
<td><%= t.benchmarks.length %></td>
|
||||
<td><%= t.updated_at %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<% else %>
|
||||
<p>There are no tests associated with this benchmark.</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,7 +22,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input class="btn btn-primary" type="submit" value="Create Hardware">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<input class="btn btn-primary w-100" type="submit" value="Create Hardware">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
@ -22,7 +22,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input class="btn btn-primary" type="submit" value="Create Hardware">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<input class="btn btn-primary w-100" type="submit" value="Submit Changes">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
@ -11,3 +11,34 @@
|
||||
Hardware type: <%= hardware.type %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h3 class="mb-3">Tests using this benchmark:</h3>
|
||||
|
||||
<% if hardware.tests.length > 0 %>
|
||||
<table class="table table-hover table-responsive">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Test title</th>
|
||||
<th>Benchmarks</th>
|
||||
<th>Last updated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% hardware.tests.each do |t| %>
|
||||
<tr>
|
||||
<td><a href="/test/<%= t.id %>"><%= t.name %></a></td>
|
||||
<td><%= t.benchmarks.length %></td>
|
||||
<td><%= t.updated_at %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<% else %>
|
||||
<p>There are no tests associated with this benchmark.</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,12 +1,12 @@
|
||||
<div class="row">
|
||||
<% if tests.length > 0 %>
|
||||
<div class="twelve columns">
|
||||
<div class="12-col mb-3">
|
||||
<h2>Latest benchmark results:</h2>
|
||||
</div>
|
||||
|
||||
<div class="twelve columns">
|
||||
<table>
|
||||
<thead>
|
||||
<div class="12-col">
|
||||
<table class="table table-hover table-responsive">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Test name</th>
|
||||
<th># Benchmarks</th>
|
||||
@ -17,7 +17,7 @@
|
||||
<% tests.each do |t| %>
|
||||
<tr>
|
||||
<td><a href="/test/<%= t.id %>"><%= t.name %></a></td>
|
||||
<td><%= t.benchmark.length %></td>
|
||||
<td><%= t.benchmarks.length %></td>
|
||||
<td><%= t.updated_at %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
@ -25,7 +25,7 @@
|
||||
</table>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="twelve columns">
|
||||
<div class="12-col">
|
||||
<p>I'm sorry, there don't appear to be any benchmark results logged yet. Check again later!</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
@ -10,16 +10,17 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" charset="utf-8"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.7/js/bootstrap.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>
|
||||
<body class="d-flex flex-column min-vh-100">
|
||||
<!-- main navigation -->
|
||||
<%= erb :'partials/navbar', :locals => locals %>
|
||||
|
||||
<!-- main content -->
|
||||
<div id="wrapper" class="container mb-4">
|
||||
<%= yield %>
|
||||
</div>
|
||||
<main class="flex-grow-1 py-4">
|
||||
<div id="wrapper" class="container mb-4">
|
||||
<%= yield %>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- site footer -->
|
||||
<%= erb :'partials/footer', :locals => locals %>
|
||||
|
@ -1,8 +1,10 @@
|
||||
<nav id="main-footer" class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<p>Game Data version v<%= app_version() %></p>
|
||||
<p>Running Ruby version v<%= ruby_version() %></p>
|
||||
<footer id="main-footer" class="bg-light border-top py-3 text-center">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<p>Game Data version v<%= app_version() %></p>
|
||||
<p class="mb-0">Running Ruby version v<%= ruby_version() %></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</footer>
|
@ -1,4 +1,4 @@
|
||||
<div id="main-nav" class="navbar navbar-expand-md bg-body-secondary mb-3">
|
||||
<div id="main-nav" class="navbar navbar-expand-md bg-dark border-bottom border-body mb-3" data-bs-theme="dark">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand mb-0 h1" href="#">Game Data</a>
|
||||
|
||||
|
@ -1,35 +1,43 @@
|
||||
<div class="row">
|
||||
<form class="col-12" action="/reports" method="post">
|
||||
<div class="grid-x grid-margin-x">
|
||||
<select class="col-12 col-md-6 form-select" id="report_type" name="report_type" disabled>
|
||||
<option value="benchmark">Benchmark</option>
|
||||
<option value="test">Test</option>
|
||||
</select>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12 col-md-6">
|
||||
<select id="report-type" class="form-select" name="report_type" disabled>
|
||||
<option value="benchmark">Benchmark</option>
|
||||
<option value="test">Test</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<select class="col-12 col-md-6 form-select" id="report_choice" name="report_choice">
|
||||
<% benchmarks.each do |b| %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
<div class="col-12 col-md-6">
|
||||
<select id="report-benchmarks" class="form-select" name="report_choice">
|
||||
<% benchmarks.each do |b| %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<select class="col-12 form-select" id="report_compare" name="report_compare[]" multiple>
|
||||
<div class="col-12 mb-3">
|
||||
<select id="report-tests" class="col-12 form-select" name="report_compare[]" multiple>
|
||||
<% tests.each do |t| %>
|
||||
<option value="<%= t.id %>"><%= t.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="btn btn-primary" id="generate_button" value="Generate">
|
||||
<a href="#" class="button" id="download_button" disabled>Download</a>
|
||||
<div class="col-12 mb-3">
|
||||
<button id="reports-button" class="btn btn-primary">Generate</button>
|
||||
<button id="reports-download" class="btn btn-primary" disabled>Download</button>
|
||||
</div>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<canvas id="chart_canvas" width="100%" height="25"></canvas>
|
||||
<div class="col-12">
|
||||
<canvas id="benchmark-chart" width="100%" height="25"></canvas>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- load the chart.js library -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.min.js" charset="utf-8"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-datalabels/2.2.0/chartjs-plugin-datalabels.min.js" charset="utf-8"></script>
|
||||
<!-- load chart functionality -->
|
||||
<script src="/js/reports.js" charset="utf-8"></script>
|
||||
|
@ -7,13 +7,13 @@
|
||||
<div class="row">
|
||||
|
||||
<form class="col-12" action="/test/add" method="post">
|
||||
<div class="row mb-3">
|
||||
<div class="col-12 col-md-6 mb-3">
|
||||
<div class="row mb-0 mb-md-3">
|
||||
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
||||
<label for="test_name">Test name</label>
|
||||
<input id="test_name" class="form-control" type="text" name="test_name" placeholder="My hardware test (01/99)">
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-6 mb-3">
|
||||
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
||||
<label for="test_hardware">Hardware to test</label>
|
||||
<select id="test_hardware" class="form-select" name="test_hardware">
|
||||
<% for h in hardware %>
|
||||
@ -21,8 +21,10 @@
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-4 mb-3">
|
||||
<div class="row mb-0 mb-md-3">
|
||||
<div class="col-12 col-md-4 mb-3 mb-md-0">
|
||||
<label for="test_benchmarks">Benchmarks</label>
|
||||
<select id="test_benchmarks" class="form-select" name="test_benchmarks[]" multiple>
|
||||
<% for b in benchmarks %>
|
||||
@ -31,14 +33,15 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-8 mb-3">
|
||||
<div class="col-12 col-md-8 mb-3 mb-md-0">
|
||||
<label for="test_description">Test description</label>
|
||||
<textarea id="test_description" class="form-control" name="test_description" placeholder="This is my test for a hardware..."></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<input class="btn btn-primary" type="submit" value="Create Test">
|
||||
<input class="btn btn-primary w-100" type="submit" value="Create Test">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -1,32 +1,49 @@
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell small-12">
|
||||
<h1>Editing: <%= hardware.name %></h1>
|
||||
<div class="row mb-3">
|
||||
<div class="col-12">
|
||||
<h1>Editing: <%= test.name %></h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="row">
|
||||
|
||||
<form class="cell small-12" action="/hardware/<%= hardware.id %>/edit" method="post">
|
||||
<div class="grid-x grid-padding-x">
|
||||
<div class="cell medium-9">
|
||||
<label>
|
||||
Hardware name
|
||||
<input type="text" name="hardware_name" placeholder="Example hardware" value="<%= hardware.name %>">
|
||||
</label>
|
||||
<form class="col-12" action="/test/<%= test.id %>/edit" method="post">
|
||||
<div class="row mb-0 mb-md-3">
|
||||
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
||||
<label for="test_name">Test name</label>
|
||||
<input id="test_name" class="form-control" type="text" name="test_name" placeholder="My hardware test (01/99)" value="<%= test.name %>">
|
||||
</div>
|
||||
|
||||
<div class="cell medium-3">
|
||||
<label>
|
||||
Type
|
||||
<select name="hardware_type">
|
||||
<option value="gpu" <% if hardware.type == 'gpu' %>selected<% end %>>Graphics card</option>
|
||||
<option value="cpu" <% if hardware.type == 'cpu' %>selected<% end %>>Processor</option>
|
||||
</select>
|
||||
</label>
|
||||
<div class="col-12 col-md-6 mb-3 mb-md-0">
|
||||
<label for="test_hardware">Hardware to test</label>
|
||||
<select id="test_hardware" class="form-select" name="test_hardware">
|
||||
<% for h in hardware %>
|
||||
<option value="<%= h.id %>" <% if h.id == test.hardware.id %>selected<% end %>><%= h.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="button" value="Submit">
|
||||
<div class="row mb-0 mb-md-3">
|
||||
<div class="col-12 col-md-4 mb-3 mb-md-0">
|
||||
<label for="test_benchmarks">Benchmarks</label>
|
||||
<select id="test_benchmarks" class="form-select" name="test_benchmarks[]" multiple>
|
||||
<% for b in benchmarks %>
|
||||
<option value="<%= b.id %>" <% if test.has_benchmark(b.id) %>selected<% end %>><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-12 col-md-8 mb-3 mb-md-0">
|
||||
<label for="test_description">Test description</label>
|
||||
<textarea id="test_description" class="form-control" name="test_description" placeholder="This is my test for a hardware..."><%= test.description %></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<input class="btn btn-primary w-100" type="submit" value="Submit Changes">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
@ -26,7 +26,7 @@
|
||||
<% tests.each do |t| %>
|
||||
<tr>
|
||||
<td><a href="/test/<%= t.id %>"><%= t.name %></a></td>
|
||||
<td><%= t.benchmark.length %></td>
|
||||
<td><%= t.benchmarks.length %></td>
|
||||
<td><%= date_format(t.created_at) %></td>
|
||||
<td><%= date_format(t.updated_at) %></td>
|
||||
</tr>
|
||||
|
@ -1,64 +1,56 @@
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell small-12">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h1><%= test.name %></h1>
|
||||
</div>
|
||||
|
||||
<div class="cell small-12">
|
||||
<div class="col-12">
|
||||
<p><a href="/test/<%= test.id %>/edit">Edit</a></p>
|
||||
</div>
|
||||
|
||||
<div class="cell small-12">
|
||||
Hardware tested: <%= test.hardware.name %>
|
||||
<div class="col-12">
|
||||
<p>Hardware tested: <a href="/hardware/<%= test.hardware.id %>"><%= test.hardware.name %></a></p>
|
||||
</div>
|
||||
|
||||
<div class="cell small-12">
|
||||
<div class="col-12">
|
||||
<p><%= test.description %></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="grix-x grix-margin-x">
|
||||
<div class="cell small-12">
|
||||
<form class="u-full-width" action="/result/add" method="post">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<form action="/result/add" method="post">
|
||||
<input type="hidden" name="result_test" value="<%= test.id %>">
|
||||
<input type="hidden" name="result_referrer" value="test">
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell medium-5">
|
||||
<label for="result_benchmark">
|
||||
Add benchmark result:
|
||||
<select class="u-full-width" id="result_benchmark" name="result_benchmark">
|
||||
<% test.benchmark.each do |b| %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</label>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-5 mb-3 mb-md-0">
|
||||
<label for="result_benchmark">Add benchmark result:</label>
|
||||
<select class="form-select" id="result_benchmark" name="result_benchmark">
|
||||
<% test.benchmarks.each do |b| %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_average">
|
||||
Average score:
|
||||
<input type="text" id="result_average" name="result_average" value="">
|
||||
</label>
|
||||
<div class="col-4 col-md-2">
|
||||
<label for="result_average">Average score:</label>
|
||||
<input id="result_average" class="form-control" type="text" name="result_average" value="">
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_minimum">
|
||||
Minimum score:
|
||||
<input type="text" id="result_minimum" name="result_minimum" value="">
|
||||
</label>
|
||||
<div class="col-4 col-md-2">
|
||||
<label for="result_minimum">Minimum score:</label>
|
||||
<input id="result_minimum" class="form-control" type="text" name="result_minimum" value="">
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_maximum">
|
||||
Maximum score:
|
||||
<input type="text" id="result_maximum" name="result_maximum" value="">
|
||||
</label>
|
||||
<div class="col-4 col-md-2 mb-3 mb-md-0">
|
||||
<label for="result_maximum">Maximum score:</label>
|
||||
<input id="result_maximum" class="form-control" type="text" name="result_maximum" value="">
|
||||
</div>
|
||||
|
||||
<div class="cell medium-1">
|
||||
<input type="submit" class="u-full-width button" value="Submit">
|
||||
<div class="col-12 col-md-1 d-flex align-items-stretch mb-3 mb-md-0">
|
||||
<input class="btn btn-primary w-100" type="submit" value="Submit">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -67,8 +59,8 @@
|
||||
|
||||
<h4>Benchmark results for this test:</h4>
|
||||
|
||||
<table id="results-table" data-test-id="<%= test.id %>">
|
||||
<thead>
|
||||
<table id="results-table" class="table table-hover table-responsive" data-test-id="<%= test.id %>">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Benchmark name</th>
|
||||
<th>Scoring type</th>
|
||||
@ -79,7 +71,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% test.benchmark.each do |benchmark| %>
|
||||
<% test.benchmarks.each do |benchmark| %>
|
||||
<tr data-benchmark-id="<%= benchmark.id %>"></tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
|
Reference in New Issue
Block a user