🧮 Return total count in get metrics query (#2230)

* Return total count in get metrics query

* Fix RPC issue

* Fix vendor checks

* Update version
This commit is contained in:
Shivek Khurana 2021-05-21 14:04:28 +05:30 committed by GitHub
parent d50fee6bb2
commit beacc3233c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 9 deletions

View File

@ -1 +1 @@
0.79.0 0.79.1

View File

@ -28,6 +28,11 @@ type AppMetricValidationError struct {
Errors []gojsonschema.ResultError Errors []gojsonschema.ResultError
} }
type Page struct {
AppMetrics []AppMetric
TotalCount int
}
const ( const (
// status-react navigation events // status-react navigation events
NavigateTo AppMetricEventType = "navigate-to" NavigateTo AppMetricEventType = "navigate-to"
@ -140,13 +145,18 @@ func (db *Database) SaveAppMetrics(appMetrics []AppMetric, sessionID string) (er
return return
} }
func (db *Database) GetAppMetrics(limit int, offset int) (appMetrics []AppMetric, err error) { func (db *Database) GetAppMetrics(limit int, offset int) (page Page, err error) {
rows, err := db.db.Query("SELECT event, value, app_version, operating_system, session_id, created_at FROM app_metrics LIMIT ? OFFSET ?", limit, offset) countErr := db.db.QueryRow("SELECT count(*) FROM app_metrics").Scan(&page.TotalCount)
if countErr != nil {
return page, countErr
}
rows, err := db.db.Query("SELECT event, value, app_version, operating_system, session_id, created_at FROM app_metrics LIMIT ? OFFSET ?", limit, offset)
if err != nil { if err != nil {
return nil, err return page, err
} }
defer rows.Close() defer rows.Close()
for rows.Next() { for rows.Next() {
metric := AppMetric{} metric := AppMetric{}
err := rows.Scan( err := rows.Scan(
@ -155,9 +165,9 @@ func (db *Database) GetAppMetrics(limit int, offset int) (appMetrics []AppMetric
&metric.SessionID, &metric.CreatedAt, &metric.SessionID, &metric.CreatedAt,
) )
if err != nil { if err != nil {
return nil, err return page, err
} }
appMetrics = append(appMetrics, metric) page.AppMetrics = append(page.AppMetrics, metric)
} }
return appMetrics, nil return page, nil
} }

View File

@ -37,11 +37,14 @@ func TestSaveAppMetrics(t *testing.T) {
err := db.SaveAppMetrics(appMetrics, sessionID) err := db.SaveAppMetrics(appMetrics, sessionID)
require.NoError(t, err) require.NoError(t, err)
res, err := db.GetAppMetrics(10, 0) appMetricsPage, err := db.GetAppMetrics(10, 0)
res := appMetricsPage.AppMetrics
count := appMetricsPage.TotalCount
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, appMetrics[0].Event, res[0].Event) require.Equal(t, appMetrics[0].Event, res[0].Event)
require.Equal(t, appMetrics[0].Value, res[0].Value) require.Equal(t, appMetrics[0].Value, res[0].Value)
require.Equal(t, appMetrics[0].OS, res[0].OS) require.Equal(t, appMetrics[0].OS, res[0].OS)
require.Equal(t, appMetrics[0].AppVersion, res[0].AppVersion) require.Equal(t, appMetrics[0].AppVersion, res[0].AppVersion)
require.NotNil(t, res[0].CreatedAt) require.NotNil(t, res[0].CreatedAt)
require.Equal(t, count, 1)
} }

View File

@ -28,7 +28,7 @@ func (api *API) SaveAppMetrics(ctx context.Context, appMetrics []appmetrics.AppM
return api.db.SaveAppMetrics(appMetrics, api.sessionID) return api.db.SaveAppMetrics(appMetrics, api.sessionID)
} }
func (api *API) GetAppMetrics(ctx context.Context, limit int, offset int) ([]appmetrics.AppMetric, error) { func (api *API) GetAppMetrics(ctx context.Context, limit int, offset int) (appmetrics.Page, error) {
log.Debug("[AppMetricsAPI::GetAppMetrics]") log.Debug("[AppMetricsAPI::GetAppMetrics]")
return api.db.GetAppMetrics(limit, offset) return api.db.GetAppMetrics(limit, offset)
} }