repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

commit
532a539
parent
1c474b9
author
Eric Bower
date
2026-04-20 20:20:50 -0400 EDT
feat(pgs): record metrics for compressed file types
3 files changed,  +19, -2
M pkg/apps/auth/api.go
+14, -2
 1@@ -13,6 +13,7 @@ import (
 2 	"log/slog"
 3 	"net/http"
 4 	"net/url"
 5+	"slices"
 6 	"strings"
 7 	"time"
 8 
 9@@ -749,6 +750,18 @@ func accessLogToVisit(dbpool db.DB, line string) (*db.AnalyticsVisits, error) {
10 	return deserializeCaddyAccessLog(dbpool, &accessLog)
11 }
12 
13+var allowedMime = []string{
14+	"application/gzip",
15+	"application/vnd.rar",
16+	"application/x-7z-compressed",
17+	"application/x-bzip",
18+	"application/x-bzip2",
19+	"application/x-freearc",
20+	"application/x-tar",
21+	"application/zip",
22+	"text/html",
23+}
24+
25 func metricDrainSub(ctx context.Context, dbpool db.DB, logger *slog.Logger, secret string) {
26 	drain := metrics.ReconnectReadMetrics(
27 		ctx,
28@@ -778,8 +791,7 @@ func metricDrainSub(ctx context.Context, dbpool db.DB, logger *slog.Logger, secr
29 				continue
30 			}
31 
32-			if !strings.HasPrefix(visit.ContentType, "text/html") {
33-				logger.Info("invalid content type", "contentType", visit.ContentType)
34+			if !slices.Contains(allowedMime, visit.ContentType) {
35 				continue
36 			}
37 
M pkg/shared/mime/mime.go
+4, -0
 1@@ -84,6 +84,8 @@ func GetMimeType(fpath string) string {
 2 		return "application/vnd.rar"
 3 	case ".gz":
 4 		return "application/gzip"
 5+	case ".bz":
 6+		return "application/x-bzip"
 7 	case ".bz2":
 8 		return "application/x-bzip2"
 9 	case ".xz":
10@@ -92,6 +94,8 @@ func GetMimeType(fpath string) string {
11 		return "application/x-7z-compressed"
12 	case ".tar":
13 		return "application/x-tar"
14+	case ".arc":
15+		return "application/x-freearc"
16 	case ".txt":
17 		return "text/plain"
18 	}
M pkg/shared/router/analytics.go
+1, -0
1@@ -185,6 +185,7 @@ func AnalyticsVisitFromVisit(visit *db.AnalyticsVisits, dbpool db.DB, secret str
2 	}
3 	visit.Host = hostname
4 	visit.UserAgent = CleanUserAgent(visit.UserAgent)
5+	visit.ContentType = strings.ToLower(visit.ContentType)
6 
7 	return nil
8 }