Add "alldays" and "allhours" view
This commit is contained in:
parent
a20507100a
commit
23cce2ee3a
21
database.go
21
database.go
|
@ -74,6 +74,8 @@ const (
|
||||||
DAYS
|
DAYS
|
||||||
WEEKS
|
WEEKS
|
||||||
MONTHS
|
MONTHS
|
||||||
|
ALLHOURS
|
||||||
|
ALLDAYS
|
||||||
)
|
)
|
||||||
|
|
||||||
type ViewsRequest struct {
|
type ViewsRequest struct {
|
||||||
|
@ -152,6 +154,10 @@ func (request *ViewsRequest) buildStatement() (statement string, parameters []sq
|
||||||
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 + ";"
|
||||||
return
|
return
|
||||||
|
case ALLHOURS:
|
||||||
|
statement = "WITH RECURSIVE hours(hour) AS ( VALUES (datetime((SELECT min(time) from views), 'localtime', 'start of day')) UNION ALL SELECT datetime(hour, '+1 hour') FROM hours WHERE hour <= date((SELECT max(time) from views), '+1 day') ) SELECT strftime('%Y-%m-%d %H', hours.hour) as first, COUNT(views.time) as second FROM hours LEFT OUTER JOIN views ON strftime('%Y-%m-%d %H', hours.hour) = strftime('%Y-%m-%d %H', time, 'localtime')" + filters + "GROUP BY first" + orderstatement + ";"
|
||||||
|
case ALLDAYS:
|
||||||
|
statement = "WITH RECURSIVE days(day) AS ( VALUES (datetime((SELECT min(time) from views), 'localtime', 'start of day')) UNION ALL SELECT datetime(day, '+1 day') FROM days WHERE day <= date((SELECT max(time) from views), '+1 day') ) SELECT strftime('%Y-%m-%d', days.day) as first, COUNT(views.time) as second FROM days LEFT OUTER JOIN views ON strftime('%Y-%m-%d', days.day) = strftime('%Y-%m-%d', time, 'localtime')" + filters + "GROUP BY first" + orderstatement + ";"
|
||||||
case HOURS, DAYS, WEEKS, MONTHS:
|
case HOURS, DAYS, WEEKS, MONTHS:
|
||||||
format := ""
|
format := ""
|
||||||
switch request.view {
|
switch request.view {
|
||||||
|
@ -189,18 +195,23 @@ func (request *ViewsRequest) buildFilter() (filters string, parameters []sql.Nam
|
||||||
}
|
}
|
||||||
|
|
||||||
func (request *ViewsRequest) buildDateTimeFilter(namedArg *[]sql.NamedArg) (dateTimeFilter string) {
|
func (request *ViewsRequest) buildDateTimeFilter(namedArg *[]sql.NamedArg) (dateTimeFilter string) {
|
||||||
|
selector := ""
|
||||||
|
switch request.view {
|
||||||
|
case ALLHOURS, ALLDAYS:
|
||||||
|
selector = "first"
|
||||||
|
default:
|
||||||
|
selector = "datetime(time, 'localtime')"
|
||||||
|
}
|
||||||
if len(request.from) > 0 && len(request.to) > 0 {
|
if len(request.from) > 0 && len(request.to) > 0 {
|
||||||
*namedArg = append(*namedArg, sql.Named("from", request.from))
|
*namedArg = append(*namedArg, sql.Named("from", request.from))
|
||||||
*namedArg = append(*namedArg, sql.Named("to", request.to))
|
*namedArg = append(*namedArg, sql.Named("to", request.to))
|
||||||
dateTimeFilter = "datetime(time, 'localtime') between :from and :to"
|
dateTimeFilter = selector + " between :from and :to"
|
||||||
return
|
|
||||||
} else if len(request.from) > 0 {
|
} else if len(request.from) > 0 {
|
||||||
*namedArg = append(*namedArg, sql.Named("from", request.from))
|
*namedArg = append(*namedArg, sql.Named("from", request.from))
|
||||||
dateTimeFilter = "datetime(time, 'localtime') >= :from"
|
dateTimeFilter = selector + " >= :from"
|
||||||
return
|
|
||||||
} else if len(request.to) > 0 {
|
} else if len(request.to) > 0 {
|
||||||
*namedArg = append(*namedArg, sql.Named("to", request.to))
|
*namedArg = append(*namedArg, sql.Named("to", request.to))
|
||||||
dateTimeFilter = "datetime(time, 'localtime') <= :to"
|
dateTimeFilter = selector + " <= :to"
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
4
main.go
4
main.go
|
@ -124,6 +124,10 @@ func requestStats(w http.ResponseWriter, r *http.Request) {
|
||||||
view = WEEKS
|
view = WEEKS
|
||||||
case "months":
|
case "months":
|
||||||
view = MONTHS
|
view = MONTHS
|
||||||
|
case "allhours":
|
||||||
|
view = ALLHOURS
|
||||||
|
case "alldays":
|
||||||
|
view = ALLDAYS
|
||||||
}
|
}
|
||||||
result, e := app.db.request(&ViewsRequest{
|
result, e := app.db.request(&ViewsRequest{
|
||||||
view: view,
|
view: view,
|
||||||
|
|
Reference in New Issue