2016-11-21 17:36:25 +01:00
package api
import (
"net/http"
"github.com/dannyvankooten/ana/models"
"github.com/dannyvankooten/ana/core"
"encoding/json"
)
// URL: /api/pageviews
2016-11-22 22:33:50 +01:00
var GetPageviewsHandler = http . HandlerFunc ( func ( w http . ResponseWriter , r * http . Request ) {
2016-11-24 14:18:40 +01:00
period := getRequestedPeriod ( r )
2016-11-21 17:36:25 +01:00
stmt , err := core . DB . Prepare ( ` SELECT
path ,
2016-11-22 17:03:29 +01:00
COUNT ( ip_address ) AS pageviews ,
COUNT ( DISTINCT ( ip_address ) ) AS pageviews_unique
2016-11-21 17:36:25 +01:00
FROM visits
2016-11-23 21:29:54 +01:00
WHERE timestamp >= DATE_SUB ( CURRENT_TIMESTAMP , INTERVAL ? DAY )
2016-11-24 13:55:59 +01:00
GROUP BY path
2016-11-25 13:38:20 +01:00
ORDER BY pageviews DESC
LIMIT ? ` )
2016-11-21 17:36:25 +01:00
checkError ( err )
defer stmt . Close ( )
2016-11-25 13:38:20 +01:00
rows , err := stmt . Query ( period , defaultLimit )
2016-11-21 17:36:25 +01:00
checkError ( err )
2016-11-24 14:18:40 +01:00
defer rows . Close ( )
2016-11-21 17:36:25 +01:00
results := make ( [ ] models . Pageview , 0 )
for rows . Next ( ) {
var p models . Pageview
2016-11-22 17:03:29 +01:00
err = rows . Scan ( & p . Path , & p . Count , & p . CountUnique ) ;
2016-11-21 17:36:25 +01:00
checkError ( err )
results = append ( results , p )
}
err = rows . Err ( ) ;
checkError ( err )
w . Header ( ) . Set ( "Content-Type" , "application/json" )
json . NewEncoder ( w ) . Encode ( results )
2016-11-22 22:33:50 +01:00
} )
2016-11-23 20:30:09 +01:00
2016-11-26 15:39:29 +01:00
// URL: /api/pageviews/count
var GetPageviewsCountHandler = http . HandlerFunc ( func ( w http . ResponseWriter , r * http . Request ) {
period := getRequestedPeriod ( r )
stmt , err := core . DB . Prepare ( ` SELECT COUNT(*) FROM visits WHERE timestamp >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL ? day) AND timestamp <= CURRENT_TIMESTAMP ` )
checkError ( err )
defer stmt . Close ( )
var result int
stmt . QueryRow ( period ) . Scan ( & result )
w . Header ( ) . Set ( "Content-Type" , "application/json" )
json . NewEncoder ( w ) . Encode ( result )
} )
2016-11-23 20:30:09 +01:00
// URL: /api/pageviews/count/day
var GetPageviewsDayCountHandler = http . HandlerFunc ( func ( w http . ResponseWriter , r * http . Request ) {
2016-11-24 14:18:40 +01:00
period := getRequestedPeriod ( r )
2016-11-23 20:30:09 +01:00
stmt , err := core . DB . Prepare ( ` SELECT
COUNT ( * ) AS count , DATE_FORMAT ( timestamp , ' % Y - % m - % d ' ) AS date_group
FROM visits
2016-11-23 21:29:54 +01:00
WHERE timestamp >= DATE_SUB ( CURRENT_TIMESTAMP , INTERVAL ? DAY )
2016-11-23 20:30:09 +01:00
GROUP BY date_group ` )
checkError ( err )
defer stmt . Close ( )
2016-11-23 21:29:54 +01:00
rows , err := stmt . Query ( period )
2016-11-23 20:30:09 +01:00
checkError ( err )
2016-11-24 14:18:40 +01:00
defer rows . Close ( )
2016-11-23 20:30:09 +01:00
results := make ( [ ] Datapoint , 0 )
for rows . Next ( ) {
v := Datapoint { }
err = rows . Scan ( & v . Count , & v . Label ) ;
checkError ( err )
results = append ( results , v )
}
2016-11-23 22:26:47 +01:00
results = fillDatapoints ( period , results )
2016-11-23 20:30:09 +01:00
w . Header ( ) . Set ( "Content-Type" , "application/json" )
json . NewEncoder ( w ) . Encode ( results )
} )