Add limit filter and rename orderrow to ordercol
Idk why I'm so stupid and confused rows and columns
This commit is contained in:
parent
18c5ff85b0
commit
4b004a803c
|
@ -64,10 +64,12 @@ 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`
|
`ua`: filter user agents containing the string provided, so `Firefox` filters out all user agents that don't contain `Firefox`
|
||||||
|
|
||||||
`orderrow`: row to use for ordering, `first` for the data groups, `second` for the view counts
|
`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`)
|
`order`: select whether to use ascending order (`ASC`) or descending order (`DESC`)
|
||||||
|
|
||||||
|
`limit`: limit the number of rows returned
|
||||||
|
|
||||||
`format`: the format to represent the data, default is `plain` for a simple plain text list, `json` for a JSON response or `chart` for a chart generated with ChartJS in the browser
|
`format`: the format to represent the data, default is `plain` for a simple plain text list, `json` for a JSON response or `chart` for a chart generated with ChartJS in the browser
|
||||||
|
|
||||||
## Daily email reports
|
## Daily email reports
|
||||||
|
|
26
database.go
26
database.go
|
@ -85,8 +85,9 @@ type ViewsRequest struct {
|
||||||
url string
|
url string
|
||||||
ref string
|
ref string
|
||||||
ua string
|
ua string
|
||||||
orderrow string
|
ordercol string
|
||||||
order string
|
order string
|
||||||
|
limit string
|
||||||
}
|
}
|
||||||
|
|
||||||
type RequestResultRow struct {
|
type RequestResultRow struct {
|
||||||
|
@ -134,26 +135,31 @@ func (request *ViewsRequest) buildStatement() (statement string, parameters []sq
|
||||||
}
|
}
|
||||||
orderrow := "first"
|
orderrow := "first"
|
||||||
order := "ASC"
|
order := "ASC"
|
||||||
if request.orderrow == "second" {
|
if request.ordercol == "second" {
|
||||||
orderrow = "second"
|
orderrow = "second"
|
||||||
}
|
}
|
||||||
if request.order == "DESC" {
|
if request.order == "DESC" {
|
||||||
order = "DESC"
|
order = "DESC"
|
||||||
}
|
}
|
||||||
orderstatement := " ORDER BY " + orderrow + " " + order
|
orderStatement := " ORDER BY " + orderrow + " " + order
|
||||||
|
limitStatement := ""
|
||||||
|
if len(request.limit) != 0 {
|
||||||
|
limitStatement = " LIMIT :limit"
|
||||||
|
parameters = append(parameters, sql.Named("limit", request.limit))
|
||||||
|
}
|
||||||
switch request.view {
|
switch request.view {
|
||||||
case PAGES:
|
case PAGES:
|
||||||
statement = "SELECT url as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
statement = "SELECT url as first, count(*) as second from views" + filters + "group by first" + orderStatement + limitStatement + ";"
|
||||||
case REFERRERS:
|
case REFERRERS:
|
||||||
statement = "SELECT ref as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
statement = "SELECT ref as first, count(*) as second from views" + filters + "group by first" + orderStatement + limitStatement + ";"
|
||||||
case USERAGENTS:
|
case USERAGENTS:
|
||||||
statement = "SELECT useragent as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
statement = "SELECT useragent as first, count(*) as second from views" + filters + "group by first" + orderStatement + limitStatement + ";"
|
||||||
case USERAGENTNAMES:
|
case USERAGENTNAMES:
|
||||||
statement = "SELECT substr(useragent, 1, pos-1) as first, COUNT(*) as second from (SELECT *, instr(useragent,' ') AS pos FROM views)" + filters + "group by first" + orderstatement + ";"
|
statement = "SELECT substr(useragent, 1, pos-1) as first, COUNT(*) as second from (SELECT *, instr(useragent,' ') AS pos FROM views)" + filters + "group by first" + orderStatement + limitStatement + ";"
|
||||||
case ALLHOURS:
|
case ALLHOURS:
|
||||||
statement = "WITH RECURSIVE hours(hour) AS ( VALUES (datetime(strftime('%Y-%m-%dT%H:00', (SELECT min(time) from views" + filters + "), 'localtime'))) UNION ALL SELECT datetime(hour, '+1 hour') FROM hours WHERE hour <= strftime('%Y-%m-%d %H', (SELECT max(time) from views" + filters + "), 'localtime') ) SELECT strftime('%Y-%m-%d %H', hours.hour) as first, COUNT(time) as second FROM hours LEFT OUTER JOIN (SELECT time from views" + filters + ") ON strftime('%Y-%m-%d %H', hours.hour) = strftime('%Y-%m-%d %H', time, 'localtime') GROUP BY first" + orderstatement + ";"
|
statement = "WITH RECURSIVE hours(hour) AS ( VALUES (datetime(strftime('%Y-%m-%dT%H:00', (SELECT min(time) from views" + filters + "), 'localtime'))) UNION ALL SELECT datetime(hour, '+1 hour') FROM hours WHERE hour <= strftime('%Y-%m-%d %H', (SELECT max(time) from views" + filters + "), 'localtime') ) SELECT strftime('%Y-%m-%d %H', hours.hour) as first, COUNT(time) as second FROM hours LEFT OUTER JOIN (SELECT time from views" + filters + ") ON strftime('%Y-%m-%d %H', hours.hour) = strftime('%Y-%m-%d %H', time, 'localtime') GROUP BY first" + orderStatement + limitStatement + ";"
|
||||||
case ALLDAYS:
|
case ALLDAYS:
|
||||||
statement = "WITH RECURSIVE days(day) AS ( VALUES (datetime((SELECT min(time) from views" + filters + "), 'localtime', 'start of day')) UNION ALL SELECT datetime(day, '+1 day') FROM days WHERE day <= date((SELECT max(time) from views" + filters + "), 'localtime') ) SELECT strftime('%Y-%m-%d', days.day) as first, COUNT(time) as second FROM days LEFT OUTER JOIN (SELECT time from views" + filters + ") ON strftime('%Y-%m-%d', days.day) = strftime('%Y-%m-%d', time, 'localtime') GROUP BY first" + orderstatement + ";"
|
statement = "WITH RECURSIVE days(day) AS ( VALUES (datetime((SELECT min(time) from views" + filters + "), 'localtime', 'start of day')) UNION ALL SELECT datetime(day, '+1 day') FROM days WHERE day <= date((SELECT max(time) from views" + filters + "), 'localtime') ) SELECT strftime('%Y-%m-%d', days.day) as first, COUNT(time) as second FROM days LEFT OUTER JOIN (SELECT time from views" + filters + ") ON strftime('%Y-%m-%d', days.day) = strftime('%Y-%m-%d', time, 'localtime') GROUP BY first" + orderStatement + limitStatement + ";"
|
||||||
case HOURS, DAYS, WEEKS, MONTHS:
|
case HOURS, DAYS, WEEKS, MONTHS:
|
||||||
format := ""
|
format := ""
|
||||||
switch request.view {
|
switch request.view {
|
||||||
|
@ -166,7 +172,7 @@ func (request *ViewsRequest) buildStatement() (statement string, parameters []sq
|
||||||
case MONTHS:
|
case MONTHS:
|
||||||
format = "%Y-%m"
|
format = "%Y-%m"
|
||||||
}
|
}
|
||||||
statement = "SELECT strftime('" + format + "', time, 'localtime') as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
statement = "SELECT strftime('" + format + "', time, 'localtime') as first, count(*) as second from views" + filters + "group by first" + orderStatement + limitStatement + ";"
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
3
main.go
3
main.go
|
@ -138,8 +138,9 @@ func StatsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
url: queries.Get("url"),
|
url: queries.Get("url"),
|
||||||
ref: queries.Get("ref"),
|
ref: queries.Get("ref"),
|
||||||
ua: queries.Get("ua"),
|
ua: queries.Get("ua"),
|
||||||
orderrow: strings.ToLower(queries.Get("orderrow")),
|
ordercol: strings.ToLower(queries.Get("ordercol")),
|
||||||
order: strings.ToUpper(queries.Get("order")),
|
order: strings.ToUpper(queries.Get("order")),
|
||||||
|
limit: queries.Get("limit"),
|
||||||
})
|
})
|
||||||
if e != nil {
|
if e != nil {
|
||||||
fmt.Println("Database request failed:", e)
|
fmt.Println("Database request failed:", e)
|
||||||
|
|
Reference in New Issue