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`
|
||||
|
||||
`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`)
|
||||
|
||||
`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
|
||||
|
||||
## Daily email reports
|
||||
|
|
26
database.go
26
database.go
|
@ -85,8 +85,9 @@ type ViewsRequest struct {
|
|||
url string
|
||||
ref string
|
||||
ua string
|
||||
orderrow string
|
||||
ordercol string
|
||||
order string
|
||||
limit string
|
||||
}
|
||||
|
||||
type RequestResultRow struct {
|
||||
|
@ -134,26 +135,31 @@ func (request *ViewsRequest) buildStatement() (statement string, parameters []sq
|
|||
}
|
||||
orderrow := "first"
|
||||
order := "ASC"
|
||||
if request.orderrow == "second" {
|
||||
if request.ordercol == "second" {
|
||||
orderrow = "second"
|
||||
}
|
||||
if request.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 {
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
format := ""
|
||||
switch request.view {
|
||||
|
@ -166,7 +172,7 @@ func (request *ViewsRequest) buildStatement() (statement string, parameters []sq
|
|||
case MONTHS:
|
||||
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
|
||||
}
|
||||
|
|
3
main.go
3
main.go
|
@ -138,8 +138,9 @@ func StatsHandler(w http.ResponseWriter, r *http.Request) {
|
|||
url: queries.Get("url"),
|
||||
ref: queries.Get("ref"),
|
||||
ua: queries.Get("ua"),
|
||||
orderrow: strings.ToLower(queries.Get("orderrow")),
|
||||
ordercol: strings.ToLower(queries.Get("ordercol")),
|
||||
order: strings.ToUpper(queries.Get("order")),
|
||||
limit: queries.Get("limit"),
|
||||
})
|
||||
if e != nil {
|
||||
fmt.Println("Database request failed:", e)
|
||||
|
|
Reference in New Issue
Block a user