From fb5b57836ece6da2d0136802ca0d08346638b9e2 Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Tue, 3 Nov 2015 14:52:25 -0500 Subject: Multiple fixes to major performance issues with teams with 50+ users --- api/user.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'api') diff --git a/api/user.go b/api/user.go index 732c6b9a8..42d3a43e7 100644 --- a/api/user.go +++ b/api/user.go @@ -49,7 +49,7 @@ func InitUser(r *mux.Router) { sr.Handle("/newimage", ApiUserRequired(uploadProfileImage)).Methods("POST") sr.Handle("/me", ApiAppHandler(getMe)).Methods("GET") - sr.Handle("/status", ApiUserRequiredActivity(getStatuses, false)).Methods("GET") + sr.Handle("/status", ApiUserRequiredActivity(getStatuses, false)).Methods("POST") sr.Handle("/profiles", ApiUserRequired(getProfiles)).Methods("GET") sr.Handle("/profiles/{id:[A-Za-z0-9]+}", ApiUserRequired(getProfiles)).Methods("GET") sr.Handle("/{id:[A-Za-z0-9]+}", ApiUserRequired(getUser)).Methods("GET") @@ -1483,16 +1483,31 @@ func updateUserNotify(c *Context, w http.ResponseWriter, r *http.Request) { } func getStatuses(c *Context, w http.ResponseWriter, r *http.Request) { + userIds := model.ArrayFromJson(r.Body) + if len(userIds) == 0 { + c.SetInvalidParam("getStatuses", "userIds") + return + } if result := <-Srv.Store.User().GetProfiles(c.Session.TeamId); result.Err != nil { c.Err = result.Err return } else { - profiles := result.Data.(map[string]*model.User) statuses := map[string]string{} for _, profile := range profiles { + found := false + for _, uid := range userIds { + if uid == profile.Id { + found = true + } + } + + if !found { + continue + } + if profile.IsOffline() { statuses[profile.Id] = model.USER_OFFLINE } else if profile.IsAway() { -- cgit v1.2.3-1-g7c22 From a15649e3827025a1222684b7960b4ec19351bc81 Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Tue, 3 Nov 2015 15:27:35 -0500 Subject: Updated getStatuses unit testgs --- api/user_test.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'api') diff --git a/api/user_test.go b/api/user_test.go index 0ad3541bc..f067182cb 100644 --- a/api/user_test.go +++ b/api/user_test.go @@ -1020,9 +1020,15 @@ func TestStatuses(t *testing.T) { ruser := Client.Must(Client.CreateUser(&user, "")).Data.(*model.User) store.Must(Srv.Store.User().VerifyEmail(ruser.Id)) + user2 := model.User{TeamId: rteam.Data.(*model.Team).Id, Email: strings.ToLower(model.NewId()) + "corey@test.com", Nickname: "Corey Hulen", Password: "pwd"} + ruser2 := Client.Must(Client.CreateUser(&user2, "")).Data.(*model.User) + store.Must(Srv.Store.User().VerifyEmail(ruser2.Id)) + Client.LoginByEmail(team.Name, user.Email, user.Password) - r1, err := Client.GetStatuses() + userIds := []string{ruser2.Id} + + r1, err := Client.GetStatuses(userIds) if err != nil { t.Fatal(err) } -- cgit v1.2.3-1-g7c22