diff --git a/README.md b/README.md index 3de013f..db6b191 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,8 @@ The following filters are available: `ua`: filter user agents containing the string provided, so `Firefox` filters out all user agents that don't contain `Firefox` +`bots`: filter out bots (`0`) or show only bots (`1`) + `ordercol`: column to use for ordering, `first` for the data groups, `second` for the view counts `order`: select whether to use ascending order (`ASC`) or descending order (`DESC`) @@ -120,7 +122,7 @@ KISSS has a feature that can send you daily reports. It basically requests the s // Email configuration "name": "Daily stats from KISSS", "time": "15:00", - "query": "view=pages&ordercol=second&order=desc", + "query": "view=pages&bots=0&ordercol=second&order=desc", "from": "myemailaddress@mydomain.tld", "to": "myemailaddress@mydomain.tld" }, @@ -129,7 +131,7 @@ KISSS has a feature that can send you daily reports. It basically requests the s "name": "Daily stats from KISSS", "type": "telegram", // Add this for Telegram "time": "15:00", - "query": "view=pages&ordercol=second&order=desc", + "query": "view=pages&bots=0&ordercol=second&order=desc", "tgUserId": 123456 }, { diff --git a/database.go b/database.go index 816fce6..d602aa2 100644 --- a/database.go +++ b/database.go @@ -105,6 +105,7 @@ type ViewsRequest struct { ordercol string order string limit string + bots string } type RequestResultRow struct { @@ -214,6 +215,7 @@ func (request *ViewsRequest) buildFilter() (filters string, parameters []sql.Nam request.buildUrlFilter(¶meters), request.buildRefFilter(¶meters), request.buildUseragentFilter(¶meters), + request.buildBotFilter(¶meters), } { if len(filter) > 0 { allFilters = append(allFilters, filter) @@ -269,10 +271,20 @@ func (request *ViewsRequest) buildRefFilter(namedArg *[]sql.NamedArg) (refFilter return } -func (request *ViewsRequest) buildUseragentFilter(namedArg *[]sql.NamedArg) (refFilter string) { +func (request *ViewsRequest) buildUseragentFilter(namedArg *[]sql.NamedArg) (uaFilter string) { if len(request.ua) > 0 { *namedArg = append(*namedArg, sql.Named("ua", "%"+request.ua+"%")) - refFilter = "useragent like :ua" + uaFilter = "useragent like :ua" + } + return +} + +func (request *ViewsRequest) buildBotFilter(namedArg *[]sql.NamedArg) (botFilter string) { + if len(request.bots) > 0 { + if request.bots == "0" || request.bots == "1" { + *namedArg = append(*namedArg, sql.Named("bot", request.bots)) + } + botFilter = "bot like :bot" } return } diff --git a/go.mod b/go.mod index 579820b..0fd14b4 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/whiteshtef/clockwork v0.0.0-20190417075149-ecf7d9abe8ec github.com/ziutek/mymysql v1.5.4 // indirect golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect - golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 // indirect + golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3 // indirect google.golang.org/appengine v1.6.1 // indirect gopkg.in/gorp.v1 v1.7.2 // indirect ) diff --git a/go.sum b/go.sum index faceb6d..2bd0f9a 100644 --- a/go.sum +++ b/go.sum @@ -111,8 +111,8 @@ golang.org/x/sys v0.0.0-20190515120540-06a5c4944438 h1:khxRGsvPk4n2y8I/mLLjp7e5d golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c h1:+EXw7AwNOKzPFXMZ1yNjO40aWCh3PIquJB2fYlv9wcs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3 h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/stats.go b/stats.go index b880096..66b94a3 100644 --- a/stats.go +++ b/stats.go @@ -81,6 +81,7 @@ func doRequest(queries url.Values) (result []*RequestResultRow, e error) { ordercol: strings.ToLower(queries.Get("ordercol")), order: strings.ToUpper(queries.Get("order")), limit: queries.Get("limit"), + bots: queries.Get("bots"), }) return }