summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorenahum <nahumhbl@gmail.com>2016-09-06 15:48:43 -0300
committerGitHub <noreply@github.com>2016-09-06 15:48:43 -0300
commit35b816b92217237de922c928a6623b5ac426655a (patch)
treeadf7e7a96bd4b50aae0b295f94f8501643e7fc38 /api
parent9a9ae3dcd1c248a5d9e6f986ea967fa8bbf06f19 (diff)
downloadchat-35b816b92217237de922c928a6623b5ac426655a.tar.gz
chat-35b816b92217237de922c928a6623b5ac426655a.tar.bz2
chat-35b816b92217237de922c928a6623b5ac426655a.zip
PLT-3921 Fix System Console Recent Active Users (#3856)
* PLT-3921 System Console Recent Active Users
Diffstat (limited to 'api')
-rw-r--r--api/admin.go35
-rw-r--r--api/admin_test.go15
2 files changed, 50 insertions, 0 deletions
diff --git a/api/admin.go b/api/admin.go
index d48c8d379..573a22c6b 100644
--- a/api/admin.go
+++ b/api/admin.go
@@ -48,6 +48,7 @@ func InitAdmin() {
BaseRoutes.Admin.Handle("/remove_certificate", ApiAdminSystemRequired(removeCertificate)).Methods("POST")
BaseRoutes.Admin.Handle("/saml_cert_status", ApiAdminSystemRequired(samlCertificateStatus)).Methods("GET")
BaseRoutes.Admin.Handle("/cluster_status", ApiAdminSystemRequired(getClusterStatus)).Methods("GET")
+ BaseRoutes.Admin.Handle("/recently_active_users/{team_id:[A-Za-z0-9]+}", ApiUserRequiredActivity(getRecentlyActiveUsers, false)).Methods("GET")
}
func getLogs(c *Context, w http.ResponseWriter, r *http.Request) {
@@ -754,3 +755,37 @@ func samlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write([]byte(model.StringInterfaceToJson(status)))
}
+
+func getRecentlyActiveUsers(c *Context, w http.ResponseWriter, r *http.Request) {
+ statusMap := map[string]interface{}{}
+
+ if result := <-Srv.Store.Status().GetAllFromTeam(c.TeamId); result.Err != nil {
+ c.Err = result.Err
+ return
+ } else {
+ statuses := result.Data.([]*model.Status)
+ for _, s := range statuses {
+ statusMap[s.UserId] = s.LastActivityAt
+ }
+ }
+
+ if result := <-Srv.Store.User().GetProfiles(c.TeamId); result.Err != nil {
+ c.Err = result.Err
+ return
+ } else {
+ profiles := result.Data.(map[string]*model.User)
+
+ for k, p := range profiles {
+ p = sanitizeProfile(c, p)
+
+ if lastActivityAt, ok := statusMap[p.Id].(int64); ok {
+ p.LastActivityAt = lastActivityAt
+ }
+
+ profiles[k] = p
+ }
+
+ w.Write([]byte(model.UserMapToJson(profiles)))
+ }
+
+}
diff --git a/api/admin_test.go b/api/admin_test.go
index 3d8a95676..7f3c584d8 100644
--- a/api/admin_test.go
+++ b/api/admin_test.go
@@ -527,3 +527,18 @@ func TestAdminLdapSyncNow(t *testing.T) {
t.Fatal("Returned Failure")
}
}
+
+func TestGetRecentlyActiveUsers(t *testing.T) {
+ th := Setup().InitBasic()
+
+ user1Id := th.BasicUser.Id
+ user2Id := th.BasicUser2.Id
+
+ if userMap, err := th.BasicClient.GetRecentlyActiveUsers(th.BasicTeam.Id); err != nil {
+ t.Fatal(err)
+ } else if len(userMap.Data.(map[string]*model.User)) != 2 {
+ t.Fatal("should have been 2")
+ } else if userMap.Data.(map[string]*model.User)[user1Id].Id != user1Id || userMap.Data.(map[string]*model.User)[user2Id].Id != user2Id {
+ t.Fatal("should have been valid")
+ }
+}