mirror of
https://github.com/status-im/fathom.git
synced 2025-03-01 03:20:27 +00:00
change precision on numeric columns for postgres so we don't have to apply rounding. closes #116
This commit is contained in:
parent
0f0db205ae
commit
1b06bd3179
@ -0,0 +1,12 @@
|
|||||||
|
-- +migrate Up
|
||||||
|
|
||||||
|
ALTER TABLE daily_site_stats ALTER COLUMN bounce_rate TYPE NUMERIC;
|
||||||
|
ALTER TABLE daily_page_stats ALTER COLUMN bounce_rate TYPE NUMERIC;
|
||||||
|
ALTER TABLE daily_referrer_stats ALTER COLUMN bounce_rate TYPE NUMERIC;
|
||||||
|
ALTER TABLE daily_site_stats ALTER COLUMN avg_duration TYPE NUMERIC;
|
||||||
|
ALTER TABLE daily_page_stats ALTER COLUMN avg_duration TYPE NUMERIC;
|
||||||
|
ALTER TABLE daily_referrer_stats ALTER COLUMN avg_duration TYPE NUMERIC;
|
||||||
|
|
||||||
|
-- +migrate Down
|
||||||
|
|
||||||
|
|
@ -28,7 +28,7 @@ func (db *sqlstore) insertPageStats(s *models.PageStats) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *sqlstore) updatePageStats(s *models.PageStats) error {
|
func (db *sqlstore) updatePageStats(s *models.PageStats) error {
|
||||||
query := db.Rebind(`UPDATE daily_page_stats SET pageviews = ?, visitors = ?, entries = ?, bounce_rate = ROUND(?, 4), avg_duration = ROUND(?, 4), known_durations = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`)
|
query := db.Rebind(`UPDATE daily_page_stats SET pageviews = ?, visitors = ?, entries = ?, bounce_rate = ?, avg_duration = ?, known_durations = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`)
|
||||||
_, err := db.Exec(query, s.Pageviews, s.Visitors, s.Entries, s.BounceRate, s.AvgDuration, s.KnownDurations, s.SiteID, s.Hostname, s.Pathname, s.Date.Format("2006-01-02"))
|
_, err := db.Exec(query, s.Pageviews, s.Visitors, s.Entries, s.BounceRate, s.AvgDuration, s.KnownDurations, s.SiteID, s.Hostname, s.Pathname, s.Date.Format("2006-01-02"))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -41,8 +41,8 @@ func (db *sqlstore) GetAggregatedPageStats(siteID int64, startDate time.Time, en
|
|||||||
SUM(pageviews) AS pageviews,
|
SUM(pageviews) AS pageviews,
|
||||||
SUM(visitors) AS visitors,
|
SUM(visitors) AS visitors,
|
||||||
SUM(entries) AS entries,
|
SUM(entries) AS entries,
|
||||||
COALESCE(ROUND(SUM(entries*bounce_rate) / NULLIF(SUM(entries), 0), 4), 0.00) AS bounce_rate,
|
COALESCE(SUM(entries*bounce_rate) / NULLIF(SUM(entries), 0), 0.00) AS bounce_rate,
|
||||||
COALESCE(ROUND(SUM(avg_duration*pageviews) / SUM(pageviews), 4), 0.00) AS avg_duration
|
COALESCE(SUM(avg_duration*pageviews) / SUM(pageviews), 0.00) AS avg_duration
|
||||||
FROM daily_page_stats WHERE site_id = ? AND date >= ? AND date <= ?
|
FROM daily_page_stats WHERE site_id = ? AND date >= ? AND date <= ?
|
||||||
GROUP BY hostname, pathname
|
GROUP BY hostname, pathname
|
||||||
ORDER BY pageviews DESC LIMIT ?`)
|
ORDER BY pageviews DESC LIMIT ?`)
|
||||||
|
@ -28,7 +28,7 @@ func (db *sqlstore) insertReferrerStats(s *models.ReferrerStats) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *sqlstore) updateReferrerStats(s *models.ReferrerStats) error {
|
func (db *sqlstore) updateReferrerStats(s *models.ReferrerStats) error {
|
||||||
query := db.Rebind(`UPDATE daily_referrer_stats SET visitors = ?, pageviews = ?, bounce_rate = ROUND(?, 4), avg_duration = ROUND(?, 4), known_durations = ?, groupname = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`)
|
query := db.Rebind(`UPDATE daily_referrer_stats SET visitors = ?, pageviews = ?, bounce_rate = ?, avg_duration = ?, known_durations = ?, groupname = ? WHERE site_id = ? AND hostname = ? AND pathname = ? AND date = ?`)
|
||||||
_, err := db.Exec(query, s.Visitors, s.Pageviews, s.BounceRate, s.AvgDuration, s.KnownDurations, s.Group, s.SiteID, s.Hostname, s.Pathname, s.Date.Format("2006-01-02"))
|
_, err := db.Exec(query, s.Visitors, s.Pageviews, s.BounceRate, s.AvgDuration, s.KnownDurations, s.Group, s.SiteID, s.Hostname, s.Pathname, s.Date.Format("2006-01-02"))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -42,8 +42,8 @@ func (db *sqlstore) GetAggregatedReferrerStats(siteID int64, startDate time.Time
|
|||||||
COALESCE(MIN(groupname), '') AS groupname,
|
COALESCE(MIN(groupname), '') AS groupname,
|
||||||
SUM(visitors) AS visitors,
|
SUM(visitors) AS visitors,
|
||||||
SUM(pageviews) AS pageviews,
|
SUM(pageviews) AS pageviews,
|
||||||
COALESCE(ROUND(SUM(pageviews*NULLIF(bounce_rate, 0)) / SUM(pageviews), 4), 0.00) AS bounce_rate,
|
COALESCE(SUM(pageviews*NULLIF(bounce_rate, 0)) / SUM(pageviews), 0.00) AS bounce_rate,
|
||||||
COALESCE(ROUND(SUM(avg_duration*pageviews) / SUM(pageviews), 4), 0.00) AS avg_duration
|
COALESCE(SUM(avg_duration*pageviews) / SUM(pageviews), 0.00) AS avg_duration
|
||||||
FROM daily_referrer_stats
|
FROM daily_referrer_stats
|
||||||
WHERE site_id = ? AND date >= ? AND date <= ? `
|
WHERE site_id = ? AND date >= ? AND date <= ? `
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ func (db *sqlstore) insertSiteStats(s *models.SiteStats) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *sqlstore) updateSiteStats(s *models.SiteStats) error {
|
func (db *sqlstore) updateSiteStats(s *models.SiteStats) error {
|
||||||
query := db.Rebind(`UPDATE daily_site_stats SET visitors = ?, sessions = ?, pageviews = ?, bounce_rate = ROUND(?, 4), avg_duration = ROUND(?, 4), known_durations = ? WHERE site_id = ? AND date = ?`)
|
query := db.Rebind(`UPDATE daily_site_stats SET visitors = ?, sessions = ?, pageviews = ?, bounce_rate = ?, avg_duration = ?, known_durations = ? WHERE site_id = ? AND date = ?`)
|
||||||
_, err := db.Exec(query, s.Visitors, s.Sessions, s.Pageviews, s.BounceRate, s.AvgDuration, s.KnownDurations, s.SiteID, s.Date.Format("2006-01-02"))
|
_, err := db.Exec(query, s.Visitors, s.Sessions, s.Pageviews, s.BounceRate, s.AvgDuration, s.KnownDurations, s.SiteID, s.Date.Format("2006-01-02"))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -48,8 +48,8 @@ func (db *sqlstore) GetAggregatedSiteStats(siteID int64, startDate time.Time, en
|
|||||||
COALESCE(SUM(pageviews), 0) AS pageviews,
|
COALESCE(SUM(pageviews), 0) AS pageviews,
|
||||||
COALESCE(SUM(visitors), 0) AS visitors,
|
COALESCE(SUM(visitors), 0) AS visitors,
|
||||||
COALESCE(SUM(sessions), 0) AS sessions,
|
COALESCE(SUM(sessions), 0) AS sessions,
|
||||||
COALESCE(ROUND(SUM(pageviews*avg_duration) / NULLIF(SUM(pageviews), 0), 4), 0.00) AS avg_duration,
|
COALESCE(SUM(pageviews*avg_duration) / NULLIF(SUM(pageviews), 0), 0.00) AS avg_duration,
|
||||||
COALESCE(ROUND(SUM(sessions*bounce_rate) / NULLIF(SUM(sessions), 0), 4), 0.00) AS bounce_rate
|
COALESCE(SUM(sessions*bounce_rate) / NULLIF(SUM(sessions), 0), 0.00) AS bounce_rate
|
||||||
FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ? LIMIT 1`)
|
FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ? LIMIT 1`)
|
||||||
err := db.Get(stats, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02"))
|
err := db.Get(stats, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02"))
|
||||||
return stats, mapError(err)
|
return stats, mapError(err)
|
||||||
@ -80,7 +80,7 @@ func (db *sqlstore) GetTotalSiteSessions(siteID int64, startDate time.Time, endD
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *sqlstore) GetAverageSiteDuration(siteID int64, startDate time.Time, endDate time.Time) (float64, error) {
|
func (db *sqlstore) GetAverageSiteDuration(siteID int64, startDate time.Time, endDate time.Time) (float64, error) {
|
||||||
sql := `SELECT COALESCE(ROUND(SUM(pageviews*avg_duration)/SUM(pageviews), 4), 0.00) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?`
|
sql := `SELECT COALESCE(SUM(pageviews*avg_duration)/SUM(pageviews), 0.00) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?`
|
||||||
query := db.Rebind(sql)
|
query := db.Rebind(sql)
|
||||||
var total float64
|
var total float64
|
||||||
err := db.Get(&total, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02"))
|
err := db.Get(&total, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02"))
|
||||||
@ -88,7 +88,7 @@ func (db *sqlstore) GetAverageSiteDuration(siteID int64, startDate time.Time, en
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *sqlstore) GetAverageSiteBounceRate(siteID int64, startDate time.Time, endDate time.Time) (float64, error) {
|
func (db *sqlstore) GetAverageSiteBounceRate(siteID int64, startDate time.Time, endDate time.Time) (float64, error) {
|
||||||
sql := `SELECT COALESCE(ROUND(SUM(sessions*bounce_rate)/SUM(sessions), 4), 0.00) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?`
|
sql := `SELECT COALESCE(SUM(sessions*bounce_rate)/SUM(sessions), 4) FROM daily_site_stats WHERE site_id = ? AND date >= ? AND date <= ?`
|
||||||
query := db.Rebind(sql)
|
query := db.Rebind(sql)
|
||||||
var total float64
|
var total float64
|
||||||
err := db.Get(&total, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02"))
|
err := db.Get(&total, query, siteID, startDate.Format("2006-01-02"), endDate.Format("2006-01-02"))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user