mirror of
https://github.com/neocities/neocities.git
synced 2025-04-25 01:32:36 +02:00
fix and improve stats, including CSV export
This commit is contained in:
parent
24e458d368
commit
1afb5da0bb
2 changed files with 48 additions and 7 deletions
33
app/site.rb
33
app/site.rb
|
@ -45,7 +45,9 @@ get '/site/:username/archives' do
|
|||
erb :'site/archives'
|
||||
end
|
||||
|
||||
MAX_STAT_POINTS = 30
|
||||
get '/site/:username/stats' do
|
||||
@default_stat_points = 7
|
||||
@site = Site[username: params[:username]]
|
||||
not_found if @site.nil?
|
||||
|
||||
|
@ -88,17 +90,38 @@ get '/site/:username/stats' do
|
|||
|
||||
if @site.supporter?
|
||||
unless params[:days].to_s == 'sincethebigbang'
|
||||
if params[:days]
|
||||
stats_dataset.limit! params[:days]
|
||||
if params[:days] && params[:days].to_i != 0
|
||||
stats_dataset = stats_dataset.limit params[:days]
|
||||
else
|
||||
stats_dataset = stats_dataset.limit 7
|
||||
params[:days] = @default_stat_points
|
||||
stats_dataset = stats_dataset.limit @default_stat_points
|
||||
end
|
||||
end
|
||||
else
|
||||
stats_dataset = stats_dataset.limit 7
|
||||
stats_dataset = stats_dataset.limit @default_stat_points
|
||||
end
|
||||
|
||||
@stats[:stat_days] = stats_dataset.all.reverse
|
||||
stats = stats_dataset.all.reverse
|
||||
|
||||
if params[:format] == 'csv'
|
||||
content_type 'application/csv'
|
||||
attachment "#{current_site.username}-stats.csv"
|
||||
|
||||
return CSV.generate do |csv|
|
||||
csv << ['day', 'hits', 'views', 'comments', 'follows', 'site_updates', 'bandwidth']
|
||||
stats.each do |s|
|
||||
csv << [s[:created_at].to_s, s[:hits], s[:views], s[:comments], s[:follows], s[:site_updates], s[:bandwidth]]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if stats.length > MAX_STAT_POINTS
|
||||
puts stats.length
|
||||
stats = stats.select.with_index {|a, i| (i % (stats.length / MAX_STAT_POINTS.to_f).round) == 0}
|
||||
puts stats.length
|
||||
end
|
||||
|
||||
@stats[:stat_days] = stats
|
||||
@multi_tooltip_template = "<%= datasetLabel %> - <%= value %>"
|
||||
|
||||
erb :'site/stats', locals: {site: @site}
|
||||
|
|
|
@ -136,12 +136,24 @@
|
|||
</div>
|
||||
-->
|
||||
|
||||
<h2>Total Visitors <small>last 7 days</small></h2>
|
||||
<h2>
|
||||
Total Visitors
|
||||
<small>
|
||||
<% if params[:days].blank? %>
|
||||
last <%= @default_stat_points %> days
|
||||
<% elsif params[:days] == 'sincethebigbang' %>
|
||||
all time
|
||||
<% else %>
|
||||
last <%= params[:days] %> days
|
||||
<% end %>
|
||||
</small>
|
||||
</h2>
|
||||
|
||||
<% if current_site && current_site.id == @site.id %>
|
||||
|
||||
<% if current_site.supporter? %>
|
||||
<ul class="nav h-Nav">
|
||||
<li><a href="?days=7">7 days</a></li>
|
||||
<li><a href="?days=30">30 days</a></li>
|
||||
<li><a href="?days=90">90 days</a></li>
|
||||
<li><a href="?days=365">1 year</a></li>
|
||||
|
@ -154,6 +166,12 @@
|
|||
|
||||
<canvas id="myChart" style="width:100%;height:300px;display:block"></canvas>
|
||||
|
||||
<div class="row">
|
||||
<div class="col col-50">
|
||||
<p><a href="?days=<%= params[:days] %>&format=csv">Export as CSV File</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div class="row">
|
||||
<div class="col col-50">
|
||||
|
@ -305,7 +323,7 @@
|
|||
|
||||
//chart.js
|
||||
var data = {
|
||||
labels: <%== @stats[:stat_days].collect {|s| s.created_at.strftime("%b %-d")}.to_json %>,
|
||||
labels: <%== @stats[:stat_days].collect {|s| s.created_at.strftime("%b %-d, %Y")}.to_json %>,
|
||||
datasets: [
|
||||
{
|
||||
label: "Hits",
|
||||
|
|
Loading…
Add table
Reference in a new issue