mirror of
https://github.com/status-im/fathom.git
synced 2025-03-01 11:30:28 +00:00
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
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
|
|
}
|