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) results := count.Browsers(before, after, getRequestedLimit(r)) respond(w, envelope{Data: results}) })
URL: /api/browsers
View Source
var GetLanguagesHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) results := count.Languages(before, after, getRequestedLimit(r)) respond(w, envelope{Data: 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) respond(w, envelope{Data: result}) })
URL: /api/pageviews/count
View Source
var GetPageviewsHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) stmt, err := datastore.DB.Prepare(` SELECT p.hostname, p.path, SUM(t.count) AS count, SUM(t.count_unique) AS count_unique FROM total_pageviews t LEFT JOIN pages p ON p.id = t.page_id WHERE UNIX_TIMESTAMP(t.date) <= ? AND UNIX_TIMESTAMP(t.date) >= ? GROUP BY p.path, p.hostname ORDER BY count DESC LIMIT ?`) checkError(err) defer stmt.Close() rows, err := stmt.Query(before, after, defaultLimit) checkError(err) defer rows.Close() results := make([]pageviews, 0) for rows.Next() { var p pageviews err = rows.Scan(&p.Hostname, &p.Path, &p.Count, &p.CountUnique) checkError(err) results = append(results, p) } err = rows.Err() checkError(err) respond(w, envelope{Data: 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) respond(w, envelope{Data: results}) })
URL: /api/pageviews/group/day
View Source
var GetReferrersHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) results := count.Referrers(before, after, getRequestedLimit(r)) respond(w, envelope{Data: results}) })
URL: /api/referrers
View Source
var GetScreenResolutionsHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { before, after := getRequestedPeriods(r) results := count.Screens(before, after, getRequestedLimit(r)) respond(w, envelope{Data: 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) respond(w, envelope{Data: 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) respond(w, envelope{Data: results}) })
URL: /api/visitors/count/group/:period
View Source
var GetVisitorsRealtimeCountHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { result := count.RealtimeVisitors() respond(w, envelope{Data: result}) })
URL: /api/visitors/count/realtime
View Source
var LoginHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // check login creds var l login json.NewDecoder(r.Body).Decode(&l) u, err := datastore.GetUserByEmail(l.Email) if err != nil || bcrypt.CompareHashAndPassword([]byte(u.HashedPassword), []byte(l.Password)) != nil { w.WriteHeader(http.StatusUnauthorized) respond(w, envelope{Error: "invalid_credentials"}) return } session, _ := store.Get(r, "auth") session.Values["user_id"] = u.ID err = session.Save(r, w) checkError(err) respond(w, envelope{Data: 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) } respond(w, envelope{Data: true}) })
URL: DELETE /api/session
Functions ¶
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.