diff --git a/app/analytics.go b/app/analytics.go index 33d2e7f725..94140700dd 100644 --- a/app/analytics.go +++ b/app/analytics.go @@ -206,7 +206,12 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo close(commandChan) }() - sessionChan := a.Srv.Store.Session().AnalyticsSessionCount() + sessionChan := make(chan store.StoreResult, 1) + go func() { + count, err := a.Srv.Store.Session().AnalyticsSessionCount() + sessionChan <- store.StoreResult{Data: count, Err: err} + close(sessionChan) + }() var fileChan store.StoreChannel var hashtagChan store.StoreChannel diff --git a/store/sqlstore/session_store.go b/store/sqlstore/session_store.go index c63abefbb0..4f949c7fef 100644 --- a/store/sqlstore/session_store.go +++ b/store/sqlstore/session_store.go @@ -206,21 +206,18 @@ func (me SqlSessionStore) UpdateDeviceId(id string, deviceId string, expiresAt i }) } -func (me SqlSessionStore) AnalyticsSessionCount() store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - query := - `SELECT - COUNT(*) - FROM - Sessions - WHERE ExpiresAt > :Time` - - if c, err := me.GetReplica().SelectInt(query, map[string]interface{}{"Time": model.GetMillis()}); err != nil { - result.Err = model.NewAppError("SqlSessionStore.AnalyticsSessionCount", "store.sql_session.analytics_session_count.app_error", nil, err.Error(), http.StatusInternalServerError) - } else { - result.Data = c - } - }) +func (me SqlSessionStore) AnalyticsSessionCount() (int64, *model.AppError) { + query := + `SELECT + COUNT(*) + FROM + Sessions + WHERE ExpiresAt > :Time` + count, err := me.GetReplica().SelectInt(query, map[string]interface{}{"Time": model.GetMillis()}) + if err != nil { + return int64(0), model.NewAppError("SqlSessionStore.AnalyticsSessionCount", "store.sql_session.analytics_session_count.app_error", nil, err.Error(), http.StatusInternalServerError) + } + return count, nil } func (me SqlSessionStore) Cleanup(expiryTime int64, batchSize int64) { diff --git a/store/store.go b/store/store.go index 8ac715c552..c39b15f208 100644 --- a/store/store.go +++ b/store/store.go @@ -322,7 +322,7 @@ type SessionStore interface { UpdateLastActivityAt(sessionId string, time int64) StoreChannel UpdateRoles(userId string, roles string) StoreChannel UpdateDeviceId(id string, deviceId string, expiresAt int64) StoreChannel - AnalyticsSessionCount() StoreChannel + AnalyticsSessionCount() (int64, *model.AppError) Cleanup(expiryTime int64, batchSize int64) } diff --git a/store/storetest/mocks/SessionStore.go b/store/storetest/mocks/SessionStore.go index 819ae948dc..7cc005e006 100644 --- a/store/storetest/mocks/SessionStore.go +++ b/store/storetest/mocks/SessionStore.go @@ -14,19 +14,26 @@ type SessionStore struct { } // AnalyticsSessionCount provides a mock function with given fields: -func (_m *SessionStore) AnalyticsSessionCount() store.StoreChannel { +func (_m *SessionStore) AnalyticsSessionCount() (int64, *model.AppError) { ret := _m.Called() - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func() store.StoreChannel); ok { + var r0 int64 + if rf, ok := ret.Get(0).(func() int64); ok { r0 = rf() } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).(int64) + } + + var r1 *model.AppError + if rf, ok := ret.Get(1).(func() *model.AppError); ok { + r1 = rf() + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) } } - return r0 + return r0, r1 } // Cleanup provides a mock function with given fields: expiryTime, batchSize diff --git a/store/storetest/session_store.go b/store/storetest/session_store.go index cf1db177da..5a69b215c4 100644 --- a/store/storetest/session_store.go +++ b/store/storetest/session_store.go @@ -245,10 +245,10 @@ func testSessionCount(t *testing.T, ss store.Store) { s1.ExpiresAt = model.GetMillis() + 100000 store.Must(ss.Session().Save(&s1)) - if r1 := <-ss.Session().AnalyticsSessionCount(); r1.Err != nil { - t.Fatal(r1.Err) + if count, err := ss.Session().AnalyticsSessionCount(); err != nil { + t.Fatal(err) } else { - if r1.Data.(int64) == 0 { + if count == 0 { t.Fatal("should have at least 1 session") } }