mirror of
https://github.com/Dvorinka/PPve.git
synced 2026-06-03 20:12:59 +00:00
ss
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user