10 changed files with 126 additions and 51 deletions
@ -0,0 +1,34 @@ |
|||
document.addEventListener("DOMContentLoaded", () => { |
|||
let background = [ |
|||
'#5cb85c', |
|||
'#8db457', |
|||
'#beb052', |
|||
'#f0ad4e', |
|||
'#e4804e', |
|||
'#d9534f', |
|||
'#bb3d39', |
|||
'#000' |
|||
] |
|||
|
|||
|
|||
for (const service of ["https", "smtp", "tls", "xmpp"]) { |
|||
const name = service.replace(/^\w/, c => c.toUpperCase()) |
|||
console.info(`grades${name}Chart`) |
|||
const canvas = document.getElementById(`grades${name}Chart`).getContext('2d') |
|||
const chart = new Chart(canvas, {type: 'pie'}) |
|||
|
|||
fetch(`/statistics/${service}.json`).then((response) => { |
|||
if (response.status === 200) { |
|||
response.json().then((data) => { |
|||
chart.data.labels = Object.keys(data) |
|||
chart.data.datasets = [{ |
|||
label: 'Number of request', |
|||
data: Object.values(data), |
|||
backgroundColor: background |
|||
}] |
|||
chart.update() |
|||
}) |
|||
} |
|||
}); |
|||
} |
|||
}); |
@ -0,0 +1,2 @@ |
|||
class Stat < ApplicationRecord |
|||
end |
@ -1,7 +1,15 @@ |
|||
<h2>Statistiques par service</h2> |
|||
<div class="row"> |
|||
<div class="col-4"> |
|||
<h2>Requests per service</h2> |
|||
|
|||
<ul class="list-unstyled"> |
|||
<% %i[https smtp xmpp tls ssh].each do |service| %> |
|||
<li><%= link_to service, stats_grade_path(service) %> (<%= Analysis.where(service: service).count %> recherches)</li> |
|||
<canvas id="servicesChart" aria-label="Pie chart for number of requests per service" role="img"></canvas> |
|||
</div> |
|||
|
|||
<% %i[https smtp tls xmpp].each do |s| %> |
|||
<div class="col-4"> |
|||
<h2>Grades for service <%= s.to_s.upcase %></h2> |
|||
|
|||
<canvas id="<%= "grades" + s.to_s.upcase_first + "Chart" %>" aria-label="Bar chart for number of grades for service <%= s.to_s.upcase %>" role="img"></canvas> |
|||
</div> |
|||
<% end %> |
|||
</ul> |
|||
</div> |
@ -0,0 +1,38 @@ |
|||
#!./bin/rails runner |
|||
TODAY = Date.today |
|||
# general stat |
|||
stat_name = "request_per_service" |
|||
services = Analysis.group(:service).order(service: :asc).count |
|||
json = { |
|||
labels: services.keys, |
|||
dataset: services.values |
|||
} |
|||
Stat.delete_by name: stat_name, date: TODAY |
|||
Stat.create!( |
|||
name: stat_name, |
|||
date: TODAY, |
|||
dataset: json |
|||
) |
|||
|
|||
# grade per service for https, smtp, tls and xmpp |
|||
%i[https smtp tls xmpp].each do |service_name| |
|||
stat_name = "grades_for_" + service_name.to_s |
|||
services = Analysis.where(service: service_name, pending: false) |
|||
|
|||
grades = %w[A+ A B C D E F G].collect { |g| [g, 0] }.to_h |
|||
services.each do |service| |
|||
if (result = service.result) |
|||
result.each do |r| |
|||
next unless (grade = r['grade']) |
|||
grades[grade] += 1 if grades.has_key?(grade) |
|||
end |
|||
end |
|||
end |
|||
|
|||
Stat.delete_by name: stat_name, date: TODAY |
|||
Stat.create!( |
|||
name: stat_name, |
|||
date: TODAY, |
|||
dataset: grades |
|||
) |
|||
end |
@ -0,0 +1,9 @@ |
|||
class CreateStats < ActiveRecord::Migration[7.0] |
|||
def change |
|||
create_table :stats, id: :uuid do |t| |
|||
t.string :name |
|||
t.date :date |
|||
t.jsonb :dataset |
|||
end |
|||
end |
|||
end |
Loading…
Reference in new issue