2018-05-06 09:53:19 +00:00
package datastore
2018-05-07 14:05:53 +00: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-08 08:45:17 +00:00
query := dbx . Rebind ( ` SELECT * FROM daily_page_stats WHERE pathname = ? AND date = ? LIMIT 1 ` )
err := dbx . Get ( stats , query , pathname , date . Format ( "2006-01-02" ) )
2018-05-07 14:05:53 +00:00
if err != nil && err == sql . ErrNoRows {
return nil , ErrNoResults
}
return stats , err
}
func InsertPageStats ( s * models . PageStats ) error {
2018-05-08 08:45:17 +00:00
query := dbx . Rebind ( ` INSERT INTO daily_page_stats(pageviews, visitors, entries, bounce_rate, avg_duration, pathname, date) VALUES(?, ?, ?, ?, ?, ?, ?) ` )
_ , err := dbx . Exec ( query , s . Pageviews , s . Visitors , s . Entries , s . BounceRate , s . AvgDuration , s . Pathname , s . Date . Format ( "2006-01-02" ) )
2018-05-07 14:05:53 +00:00
return err
}
func UpdatePageStats ( s * models . PageStats ) error {
2018-05-08 08:45:17 +00:00
query := dbx . Rebind ( ` UPDATE daily_page_stats SET pageviews = ?, visitors = ?, entries = ?, bounce_rate = ?, avg_duration = ? WHERE pathname = ? AND date = ? ` )
_ , err := dbx . Exec ( query , s . Pageviews , s . Visitors , s . Entries , s . BounceRate , s . AvgDuration , s . Pathname , s . Date . Format ( "2006-01-02" ) )
2018-05-07 14:05:53 +00:00
return err
}
2018-05-07 15:01:20 +00:00
2018-05-07 16:59:52 +00:00
func GetAggregatedPageStats ( startDate time . Time , endDate time . Time , limit int ) ( [ ] * models . PageStats , error ) {
2018-05-07 15:01:20 +00:00
var result [ ] * models . PageStats
2018-05-08 08:45:17 +00:00
query := dbx . Rebind ( ` SELECT pathname, SUM(pageviews) AS pageviews, SUM(visitors) AS visitors, SUM(entries) AS entries, ROUND(AVG(bounce_rate), 0) AS bounce_rate FROM daily_page_stats WHERE date >= ? AND date <= ? GROUP BY pathname, pageviews, visitors, entries, bounce_rate ORDER BY pageviews DESC LIMIT ? ` )
2018-05-07 15:01:20 +00:00
err := dbx . Select ( & result , query , startDate . Format ( "2006-01-02" ) , endDate . Format ( "2006-01-02" ) , limit )
return result , err
}