Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var GetBrowsersHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) total := count.Visitors(before, after) results := count.Custom(` SELECT v.browser_name, COUNT(DISTINCT(pv.visitor_id)) AS count FROM pageviews pv LEFT JOIN visitors v ON v.id = pv.visitor_id WHERE UNIX_TIMESTAMP(pv.timestamp) <= ? AND UNIX_TIMESTAMP(pv.timestamp) >= ? AND v.browser_name IS NOT NULL GROUP BY v.browser_name ORDER BY count DESC LIMIT ?`, before, after, getRequestedLimit(r), total) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/browsers
View Source
var GetCountriesHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) total := count.Visitors(before, after) results := count.Custom(` SELECT v.country, COUNT(DISTINCT(pv.visitor_id)) AS count FROM pageviews pv LEFT JOIN visitors v ON v.id = pv.visitor_id WHERE UNIX_TIMESTAMP(pv.timestamp) <= ? AND UNIX_TIMESTAMP(pv.timestamp) >= ? AND v.country IS NOT NULL GROUP BY v.country ORDER BY count DESC LIMIT ?`, before, after, getRequestedLimit(r), total) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/countries
View Source
var GetLanguagesHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) total := count.Visitors(before, after) results := count.Custom(` SELECT v.browser_language, COUNT(v.id) AS count FROM pageviews pv LEFT JOIN visitors v ON v.id = pv.visitor_id WHERE UNIX_TIMESTAMP(pv.timestamp) <= ? AND UNIX_TIMESTAMP(pv.timestamp) >= ? GROUP BY v.browser_language ORDER BY count DESC LIMIT ?`, before, after, getRequestedLimit(r), total, ) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/languages
View Source
var GetPageviewsCountHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) result := count.Pageviews(before, after) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(result) })
URL: /api/pageviews/count
View Source
var GetPageviewsHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) stmt, err := db.Conn.Prepare(`SELECT p.hostname, p.path, COUNT(*) AS pageviews, COUNT(DISTINCT(pv.visitor_id)) AS pageviews_unique FROM pageviews pv LEFT JOIN pages p ON pv.page_id = p.id WHERE UNIX_TIMESTAMP(pv.timestamp) <= ? AND UNIX_TIMESTAMP(pv.timestamp) >= ? GROUP BY p.path, p.hostname ORDER BY pageviews DESC LIMIT ?`) checkError(err) defer stmt.Close() rows, err := stmt.Query(before, after, defaultLimit) checkError(err) defer rows.Close() results := make([]models.Pageviews, 0) for rows.Next() { var p models.Pageviews err = rows.Scan(&p.Hostname, &p.Path, &p.Count, &p.CountUnique) checkError(err) results = append(results, p) } err = rows.Err() checkError(err) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/pageviews
View Source
var GetPageviewsPeriodCountHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) results := count.PageviewsPerDay(before, after) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/pageviews/group/day
View Source
var GetReferrersHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) total := count.Visitors(before, after) results := count.Custom(` SELECT pv.referrer_url, COUNT(DISTINCT(pv.visitor_id)) AS count FROM pageviews pv WHERE UNIX_TIMESTAMP(pv.timestamp) <= ? AND UNIX_TIMESTAMP(pv.timestamp) >= ? AND pv.referrer_url IS NOT NULL AND pv.referrer_url != "" GROUP BY pv.referrer_url ORDER BY count DESC LIMIT ?`, before, after, getRequestedLimit(r), total) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/referrers
View Source
var GetScreenResolutionsHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) total := count.Visitors(before, after) results := count.Custom(` SELECT v.screen_resolution, COUNT(DISTINCT(pv.visitor_id)) AS count FROM pageviews pv LEFT JOIN visitors v ON v.id = pv.visitor_id WHERE UNIX_TIMESTAMP(pv.timestamp) <= ? AND UNIX_TIMESTAMP(pv.timestamp) >= ? GROUP BY v.screen_resolution ORDER BY count DESC LIMIT ?`, before, after, getRequestedLimit(r), total) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/screen-resolutions
View Source
var GetVisitorsCountHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) result := count.Visitors(before, after) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(result) })
URL: /api/visitors/count
View Source
var GetVisitorsPeriodCountHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) results := count.VisitorsPerDay(before, after) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(results) })
URL: /api/visitors/count/group/:period
View Source
var GetVisitorsRealtimeCountHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var result int db.Conn.QueryRow(` SELECT COUNT(DISTINCT(pv.visitor_id)) FROM pageviews pv WHERE pv.timestamp >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 HOUR_MINUTE) AND pv.timestamp <= CURRENT_TIMESTAMP`).Scan(&result) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(result) })
URL: /api/visitors/count/realtime
View Source
var LoginHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var l Login json.NewDecoder(r.Body).Decode(&l) // check login creds var hashedPassword string var u models.User stmt, _ := db.Conn.Prepare("SELECT id, email, password FROM users WHERE email = ? LIMIT 1") err := stmt.QueryRow(l.Email).Scan(&u.ID, &u.Email, &hashedPassword) if err != nil || bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(l.Password)) != nil { w.WriteHeader(http.StatusUnauthorized) return } session, _ := store.Get(r, "auth") session.Values["user_id"] = u.ID err = session.Save(r, w) checkError(err) w.Header().Set("Content-Type", "application/json") w.Write([]byte("true")) })
URL: POST /api/session
View Source
var LogoutHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "auth") if !session.IsNew { session.Options.MaxAge = -1 session.Save(r, w) } w.Header().Set("Content-Type", "application/json") w.Write([]byte("true")) })
URL: DELETE /api/session
Functions ¶
func CollectHandler ¶
func CollectHandler(w http.ResponseWriter, r *http.Request)
Types ¶
Click to show internal directories.
Click to hide internal directories.