fix and improve stats, including CSV export

This commit is contained in:
Kyle Drake 2018-05-22 18:59:02 -07:00
parent 24e458d368
commit 1afb5da0bb
2 changed files with 48 additions and 7 deletions

View file

@ -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}

View file

@ -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",