A minimal analytics package to start collecting traffic data without client dependencies.
import "github.com/JakeKalstad/go-web-analytics"
analytics := NewAnalytics(AnalyticsConfiguration{
Name: "sanjuanpuertorico",
Password: os.Getenv("DASHBOARD_KEY"),
GroupByURLSegment: 1,
EntriesByURLSegment: 2,
WriteScheduleSeconds: 30,
Directory: "logs",
HashIPSecret: os.Getenv("HASH_IP_KEY"),
UserAgentBlackList: DefaultUserAgentBlacklist,
}, fmt.Println)
router.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
analytics.InsertRequest(r)
next.ServeHTTP(w, r)
})
})
router.HandleFunc("/analytics", analytics.Dashboard).Methods("GET")
type AnalyticsConfiguration struct {
HashIPSecret string
GroupByURLSegment int
EntriesByURLSegment int
WriteScheduleSeconds int
Name string
Password string
Directory string
UserAgentBlackList []string
}
HashIPSecret
is a seed that if provided will be used to hash the IP so you don't have plaintext user IPs stored
GroupByURLSegment
index in the URL split by/
to group the results
EntriesByURLSegment
index in the URL split by/
to count as results
WriteScheduleSeconds
how often we write to the file Name of file
Directory
parent directory for the log files
Password
for a dashboard if it's used /analytics?k=mypassword
UserAgentBlacklist
entries to check if the user agent contains in order to avoid things like bots or automated tests