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"
)
2018-05-08 11:08:16 +00:00
func GetPageStats ( date time . Time , hostname string , pathname string ) ( * models . PageStats , error ) {
2018-05-07 14:05:53 +00:00
stats := & models . PageStats { }
2018-05-08 11:08:16 +00:00
query := dbx . Rebind ( ` SELECT * FROM daily_page_stats WHERE hostname = ? AND pathname = ? AND date = ? LIMIT 1 ` )
2018-05-08 11:21:36 +00:00
err := dbx . Get ( stats , query , hostname , 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 11:08:16 +00:00
query := dbx . Rebind ( ` INSERT INTO daily_page_stats(pageviews, visitors, entries, bounce_rate, avg_duration, hostname, pathname, date) VALUES(?, ?, ?, ?, ?, ?, ?, ?) ` )
_ , err := dbx . Exec ( query , s . Pageviews , s . Visitors , s . Entries , s . BounceRate , s . AvgDuration , s . Hostname , 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-09 08:35:16 +00:00
query := dbx . Rebind ( ` UPDATE daily_page_stats SET pageviews = ?, visitors = ?, entries = ?, bounce_rate = ROUND(?, 4), avg_duration = ROUND(?, 4) WHERE hostname = ? AND pathname = ? AND date = ? ` )
2018-05-08 11:08:16 +00:00
_ , err := dbx . Exec ( query , s . Pageviews , s . Visitors , s . Entries , s . BounceRate , s . AvgDuration , s . Hostname , 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-11 08:54:41 +00:00
query := dbx . Rebind ( ` SELECT hostname, pathname, SUM(pageviews) AS pageviews, SUM(visitors) AS visitors, SUM(entries) AS entries, COALESCE(ROUND(SUM(entries*bounce_rate)/SUM(entries), 4), 0.00) AS bounce_rate, COALESCE(ROUND(SUM(avg_duration*pageviews)/SUM(pageviews), 4), 0.00) AS avg_duration FROM daily_page_stats WHERE date >= ? AND date <= ? GROUP BY hostname, pathname 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
}