This commit is contained in:
Dvorinka
2025-06-20 09:25:21 +02:00
parent 1197703313
commit 6d1c95060b
+50 -8
View File
@@ -27,18 +27,18 @@ type VisitorStats struct {
WeeklyVisits int `json:"weekly_visits"` WeeklyVisits int `json:"weekly_visits"`
LastUpdated time.Time `json:"last_updated"` LastUpdated time.Time `json:"last_updated"`
UniqueVisitors map[string]struct { UniqueVisitors map[string]struct {
FirstVisit time.Time `json:"first_visit"` FirstVisit time.Time `json:"first_visit"`
LastVisit time.Time `json:"last_visit"` LastVisit time.Time `json:"last_visit"`
Visits int `json:"visits"` Visits int `json:"visits"`
IP string `json:"ip"` IP string `json:"ip"`
UserAgent string `json:"user_agent"` UserAgent string `json:"user_agent"`
} `json:"unique_visitors"` } `json:"unique_visitors"`
MostActiveHours []struct { MostActiveHours []struct {
Hour int `json:"hour"` Hour int `json:"hour"`
Count int `json:"count"` Count int `json:"count"`
} `json:"most_active_hours"` } `json:"most_active_hours"`
MostActiveDays []struct { MostActiveDays []struct {
Day string `json:"day"` Day string `json:"day"`
Count int `json:"count"` Count int `json:"count"`
} `json:"most_active_days"` } `json:"most_active_days"`
BrowserStats map[string]int `json:"browser_stats"` BrowserStats map[string]int `json:"browser_stats"`
@@ -46,6 +46,45 @@ type VisitorStats struct {
ReferrerStats map[string]int `json:"referrer_stats"` ReferrerStats map[string]int `json:"referrer_stats"`
} }
// Initialize VisitorStats with proper struct types
func (v *VisitorStats) init() {
if v.UniqueVisitors == nil {
v.UniqueVisitors = make(map[string]struct {
FirstVisit time.Time
LastVisit time.Time
Visits int
IP string
UserAgent string
})
}
if v.BrowserStats == nil {
v.BrowserStats = make(map[string]int)
}
if v.OSStats == nil {
v.OSStats = make(map[string]int)
}
if v.ReferrerStats == nil {
v.ReferrerStats = make(map[string]int)
}
if len(v.MostActiveHours) == 0 {
v.MostActiveHours = make([]struct {
Hour int
Count int
}, 24)
}
if len(v.MostActiveDays) == 0 {
v.MostActiveDays = make([]struct {
Day string
Count int
}, 7)
}
}
const visitorStatsFile = "data/visitor_stats.json" const visitorStatsFile = "data/visitor_stats.json"
func loadVisitorStats() (*VisitorStats, error) { func loadVisitorStats() (*VisitorStats, error) {
@@ -58,6 +97,9 @@ func loadVisitorStats() (*VisitorStats, error) {
LastUpdated: time.Now(), LastUpdated: time.Now(),
} }
// Initialize all fields
stats.init()
data, err := os.ReadFile(visitorStatsFile) data, err := os.ReadFile(visitorStatsFile)
if err != nil { if err != nil {
return stats, nil // Return default stats if file doesn't exist return stats, nil // Return default stats if file doesn't exist