Track browser and browser version
This commit is contained in:
parent
f3f0a8637c
commit
74b4285601
10
database.go
10
database.go
|
@ -5,6 +5,7 @@ import (
|
|||
"fmt"
|
||||
"github.com/gobuffalo/packr/v2"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"github.com/mssola/user_agent"
|
||||
"github.com/rubenv/sql-migrate"
|
||||
"net/url"
|
||||
"os"
|
||||
|
@ -39,7 +40,7 @@ func migrateDatabase(database *sql.DB) (e error) {
|
|||
|
||||
// Tracking
|
||||
|
||||
func (db *Database) trackView(urlString string, ref string) {
|
||||
func (db *Database) trackView(urlString string, ref string, ua string) {
|
||||
if len(urlString) == 0 {
|
||||
// Don't track empty urls
|
||||
return
|
||||
|
@ -49,7 +50,12 @@ func (db *Database) trackView(urlString string, ref string) {
|
|||
parsedRef, _ := url.Parse(ref)
|
||||
ref = parsedRef.Hostname()
|
||||
}
|
||||
_, e := db.sqlDB.Exec("insert into views(url, ref) values(:url, :ref)", sql.Named("url", urlString), sql.Named("ref", ref))
|
||||
if ua != "" {
|
||||
// Parse Useragent
|
||||
uaName, uaVersion := user_agent.New(ua).Browser()
|
||||
ua = uaName + " " + uaVersion
|
||||
}
|
||||
_, e := db.sqlDB.Exec("insert into views(url, ref, useragent) values(:url, :ref, :ua)", sql.Named("url", urlString), sql.Named("ref", ref), sql.Named("ua", ua))
|
||||
if e != nil {
|
||||
fmt.Println("Inserting into DB failed:", e)
|
||||
}
|
||||
|
|
1
go.mod
1
go.mod
|
@ -8,6 +8,7 @@ require (
|
|||
github.com/gorilla/handlers v1.4.0
|
||||
github.com/gorilla/mux v1.7.1
|
||||
github.com/mattn/go-sqlite3 v1.10.0
|
||||
github.com/mssola/user_agent v0.5.0
|
||||
github.com/rubenv/sql-migrate v0.0.0-20190327083759-54bad0a9b051
|
||||
github.com/wcharczuk/go-chart v2.0.1+incompatible
|
||||
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f // indirect
|
||||
|
|
2
go.sum
2
go.sum
|
@ -126,6 +126,8 @@ github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK86
|
|||
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mongodb/mongo-go-driver v0.1.0/go.mod h1:NK/HWDIIZkaYsnYa0hmtP443T5ELr0KDecmIioVuuyU=
|
||||
github.com/mssola/user_agent v0.5.0 h1:gRF7/x8cKt8qzAosYGsBNyirta+F8fvYDlJrgXws9AQ=
|
||||
github.com/mssola/user_agent v0.5.0/go.mod h1:UFiKPVaShrJGW93n4uo8dpPdg1BSVpw2P9bneo0Mtp8=
|
||||
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
||||
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
|
||||
|
|
3
main.go
3
main.go
|
@ -69,8 +69,9 @@ func (kis3 kis3) startListening() {
|
|||
func (kis3 kis3) trackView(w http.ResponseWriter, r *http.Request) {
|
||||
url := r.Header.Get("Referer") // URL of requesting source
|
||||
ref := r.URL.Query().Get("ref")
|
||||
ua := r.Header.Get("User-Agent")
|
||||
if !(r.Header.Get("DNT") == "1" && appConfig.dnt) {
|
||||
go kis3.db.trackView(url, ref) // run with goroutine for awesome speed!
|
||||
go kis3.db.trackView(url, ref, ua) // run with goroutine for awesome speed!
|
||||
_, _ = fmt.Fprint(w, "true")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
-- +migrate Up
|
||||
ALTER TABLE views
|
||||
ADD COLUMN useragent TEXT DEFAULT '' NOT NULL;
|
||||
|
||||
-- +migrate Down
|
||||
BEGIN TRANSACTION;
|
||||
CREATE TABLE views_new AS
|
||||
SELECT url, time, ref
|
||||
FROM views;
|
||||
DROP TABLE views;
|
||||
ALTER TABLE views_new
|
||||
RENAME TO views;
|
||||
COMMIT;
|
Reference in New Issue