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