aboutsummaryrefslogtreecommitdiff
path: root/backend/stats.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-12-22 13:36:18 +0100
committerAnhgelus Morhtuuzh <william@herges.fr>2025-12-22 13:36:18 +0100
commit93c4f9047426f9f56940ed2b733dcde2d98b0c0e (patch)
tree0c1e816e148febc20b70fd9cf2a2b202323b06ae /backend/stats.go
parent322826d06e425297fcbbc976a0566868a74f2d87 (diff)
perf(backend): decrease render time when request has referer header
Made the update stats async
Diffstat (limited to 'backend/stats.go')
-rw-r--r--backend/stats.go26
1 files changed, 22 insertions, 4 deletions
diff --git a/backend/stats.go b/backend/stats.go
index e2ad08b..2b07221 100644
--- a/backend/stats.go
+++ b/backend/stats.go
@@ -3,14 +3,20 @@ package backend
import (
"context"
"database/sql"
+ "fmt"
+ "log/slog"
"net/http"
"regexp"
"strings"
)
-var trimRefererReg = regexp.MustCompile(`https?://([a-z-0-9.]+)(:\d+)?/.*`)
+var trimRefererReg = regexp.MustCompile(`https?://([a-z-0-9.]+(:\d+)?)/.*`)
-func UpdateStats(ctx context.Context, db *sql.DB, r *http.Request) error {
+func getDB(ctx context.Context) *sql.DB {
+ return ctx.Value(dbKey).(*sql.DB)
+}
+
+func UpdateStats(ctx context.Context, r *http.Request) error {
target := r.URL.Path
if strings.HasPrefix(target, "/assets") || strings.HasPrefix(target, "/static") {
return nil
@@ -24,20 +30,32 @@ func UpdateStats(ctx context.Context, db *sql.DB, r *http.Request) error {
return nil
}
ref = subs[1]
- if ref == ctx.Value(configKey).(*Config).Domain {
+ if ref == ctx.Value(configKey).(*Config).Domain || ref == fmt.Sprintf("localhost:%d", 8000) {
ref = subs[0][strings.Index(subs[0], ref)+len(ref):]
+ if ref == target {
+ return nil
+ }
}
+ db := getDB(ctx)
rows, err := db.QueryContext(ctx, "SELECT id, visit FROM stats WHERE origin = ? AND target = ?", ref, target)
if err != nil {
return err
}
+ defer func() {
+ if err == nil {
+ slog.Debug("stats updated")
+ }
+ }()
if !rows.Next() {
_, err = db.ExecContext(ctx, "INSERT INTO stats (origin, target, visit) VALUES (?, ?, 1)", ref, target)
return err
}
var id uint
var nb uint
- rows.Scan(&id, &nb)
+ err = rows.Scan(&id, &nb)
+ if err != nil {
+ return err
+ }
err = rows.Close()
if err != nil {
return err