api

package
v0.0.0-...-4468b70 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2016 License: MIT Imports: 14 Imported by: 0

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 Authorize

func Authorize(next http.Handler) http.Handler

middleware

func CollectHandler

func CollectHandler(w http.ResponseWriter, r *http.Request)

Types

type Login

type Login struct {
	Email    string `json:"email"`
	Password string `json:"password"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL