fathom/pkg/aggregator/store.go

114 lines
2.5 KiB
Go
Raw Normal View History

package aggregator
import (
"fmt"
2018-06-01 11:44:20 +02:00
"strings"
"time"
"github.com/usefathom/fathom/pkg/datastore"
"github.com/usefathom/fathom/pkg/models"
)
func (agg *Aggregator) getSiteStats(r *results, siteID int64, t time.Time) (*models.SiteStats, error) {
cacheKey := fmt.Sprintf("%d-%s", siteID, t.Format("2006-01-02"))
if stats, ok := r.Sites[cacheKey]; ok {
return stats, nil
}
// get from db
stats, err := agg.database.GetSiteStats(siteID, t)
if err != nil && err != datastore.ErrNoResults {
return nil, err
}
if stats == nil {
stats = &models.SiteStats{
SiteID: siteID,
New: true,
2018-10-05 14:34:39 +02:00
Date: t,
}
}
r.Sites[cacheKey] = stats
return stats, nil
}
func (agg *Aggregator) getPageStats(r *results, siteID int64, t time.Time, hostname string, pathname string) (*models.PageStats, error) {
cacheKey := fmt.Sprintf("%d-%s-%s-%s", siteID, t.Format("2006-01-02"), hostname, pathname)
if stats, ok := r.Pages[cacheKey]; ok {
return stats, nil
}
hostnameID, err := agg.database.HostnameID(hostname)
if err != nil {
return nil, err
}
pathnameID, err := agg.database.PathnameID(pathname)
if err != nil {
return nil, err
}
stats, err := agg.database.GetPageStats(siteID, t, hostnameID, pathnameID)
if err != nil && err != datastore.ErrNoResults {
return nil, err
}
if stats == nil {
stats = &models.PageStats{
SiteID: siteID,
New: true,
HostnameID: hostnameID,
PathnameID: pathnameID,
Date: t,
}
}
r.Pages[cacheKey] = stats
return stats, nil
}
func (agg *Aggregator) getReferrerStats(r *results, siteID int64, t time.Time, hostname string, pathname string) (*models.ReferrerStats, error) {
cacheKey := fmt.Sprintf("%d-%s-%s-%s", siteID, t.Format("2006-01-02"), hostname, pathname)
if stats, ok := r.Referrers[cacheKey]; ok {
return stats, nil
}
hostnameID, err := agg.database.HostnameID(hostname)
if err != nil {
return nil, err
}
pathnameID, err := agg.database.PathnameID(pathname)
if err != nil {
return nil, err
}
// get from db
stats, err := agg.database.GetReferrerStats(siteID, t, hostnameID, pathnameID)
if err != nil && err != datastore.ErrNoResults {
return nil, err
}
if stats == nil {
stats = &models.ReferrerStats{
SiteID: siteID,
New: true,
HostnameID: hostnameID,
PathnameID: pathnameID,
Date: t,
Group: "",
}
2018-06-01 11:44:20 +02:00
// TODO: Abstract this so we can add more groupings
if strings.Contains(hostname, "www.google.") {
2018-06-01 11:44:20 +02:00
stats.Group = "Google"
}
}
r.Referrers[cacheKey] = stats
return stats, nil
}