diff --git a/assets/src/js/components/Chart.js b/assets/src/js/components/Chart.js index 6c5fece5..12b40448 100644 --- a/assets/src/js/components/Chart.js +++ b/assets/src/js/components/Chart.js @@ -249,7 +249,7 @@ class Chart extends Component { fetchData(props) { this.setState({ loading: true }) - Client.request(`/sites/${props.siteId}/stats/site/groupby/day?before=${props.before}&after=${props.after}`) + Client.request(`/sites/${props.siteId}/stats/site?before=${props.before}&after=${props.after}`) .then((d) => { // request finished; check if params changed in the meantime if( this.paramsChanged(props, this.props)) { diff --git a/assets/src/js/components/Sidebar.js b/assets/src/js/components/Sidebar.js index 30127b95..f6fd5de9 100644 --- a/assets/src/js/components/Sidebar.js +++ b/assets/src/js/components/Sidebar.js @@ -32,7 +32,7 @@ class Sidebar extends Component { fetchData(props) { this.setState({ loading: true }) - Client.request(`/sites/${props.siteId}/stats/site?before=${props.before}&after=${props.after}`) + Client.request(`/sites/${props.siteId}/stats/site/agg?before=${props.before}&after=${props.after}`) .then((data) => { // request finished; check if timestamp range is still the one user wants to see if(this.paramsChanged(props, this.props)) { diff --git a/assets/src/js/components/Table.js b/assets/src/js/components/Table.js index c1601b66..7c3fbf3f 100644 --- a/assets/src/js/components/Table.js +++ b/assets/src/js/components/Table.js @@ -37,7 +37,7 @@ class Table extends Component { fetchData(props) { this.setState({ loading: true }); - Client.request(`/sites/${props.siteId}/${props.endpoint}?before=${props.before}&after=${props.after}&limit=${this.state.limit}`) + Client.request(`/sites/${props.siteId}/stats/${props.endpoint}/agg?before=${props.before}&after=${props.after}&limit=${this.state.limit}`) .then((d) => { // request finished; check if timestamp range is still the one user wants to see if( this.paramsChanged(props, this.props) ) { @@ -51,7 +51,7 @@ class Table extends Component { }); // fetch totals too - Client.request(`/sites/${props.siteId}/${props.endpoint}/pageviews?before=${props.before}&after=${props.after}`) + Client.request(`/sites/${props.siteId}/stats/${props.endpoint}/agg/pageviews?before=${props.before}&after=${props.after}`) .then((d) => { this.setState({ total: d diff --git a/assets/src/js/pages/dashboard.js b/assets/src/js/pages/dashboard.js index 4a15f5f5..d42144f3 100644 --- a/assets/src/js/pages/dashboard.js +++ b/assets/src/js/pages/dashboard.js @@ -172,10 +172,10 @@ class Dashboard extends Component {
- +
-
+
diff --git a/pkg/api/page_stats.go b/pkg/api/page_stats.go index 0176acfb..9712b89b 100644 --- a/pkg/api/page_stats.go +++ b/pkg/api/page_stats.go @@ -4,17 +4,17 @@ import ( "net/http" ) -// URL: /api/stats/page -func (api *API) GetPageStatsHandler(w http.ResponseWriter, r *http.Request) error { +// URL: /api/sites/{id:[0-9]+}/stats/pages/agg +func (api *API) GetAggregatedPageStatsHandler(w http.ResponseWriter, r *http.Request) error { params := GetRequestParams(r) - result, err := api.database.GetAggregatedPageStats(params.SiteID, params.StartDate, params.EndDate, params.Limit) + result, err := api.database.SelectAggregatedPageStats(params.SiteID, params.StartDate, params.EndDate, params.Limit) if err != nil { return err } return respond(w, http.StatusOK, envelope{Data: result}) } -func (api *API) GetPageStatsPageviewsHandler(w http.ResponseWriter, r *http.Request) error { +func (api *API) GetAggregatedPageStatsPageviewsHandler(w http.ResponseWriter, r *http.Request) error { params := GetRequestParams(r) result, err := api.database.GetAggregatedPageStatsPageviews(params.SiteID, params.StartDate, params.EndDate) if err != nil { diff --git a/pkg/api/referrer_stats.go b/pkg/api/referrer_stats.go index c32feca2..694ad186 100644 --- a/pkg/api/referrer_stats.go +++ b/pkg/api/referrer_stats.go @@ -4,18 +4,16 @@ import ( "net/http" ) -// URL: /api/stats/referrer -func (api *API) GetReferrerStatsHandler(w http.ResponseWriter, r *http.Request) error { +func (api *API) GetAggregatedReferrerStatsHandler(w http.ResponseWriter, r *http.Request) error { params := GetRequestParams(r) - result, err := api.database.GetAggregatedReferrerStats(params.SiteID, params.StartDate, params.EndDate, params.Limit) + result, err := api.database.SelectAggregatedReferrerStats(params.SiteID, params.StartDate, params.EndDate, params.Limit) if err != nil { return err } return respond(w, http.StatusOK, envelope{Data: result}) } -// URL: /api/stats/referrer/pageviews -func (api *API) GetReferrerStatsPageviewsHandler(w http.ResponseWriter, r *http.Request) error { +func (api *API) GetAggregatedReferrerStatsPageviewsHandler(w http.ResponseWriter, r *http.Request) error { params := GetRequestParams(r) result, err := api.database.GetAggregatedReferrerStatsPageviews(params.SiteID, params.StartDate, params.EndDate) if err != nil { diff --git a/pkg/api/routes.go b/pkg/api/routes.go index 9629274b..5e1fe4f7 100644 --- a/pkg/api/routes.go +++ b/pkg/api/routes.go @@ -22,14 +22,14 @@ func (api *API) Routes() *mux.Router { r.Handle("/api/sites/{id:[0-9]+}", api.Authorize(HandlerFunc(api.DeleteSiteHandler))).Methods(http.MethodDelete) r.Handle("/api/sites/{id:[0-9]+}/stats/site", api.Authorize(HandlerFunc(api.GetSiteStatsHandler))).Methods(http.MethodGet) - r.Handle("/api/sites/{id:[0-9]+}/stats/site/groupby/day", api.Authorize(HandlerFunc(api.GetSiteStatsPerDayHandler))).Methods(http.MethodGet) + r.Handle("/api/sites/{id:[0-9]+}/stats/site/agg", api.Authorize(HandlerFunc(api.GetAggregatedSiteStatsHandler))).Methods(http.MethodGet) r.Handle("/api/sites/{id:[0-9]+}/stats/site/realtime", api.Authorize(HandlerFunc(api.GetSiteStatsRealtimeHandler))).Methods(http.MethodGet) - r.Handle("/api/sites/{id:[0-9]+}/stats/pages", api.Authorize(HandlerFunc(api.GetPageStatsHandler))).Methods(http.MethodGet) - r.Handle("/api/sites/{id:[0-9]+}/stats/pages/pageviews", api.Authorize(HandlerFunc(api.GetPageStatsPageviewsHandler))).Methods(http.MethodGet) + r.Handle("/api/sites/{id:[0-9]+}/stats/pages/agg", api.Authorize(HandlerFunc(api.GetAggregatedPageStatsHandler))).Methods(http.MethodGet) + r.Handle("/api/sites/{id:[0-9]+}/stats/pages/agg/pageviews", api.Authorize(HandlerFunc(api.GetAggregatedPageStatsPageviewsHandler))).Methods(http.MethodGet) - r.Handle("/api/sites/{id:[0-9]+}/stats/referrers", api.Authorize(HandlerFunc(api.GetReferrerStatsHandler))).Methods(http.MethodGet) - r.Handle("/api/sites/{id:[0-9]+}/stats/referrers/pageviews", api.Authorize(HandlerFunc(api.GetReferrerStatsPageviewsHandler))).Methods(http.MethodGet) + r.Handle("/api/sites/{id:[0-9]+}/stats/referrers/agg", api.Authorize(HandlerFunc(api.GetAggregatedReferrerStatsHandler))).Methods(http.MethodGet) + r.Handle("/api/sites/{id:[0-9]+}/stats/referrers/agg/pageviews", api.Authorize(HandlerFunc(api.GetAggregatedReferrerStatsPageviewsHandler))).Methods(http.MethodGet) r.Handle("/health", HandlerFunc(api.Health)).Methods(http.MethodGet) diff --git a/pkg/api/site_stats.go b/pkg/api/site_stats.go index d6275cd1..8e05ac05 100644 --- a/pkg/api/site_stats.go +++ b/pkg/api/site_stats.go @@ -4,8 +4,8 @@ import ( "net/http" ) -// URL: /api/stats/site -func (api *API) GetSiteStatsHandler(w http.ResponseWriter, r *http.Request) error { +// URL: /api/sites/{id:[0-9]+}/stats/site/agg +func (api *API) GetAggregatedSiteStatsHandler(w http.ResponseWriter, r *http.Request) error { params := GetRequestParams(r) result, err := api.database.GetAggregatedSiteStats(params.SiteID, params.StartDate, params.EndDate) if err != nil { @@ -14,7 +14,7 @@ func (api *API) GetSiteStatsHandler(w http.ResponseWriter, r *http.Request) erro return respond(w, http.StatusOK, envelope{Data: result}) } -// URL: /api/stats/site/realtime +// URL: /api/sites/{id:[0-9]+}/stats/site/realtime func (api *API) GetSiteStatsRealtimeHandler(w http.ResponseWriter, r *http.Request) error { params := GetRequestParams(r) result, err := api.database.GetRealtimeVisitorCount(params.SiteID) @@ -24,10 +24,10 @@ func (api *API) GetSiteStatsRealtimeHandler(w http.ResponseWriter, r *http.Reque return respond(w, http.StatusOK, envelope{Data: result}) } -// URL: /api/stats/site/groupby/day -func (api *API) GetSiteStatsPerDayHandler(w http.ResponseWriter, r *http.Request) error { +// URL: /api/sites/{id:[0-9]+}/stats/site +func (api *API) GetSiteStatsHandler(w http.ResponseWriter, r *http.Request) error { params := GetRequestParams(r) - result, err := api.database.GetSiteStatsPerDay(params.SiteID, params.StartDate, params.EndDate) + result, err := api.database.SelectSiteStats(params.SiteID, params.StartDate, params.EndDate) if err != nil { return err } diff --git a/pkg/datastore/datastore.go b/pkg/datastore/datastore.go index 530dff8f..42d50b8c 100644 --- a/pkg/datastore/datastore.go +++ b/pkg/datastore/datastore.go @@ -27,10 +27,10 @@ type Datastore interface { // site stats GetSiteStats(int64, time.Time) (*models.SiteStats, error) - GetSiteStatsPerDay(int64, time.Time, time.Time) ([]*models.SiteStats, error) - SaveSiteStats(*models.SiteStats) error GetAggregatedSiteStats(int64, time.Time, time.Time) (*models.SiteStats, error) + SelectSiteStats(int64, time.Time, time.Time) ([]*models.SiteStats, error) GetRealtimeVisitorCount(int64) (int64, error) + SaveSiteStats(*models.SiteStats) error // pageviews InsertPageviews([]*models.Pageview) error @@ -42,13 +42,13 @@ type Datastore interface { // page stats GetPageStats(int64, time.Time, int64, int64) (*models.PageStats, error) SavePageStats(*models.PageStats) error - GetAggregatedPageStats(int64, time.Time, time.Time, int64) ([]*models.PageStats, error) + SelectAggregatedPageStats(int64, time.Time, time.Time, int64) ([]*models.PageStats, error) GetAggregatedPageStatsPageviews(int64, time.Time, time.Time) (int64, error) // referrer stats GetReferrerStats(int64, time.Time, int64, int64) (*models.ReferrerStats, error) SaveReferrerStats(*models.ReferrerStats) error - GetAggregatedReferrerStats(int64, time.Time, time.Time, int64) ([]*models.ReferrerStats, error) + SelectAggregatedReferrerStats(int64, time.Time, time.Time, int64) ([]*models.ReferrerStats, error) GetAggregatedReferrerStatsPageviews(int64, time.Time, time.Time) (int64, error) // hostnames diff --git a/pkg/datastore/sqlstore/page_stats.go b/pkg/datastore/sqlstore/page_stats.go index edbd944d..cb682cb3 100644 --- a/pkg/datastore/sqlstore/page_stats.go +++ b/pkg/datastore/sqlstore/page_stats.go @@ -38,7 +38,7 @@ func (db *sqlstore) updatePageStats(s *models.PageStats) error { return err } -func (db *sqlstore) GetAggregatedPageStats(siteID int64, startDate time.Time, endDate time.Time, limit int64) ([]*models.PageStats, error) { +func (db *sqlstore) SelectAggregatedPageStats(siteID int64, startDate time.Time, endDate time.Time, limit int64) ([]*models.PageStats, error) { var result []*models.PageStats query := db.Rebind(`SELECT h.name AS hostname, @@ -60,7 +60,7 @@ func (db *sqlstore) GetAggregatedPageStats(siteID int64, startDate time.Time, en func (db *sqlstore) GetAggregatedPageStatsPageviews(siteID int64, startDate time.Time, endDate time.Time) (int64, error) { var result int64 - query := db.Rebind(`SELECT COALESCE(SUM(pageviews), 0) FROM page_stats WHERE site_id = ? AND ts >= ? AND ts <= ?`) + query := db.Rebind(`SELECT SUM(pageviews) FROM page_stats WHERE site_id = ? AND ts >= ? AND ts <= ?`) err := db.Get(&result, query, siteID, startDate.Format(DATE_FORMAT), endDate.Format(DATE_FORMAT)) return result, err } diff --git a/pkg/datastore/sqlstore/referrer_stats.go b/pkg/datastore/sqlstore/referrer_stats.go index 68aefebd..8bef554c 100644 --- a/pkg/datastore/sqlstore/referrer_stats.go +++ b/pkg/datastore/sqlstore/referrer_stats.go @@ -38,7 +38,7 @@ func (db *sqlstore) updateReferrerStats(s *models.ReferrerStats) error { return err } -func (db *sqlstore) GetAggregatedReferrerStats(siteID int64, startDate time.Time, endDate time.Time, limit int64) ([]*models.ReferrerStats, error) { +func (db *sqlstore) SelectAggregatedReferrerStats(siteID int64, startDate time.Time, endDate time.Time, limit int64) ([]*models.ReferrerStats, error) { var result []*models.ReferrerStats sql := `SELECT @@ -69,7 +69,7 @@ func (db *sqlstore) GetAggregatedReferrerStats(siteID int64, startDate time.Time func (db *sqlstore) GetAggregatedReferrerStatsPageviews(siteID int64, startDate time.Time, endDate time.Time) (int64, error) { var result int64 - query := db.Rebind(`SELECT COALESCE(SUM(pageviews), 0) FROM referrer_stats WHERE site_id = ? AND ts >= ? AND ts <= ?`) + query := db.Rebind(`SELECT SUM(pageviews) FROM referrer_stats WHERE site_id = ? AND ts >= ? AND ts <= ?`) err := db.Get(&result, query, siteID, startDate.Format(DATE_FORMAT), endDate.Format(DATE_FORMAT)) return result, mapError(err) } diff --git a/pkg/datastore/sqlstore/site_stats.go b/pkg/datastore/sqlstore/site_stats.go index 120e98d2..310b58bb 100644 --- a/pkg/datastore/sqlstore/site_stats.go +++ b/pkg/datastore/sqlstore/site_stats.go @@ -40,7 +40,7 @@ func (db *sqlstore) updateSiteStats(s *models.SiteStats) error { return err } -func (db *sqlstore) GetSiteStatsPerDay(siteID int64, startDate time.Time, endDate time.Time) ([]*models.SiteStats, error) { +func (db *sqlstore) SelectSiteStats(siteID int64, startDate time.Time, endDate time.Time) ([]*models.SiteStats, error) { results := []*models.SiteStats{} query := db.Rebind(`SELECT * FROM site_stats diff --git a/pkg/models/page_stats.go b/pkg/models/page_stats.go index ddbb70af..ef59e9d9 100644 --- a/pkg/models/page_stats.go +++ b/pkg/models/page_stats.go @@ -6,7 +6,7 @@ import ( type PageStats struct { New bool `db:"-" json:"-"` - SiteID int64 `db:"site_id"` + SiteID int64 `db:"site_id" json:"-"` HostnameID int64 `db:"hostname_id" json:"-"` PathnameID int64 `db:"pathname_id" json:"-"` Hostname string `db:"hostname"` diff --git a/pkg/models/referrer_stats.go b/pkg/models/referrer_stats.go index cccb763a..c4a90957 100644 --- a/pkg/models/referrer_stats.go +++ b/pkg/models/referrer_stats.go @@ -6,7 +6,7 @@ import ( type ReferrerStats struct { New bool `db:"-" json:"-"` - SiteID int64 `db:"site_id"` + SiteID int64 `db:"site_id" json:"-"` HostnameID int64 `db:"hostname_id" json:"-"` PathnameID int64 `db:"pathname_id" json:"-"` Hostname string `db:"hostname"` diff --git a/pkg/models/site_stats.go b/pkg/models/site_stats.go index ad2cbe48..2df12e17 100644 --- a/pkg/models/site_stats.go +++ b/pkg/models/site_stats.go @@ -7,7 +7,7 @@ import ( type SiteStats struct { New bool `db:"-" json:"-" ` - SiteID int64 `db:"site_id"` + SiteID int64 `db:"site_id" json:"-"` Visitors int64 `db:"visitors"` Pageviews int64 `db:"pageviews"` Sessions int64 `db:"sessions"`