mirror of
https://github.com/Kugelschieber/marvinblum.git
synced 2026-01-18 06:40:27 +00:00
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package tracking
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"github.com/Kugelschieber/marvinblum.de/db"
|
|
"github.com/emvi/logbuch"
|
|
"github.com/emvi/pirsch"
|
|
"os"
|
|
)
|
|
|
|
var (
|
|
store pirsch.Store
|
|
analyzer *pirsch.Analyzer
|
|
)
|
|
|
|
func NewTracker() (*pirsch.Tracker, context.CancelFunc) {
|
|
logbuch.Info("Connecting to database...")
|
|
conn, err := sql.Open("postgres", db.GetConnectionString())
|
|
|
|
if err != nil {
|
|
logbuch.Fatal("Error connecting to database", logbuch.Fields{"err": err})
|
|
return nil, nil
|
|
}
|
|
|
|
if err := conn.Ping(); err != nil {
|
|
logbuch.Fatal("Error pinging database", logbuch.Fields{"err": err})
|
|
return nil, nil
|
|
}
|
|
|
|
store = pirsch.NewPostgresStore(conn, nil)
|
|
tracker := pirsch.NewTracker(store, os.Getenv("MB_TRACKING_SALT"), &pirsch.TrackerConfig{
|
|
ReferrerDomainBlacklist: []string{"marvinblum.de"}, // I don't care about traffic from my own website
|
|
ReferrerDomainBlacklistIncludesSubdomains: true,
|
|
Sessions: true,
|
|
})
|
|
analyzer = pirsch.NewAnalyzer(store)
|
|
processor := pirsch.NewProcessor(store)
|
|
cancel := pirsch.RunAtMidnight(func() {
|
|
processTrackingData(processor)
|
|
})
|
|
processTrackingData(processor) // run on startup
|
|
return tracker, cancel
|
|
}
|
|
|
|
func processTrackingData(processor *pirsch.Processor) {
|
|
logbuch.Info("Processing tracking data...")
|
|
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
logbuch.Error("Error processing tracking data", logbuch.Fields{"err": err})
|
|
}
|
|
}()
|
|
|
|
if err := processor.Process(); err != nil {
|
|
logbuch.Error("Error processing tracking data", logbuch.Fields{"err": err})
|
|
} else {
|
|
logbuch.Info("Done processing tracking data")
|
|
}
|
|
}
|