This commit is contained in:
Dvorinka
2025-06-20 09:29:15 +02:00
parent d5d2bdf9cd
commit c18592e194
+58 -50
View File
@@ -129,53 +129,66 @@ func trackVisit(w http.ResponseWriter, r *http.Request) {
return return
} }
// Initialize stats if needed
stats.init()
// Update visit counts
stats.TotalVisits++
stats.LastVisit = time.Now()
stats.LastUpdated = time.Now()
if stats.LastUpdated.Day() != time.Now().Day() {
stats.TodayVisits = 1
stats.WeeklyVisits++
stats.MonthlyVisits++
} else {
stats.TodayVisits++
}
// Get visitor ID (using IP and User-Agent) // Get visitor ID (using IP and User-Agent)
visitorID := fmt.Sprintf("%s-%s", r.RemoteAddr, r.UserAgent()) visitorID := fmt.Sprintf("%s-%s", r.RemoteAddr, r.UserAgent())
// Track unique visitor // Update or create visitor stats
if stats.UniqueVisitors == nil { if visitor, exists := stats.UniqueVisitors[visitorID]; exists {
stats.UniqueVisitors = make(map[string]struct { visitor.LastVisit = time.Now()
FirstVisit time.Time visitor.Visits++
LastVisit time.Time stats.UniqueVisitors[visitorID] = visitor
Visits int } else {
IP string stats.UniqueVisitors[visitorID] = struct {
UserAgent string FirstVisit time.Time `json:"first_visit"`
}) LastVisit time.Time `json:"last_visit"`
Visits int `json:"visits"`
IP string `json:"ip"`
UserAgent string `json:"user_agent"`
}{
FirstVisit: time.Now(),
LastVisit: time.Now(),
Visits: 1,
IP: r.RemoteAddr,
UserAgent: r.UserAgent(),
}
} }
visitor := stats.UniqueVisitors[visitorID]
if visitor.Visits == 0 {
visitor.FirstVisit = time.Now()
}
visitor.LastVisit = time.Now()
visitor.Visits++
visitor.IP = r.RemoteAddr
visitor.UserAgent = r.UserAgent()
stats.UniqueVisitors[visitorID] = visitor
// Track browser // Track browser
if stats.BrowserStats == nil { browser := detectBrowser(r.UserAgent())
stats.BrowserStats = make(map[string]int)
}
browser := r.Header.Get("User-Agent")
stats.BrowserStats[browser]++ stats.BrowserStats[browser]++
// Track OS // Track OS
if stats.OSStats == nil { os := detectOS(r.UserAgent())
stats.OSStats = make(map[string]int)
}
os := getOSFromUserAgent(r.UserAgent())
stats.OSStats[os]++ stats.OSStats[os]++
// Track referrer // Track referrer
if stats.ReferrerStats == nil {
stats.ReferrerStats = make(map[string]int)
}
referrer := r.Header.Get("Referer") referrer := r.Header.Get("Referer")
stats.ReferrerStats[referrer]++ if referrer != "" {
stats.ReferrerStats[referrer]++
}
// Track active hours // Track active hours and days
hour := time.Now().Hour() now := time.Now()
hour := now.Hour()
day := now.Weekday().String()
// Update active hours
foundHour := false foundHour := false
for i := range stats.MostActiveHours { for i := range stats.MostActiveHours {
if stats.MostActiveHours[i].Hour == hour { if stats.MostActiveHours[i].Hour == hour {
@@ -186,13 +199,15 @@ func trackVisit(w http.ResponseWriter, r *http.Request) {
} }
if !foundHour { if !foundHour {
stats.MostActiveHours = append(stats.MostActiveHours, struct { stats.MostActiveHours = append(stats.MostActiveHours, struct {
Hour int `json:"hour"` Hour int `json:"hour"`
Count int `json:"count"` Count int `json:"count"`
}{Hour: hour, Count: 1}) }{
Hour: hour,
Count: 1,
})
} }
// Track active days // Update active days
day := time.Now().Weekday().String()
foundDay := false foundDay := false
for i := range stats.MostActiveDays { for i := range stats.MostActiveDays {
if stats.MostActiveDays[i].Day == day { if stats.MostActiveDays[i].Day == day {
@@ -205,20 +220,13 @@ func trackVisit(w http.ResponseWriter, r *http.Request) {
stats.MostActiveDays = append(stats.MostActiveDays, struct { stats.MostActiveDays = append(stats.MostActiveDays, struct {
Day string `json:"day"` Day string `json:"day"`
Count int `json:"count"` Count int `json:"count"`
}{Day: day, Count: 1}) }{
Day: day,
Count: 1,
})
} }
// Update basic stats // Save updated stats
stats.TotalVisits++
stats.LastVisit = time.Now()
// Reset today's visits at midnight
if stats.LastUpdated.Day() != time.Now().Day() {
stats.TodayVisits = 1
stats.WeeklyVisits++
stats.MonthlyVisits++
} else {
stats.TodayVisits++
} }
// Reset weekly visits on Monday // Reset weekly visits on Monday