fathom/pkg/datastore/total_visitors.go

53 lines
1.4 KiB
Go
Raw Normal View History

package datastore
import "github.com/usefathom/fathom/pkg/models"
// TotalVisitors returns the number of total visitors between the given timestamps
func TotalVisitors(before int64, after int64) (int, error) {
var total int
query := dbx.Rebind(`
SELECT COALESCE(SUM(t.count), 0)
FROM total_visitors t
WHERE UNIX_TIMESTAMP(t.date) <= ? AND UNIX_TIMESTAMP(t.date) >= ?`)
err := dbx.Get(&total, query, before, after)
return total, err
}
// TotalVisitorsPerDay returns a point slice containing visitor data per day
func TotalVisitorsPerDay(before int64, after int64) ([]*models.Total, error) {
var results []*models.Total
query := dbx.Rebind(`SELECT
COALESCE(SUM(t.count), 0) AS count,
COALESCE(SUM(t.count_unique), 0) AS count_unique,
DATE_FORMAT(t.date, '%Y-%m-%d') AS label
FROM total_visitors t
WHERE UNIX_TIMESTAMP(t.date) <= ? AND UNIX_TIMESTAMP(t.date) >= ?
GROUP BY label`)
err := dbx.Select(&results, query, before, after)
return results, err
}
// SaveVisitorTotals saves the given totals in the connected datastore
func SaveVisitorTotals(totals []*models.Total) error {
tx, err := dbx.Begin()
if err != nil {
return nil
}
query := dbx.Rebind(`INSERT INTO total_visitors( count, date ) VALUES( ?, ? ) ON DUPLICATE KEY UPDATE count = ?`)
stmt, err := tx.Prepare(query)
if err != nil {
return err
}
for _, t := range totals {
_, err = stmt.Exec(t.Count, t.Date, t.Count)
}
err = tx.Commit()
return err
}