move goatcounter integration to server-side
1 file changed, 21 insertions(+), 6 deletions(-)
changed files
M internal/website/website.go → internal/website/website.go
@@ -13,6 +13,8 @@ "go.alanpearce.eu/homestead/internal/fetcher" "go.alanpearce.eu/homestead/internal/file" ihttp "go.alanpearce.eu/homestead/internal/http" "go.alanpearce.eu/homestead/internal/server" + "go.alanpearce.eu/homestead/internal/stats" + "go.alanpearce.eu/homestead/internal/stats/goatcounter" "go.alanpearce.eu/homestead/internal/storage" "go.alanpearce.eu/homestead/internal/storage/sqlite" "go.alanpearce.eu/x/log"@@ -22,12 +24,13 @@ "github.com/osdevisnot/sorvor/pkg/livereload" ) type Options struct { - DataRoot string `conf:"noprint"` - Root string `conf:"default:./website"` - Redirect bool `conf:"default:true"` - Development bool `conf:"default:false,flag:dev"` - FetchURL config.URL `conf:"default:https://ci.alanpearce.eu/archive/website/"` - BaseURL config.URL + DataRoot string `conf:"noprint"` + Root string `conf:"default:./website"` + Redirect bool `conf:"default:true"` + Development bool `conf:"default:false,flag:dev"` + FetchURL config.URL `conf:"default:https://ci.alanpearce.eu/archive/website/"` + BaseURL config.URL + GoatcounterToken string Redis *events.RedisOptions LiveReload *livereload.LiveReload `conf:"-"`@@ -35,6 +38,7 @@ } type Website struct { config *config.Config + counter stats.Counter log *log.Logger reader storage.Reader me digit.Resource@@ -99,6 +103,17 @@ if opts.Development { cfg.CSP.ScriptSrc = slices.Insert(cfg.CSP.ScriptSrc, 0, "'unsafe-inline'") cfg.CSP.ConnectSrc = slices.Insert(cfg.CSP.ConnectSrc, 0, "'self'") + } + if opts.GoatcounterToken == "" { + if !opts.Development { + log.Warn("in production without a goatcounter token") + } + } else { + website.counter = goatcounter.New(&goatcounter.Options{ + Logger: log.Named("counter"), + URL: &cfg.GoatCounter, + Token: opts.GoatcounterToken, + }) } if opts.BaseURL.URL != nil && opts.BaseURL.Hostname() != "" {