summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-05-10 09:48:50 -0400
committerGitHub <noreply@github.com>2017-05-10 09:48:50 -0400
commit0ae68865138458f2f8fd36bbbba07728c88609d7 (patch)
tree0fccc445d8567faeaf0f4f9a4e76b3d9bcb3c24b
parentb868aa1dc7af16ddea8f65ed60683a6f440567ec (diff)
downloadchat-0ae68865138458f2f8fd36bbbba07728c88609d7.tar.gz
chat-0ae68865138458f2f8fd36bbbba07728c88609d7.tar.bz2
chat-0ae68865138458f2f8fd36bbbba07728c88609d7.zip
Detach session activity update from statuses (#6379)
-rw-r--r--api/context.go1
-rw-r--r--app/session.go14
-rw-r--r--app/status.go5
-rw-r--r--app/web_conn.go5
-rw-r--r--app/websocket_router.go5
-rw-r--r--model/session.go13
6 files changed, 30 insertions, 13 deletions
diff --git a/api/context.go b/api/context.go
index f8953f547..33dc8b2ac 100644
--- a/api/context.go
+++ b/api/context.go
@@ -222,6 +222,7 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if c.Err == nil && h.isUserActivity && token != "" && len(c.Session.UserId) > 0 {
app.SetStatusOnline(c.Session.UserId, c.Session.Id, false)
+ app.UpdateLastActivityAtIfNeeded(c.Session)
}
if c.Err == nil && (h.requireUser || h.requireSystemAdmin) {
diff --git a/app/session.go b/app/session.go
index 89244d780..7290bfd88 100644
--- a/app/session.go
+++ b/app/session.go
@@ -181,3 +181,17 @@ func AttachDeviceId(sessionId string, deviceId string, expiresAt int64) *model.A
return nil
}
+
+func UpdateLastActivityAtIfNeeded(session model.Session) {
+ now := model.GetMillis()
+ if now-session.LastActivityAt < model.SESSION_ACTIVITY_TIMEOUT {
+ return
+ }
+
+ if result := <-Srv.Store.Session().UpdateLastActivityAt(session.Id, now); result.Err != nil {
+ l4g.Error(utils.T("api.status.last_activity.error", session.UserId, session.Id))
+ }
+
+ session.LastActivityAt = now
+ AddSessionToCache(&session)
+}
diff --git a/app/status.go b/app/status.go
index dd57b82b2..f0a26e6eb 100644
--- a/app/status.go
+++ b/app/status.go
@@ -195,7 +195,6 @@ func SetStatusOnline(userId string, sessionId string, manual bool) {
// Only update the database if the status has changed, the status has been manually set,
// or enough time has passed since the previous action
if status.Status != oldStatus || status.Manual != oldManual || status.LastActivityAt-oldTime > model.STATUS_MIN_UPDATE_TIME {
- achan := Srv.Store.Session().UpdateLastActivityAt(sessionId, status.LastActivityAt)
var schan store.StoreChannel
if broadcast {
@@ -204,10 +203,6 @@ func SetStatusOnline(userId string, sessionId string, manual bool) {
schan = Srv.Store.Status().UpdateLastActivityAt(status.UserId, status.LastActivityAt)
}
- if result := <-achan; result.Err != nil {
- l4g.Error(utils.T("api.status.last_activity.error"), userId, sessionId, result.Err)
- }
-
if result := <-schan; result.Err != nil {
l4g.Error(utils.T("api.status.save_status.error"), userId, result.Err)
}
diff --git a/app/web_conn.go b/app/web_conn.go
index 2c1913e2b..1ebed9fa5 100644
--- a/app/web_conn.go
+++ b/app/web_conn.go
@@ -43,7 +43,10 @@ type WebConn struct {
func NewWebConn(ws *websocket.Conn, session model.Session, t goi18n.TranslateFunc, locale string) *WebConn {
if len(session.UserId) > 0 {
- go SetStatusOnline(session.UserId, session.Id, false)
+ go func() {
+ SetStatusOnline(session.UserId, session.Id, false)
+ UpdateLastActivityAtIfNeeded(session)
+ }()
}
return &WebConn{
diff --git a/app/websocket_router.go b/app/websocket_router.go
index 84806b5cf..80773eb9d 100644
--- a/app/websocket_router.go
+++ b/app/websocket_router.go
@@ -53,7 +53,10 @@ func (wr *WebSocketRouter) ServeWebSocket(conn *WebConn, r *model.WebSocketReque
if err != nil {
conn.WebSocket.Close()
} else {
- go SetStatusOnline(session.UserId, session.Id, false)
+ go func() {
+ SetStatusOnline(session.UserId, session.Id, false)
+ UpdateLastActivityAtIfNeeded(*session)
+ }()
conn.SessionToken = session.Token
conn.UserId = session.UserId
diff --git a/model/session.go b/model/session.go
index 38d1c91f1..4f3547582 100644
--- a/model/session.go
+++ b/model/session.go
@@ -10,12 +10,13 @@ import (
)
const (
- SESSION_COOKIE_TOKEN = "MMAUTHTOKEN"
- SESSION_COOKIE_USER = "MMUSERID"
- SESSION_CACHE_SIZE = 35000
- SESSION_PROP_PLATFORM = "platform"
- SESSION_PROP_OS = "os"
- SESSION_PROP_BROWSER = "browser"
+ SESSION_COOKIE_TOKEN = "MMAUTHTOKEN"
+ SESSION_COOKIE_USER = "MMUSERID"
+ SESSION_CACHE_SIZE = 35000
+ SESSION_PROP_PLATFORM = "platform"
+ SESSION_PROP_OS = "os"
+ SESSION_PROP_BROWSER = "browser"
+ SESSION_ACTIVITY_TIMEOUT = 1000 * 60 * 5 // 5 minutes
)
type Session struct {