summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2018-05-02 10:50:56 -0400
committerChristopher Speller <crspeller@gmail.com>2018-05-02 07:50:56 -0700
commitd6537deb3ddace25b693932ae503b4fbdbe02935 (patch)
tree64b3f9989e43459cfc815076fe460920a8796abe
parent1647614fc95b0cb9dd5c4c5699f4f7fbba0bee43 (diff)
downloadchat-d6537deb3ddace25b693932ae503b4fbdbe02935.tar.gz
chat-d6537deb3ddace25b693932ae503b4fbdbe02935.tar.bz2
chat-d6537deb3ddace25b693932ae503b4fbdbe02935.zip
Add inactive user count to analytics and fix client analytics function (#8695)
-rw-r--r--api4/system_test.go17
-rw-r--r--app/analytics.go18
-rw-r--r--model/client4.go2
3 files changed, 30 insertions, 7 deletions
diff --git a/api4/system_test.go b/api4/system_test.go
index c0fde6c39..d4134f8e2 100644
--- a/api4/system_test.go
+++ b/api4/system_test.go
@@ -512,15 +512,18 @@ func TestGetAnalyticsOld(t *testing.T) {
CheckNoError(t, resp)
found := false
+ found2 := false
for _, row := range rows {
if row.Name == "unique_user_count" {
found = true
+ } else if row.Name == "inactive_user_count" {
+ found2 = true
+ assert.True(t, row.Value >= 0)
}
}
- if !found {
- t.Fatal("should return unique user count")
- }
+ assert.True(t, found, "should return unique user count")
+ assert.True(t, found2, "should return inactive user count")
_, resp = th.SystemAdminClient.GetAnalyticsOld("post_counts_day", "")
CheckNoError(t, resp)
@@ -531,9 +534,15 @@ func TestGetAnalyticsOld(t *testing.T) {
_, resp = th.SystemAdminClient.GetAnalyticsOld("extra_counts", "")
CheckNoError(t, resp)
- _, resp = th.SystemAdminClient.GetAnalyticsOld("", th.BasicTeam.Id)
+ rows, resp = th.SystemAdminClient.GetAnalyticsOld("", th.BasicTeam.Id)
CheckNoError(t, resp)
+ for _, row := range rows {
+ if row.Name == "inactive_user_count" {
+ assert.Equal(t, float64(-1), row.Value, "inactive user count should be -1 when team specified")
+ }
+ }
+
rows2, resp2 := th.SystemAdminClient.GetAnalyticsOld("standard", "")
CheckNoError(t, resp2)
assert.Equal(t, "total_websocket_connections", rows2[5].Name)
diff --git a/app/analytics.go b/app/analytics.go
index 7a32e78c1..a09b56538 100644
--- a/app/analytics.go
+++ b/app/analytics.go
@@ -30,7 +30,7 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
}
if name == "standard" {
- var rows model.AnalyticsRows = make([]*model.AnalyticsRow, 10)
+ var rows model.AnalyticsRows = make([]*model.AnalyticsRow, 11)
rows[0] = &model.AnalyticsRow{Name: "channel_open_count", Value: 0}
rows[1] = &model.AnalyticsRow{Name: "channel_private_count", Value: 0}
rows[2] = &model.AnalyticsRow{Name: "post_count", Value: 0}
@@ -41,13 +41,17 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
rows[7] = &model.AnalyticsRow{Name: "total_read_db_connections", Value: 0}
rows[8] = &model.AnalyticsRow{Name: "daily_active_users", Value: 0}
rows[9] = &model.AnalyticsRow{Name: "monthly_active_users", Value: 0}
+ rows[10] = &model.AnalyticsRow{Name: "inactive_user_count", Value: 0}
openChan := a.Srv.Store.Channel().AnalyticsTypeCount(teamId, model.CHANNEL_OPEN)
privateChan := a.Srv.Store.Channel().AnalyticsTypeCount(teamId, model.CHANNEL_PRIVATE)
teamChan := a.Srv.Store.Team().AnalyticsTeamCount()
var userChan store.StoreChannel
- if teamId != "" {
+ var userInactiveChan store.StoreChannel
+ if teamId == "" {
+ userInactiveChan = a.Srv.Store.User().AnalyticsGetInactiveUsersCount()
+ } else {
userChan = a.Srv.Store.User().AnalyticsUniqueUserCount(teamId)
}
@@ -91,6 +95,16 @@ func (a *App) GetAnalytics(name string, teamId string) (model.AnalyticsRows, *mo
}
}
+ if userInactiveChan == nil {
+ rows[10].Value = -1
+ } else {
+ if r := <-userInactiveChan; r.Err != nil {
+ return nil, r.Err
+ } else {
+ rows[10].Value = float64(r.Data.(int64))
+ }
+ }
+
if r := <-teamChan; r.Err != nil {
return nil, r.Err
} else {
diff --git a/model/client4.go b/model/client4.go
index cf34c9fd7..7ca2bdf4e 100644
--- a/model/client4.go
+++ b/model/client4.go
@@ -2359,7 +2359,7 @@ func (c *Client4) RemoveLicenseFile() (bool, *Response) {
// and defaults to "standard". The "teamId" argument is optional and will limit results
// to a specific team.
func (c *Client4) GetAnalyticsOld(name, teamId string) (AnalyticsRows, *Response) {
- query := fmt.Sprintf("?name=%v&teamId=%v", name, teamId)
+ query := fmt.Sprintf("?name=%v&team_id=%v", name, teamId)
if r, err := c.DoApiGet(c.GetAnalyticsRoute()+"/old"+query, ""); err != nil {
return nil, BuildErrorResponse(r, err)
} else {