2018-05-06 11:53:19 +02:00
package datastore
2018-05-07 16:05:53 +02:00
import (
"database/sql"
"github.com/usefathom/fathom/pkg/models"
"time"
)
func GetPageStats ( date time . Time , pathname string ) ( * models . PageStats , error ) {
stats := & models . PageStats { }
2018-05-07 17:01:20 +02:00
query := dbx . Rebind ( ` SELECT * FROM daily_page_stats WHERE date = ? AND pathname = ? LIMIT 1 ` )
2018-05-07 16:05:53 +02:00
err := dbx . Get ( stats , query , date . Format ( "2006-01-02" ) , pathname )
if err != nil && err == sql . ErrNoRows {
return nil , ErrNoResults
}
return stats , err
}
func InsertPageStats ( s * models . PageStats ) error {
2018-05-07 17:01:20 +02:00
query := dbx . Rebind ( ` INSERT INTO daily_page_stats(views, entries, unique_views, bounces, avg_duration, pathname, date) VALUES(?, ?, ?, ?, ?, ?, ?) ` )
_ , err := dbx . Exec ( query , s . Views , s . Entries , s . UniqueViews , s . Bounces , s . AvgDuration , s . Pathname , s . Date . Format ( "2006-01-02" ) )
2018-05-07 16:05:53 +02:00
return err
}
func UpdatePageStats ( s * models . PageStats ) error {
2018-05-07 17:01:20 +02:00
query := dbx . Rebind ( ` UPDATE daily_page_stats SET views = ?, entries = ?, unique_views = ?, bounces = ?, avg_duration = ? WHERE pathname = ? AND date = ? ` )
_ , err := dbx . Exec ( query , s . Views , s . Entries , s . UniqueViews , s . Bounces , s . AvgDuration , s . Pathname , s . Date . Format ( "2006-01-02" ) )
2018-05-07 16:05:53 +02:00
return err
}
2018-05-07 17:01:20 +02:00
2018-05-07 18:59:52 +02:00
func GetAggregatedPageStats ( startDate time . Time , endDate time . Time , limit int ) ( [ ] * models . PageStats , error ) {
2018-05-07 17:01:20 +02:00
var result [ ] * models . PageStats
query := dbx . Rebind ( ` SELECT pathname, SUM(views) AS views, SUM(unique_views) AS unique_views, SUM(entries) AS entries, ROUND(AVG(bounces), 0) AS bounces FROM daily_page_stats WHERE date >= ? AND date <= ? GROUP BY pathname, views, unique_views, entries, bounces ORDER BY views DESC LIMIT ? ` )
err := dbx . Select ( & result , query , startDate . Format ( "2006-01-02" ) , endDate . Format ( "2006-01-02" ) , limit )
return result , err
}