Skip to content

Commit 3a0ea30

Browse files
Merge pull request #26 from getCompass/release_v5.3.0
Release v5.3.0
2 parents e3fbcf1 + 27ca569 commit 3a0ea30

File tree

6 files changed

+60
-41
lines changed

6 files changed

+60
-41
lines changed

go_activity/api/includes/controller/user/user.go

+10-17
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package user
33
// пакет, в который вынесена вся бизнес-логика группы методов user
44
import (
55
"context"
6-
"github.com/getCompassUtils/go_base_frame/api/system/functions"
76
"github.com/getCompassUtils/go_base_frame/api/system/log"
87
"go_activity/api/includes/type/activitycache"
98
"go_activity/api/includes/type/usercache"
@@ -18,14 +17,14 @@ func GetActivity(ctx context.Context, userId int64) (usercache.UserActivityStruc
1817
return usercache.UserActivityStruct{}, errorStatus.Error(401, "passed bad user_id")
1918
}
2019

21-
userRow, err := usercache.GetActivityRow(ctx, userId)
20+
userActivityData, err := usercache.GetActivityRow(ctx, userId)
2221
if err != nil {
2322

2423
log.Errorf("Не получили пользователя %d из кэша после ожидания канала", userId)
2524
return usercache.UserActivityStruct{}, errorStatus.Error(901, "user row not found")
2625
}
2726

28-
userActivityItem := prepareUserActivityStruct(userId, userRow)
27+
userActivityItem := prepareUserActivityStruct(userId, userActivityData)
2928
return userActivityItem, nil
3029
}
3130

@@ -46,19 +45,13 @@ func GetActivityList(ctx context.Context, userIdList map[string]int64) (*usercac
4645
}
4746

4847
// получаем информацию из кэша
49-
userRow, err := usercache.GetActivityRow(ctx, userId)
48+
userActivityData, err := usercache.GetActivityRow(ctx, userId)
5049
if err != nil {
51-
52-
userRow = map[string]string{
53-
"status": "0",
54-
"created_at": "0",
55-
"updated_at": "0",
56-
"last_ws_ping_at": "0",
57-
}
50+
userActivityData = usercache.UserActivityData{}
5851
}
5952

6053
// собираем структуру активности пользователя
61-
userActivityItem := prepareUserActivityStruct(userId, userRow)
54+
userActivityItem := prepareUserActivityStruct(userId, userActivityData)
6255
activities = append(activities, userActivityItem)
6356
}
6457

@@ -73,14 +66,14 @@ func GetActivityList(ctx context.Context, userIdList map[string]int64) (*usercac
7366
}
7467

7568
// собираем объект UserActivityStruct из полученных записей бд
76-
func prepareUserActivityStruct(userId int64, userRow map[string]string) usercache.UserActivityStruct {
69+
func prepareUserActivityStruct(userId int64, userActivityData usercache.UserActivityData) usercache.UserActivityStruct {
7770

7871
return usercache.UserActivityStruct{
7972
UserId: userId,
80-
Status: functions.StringToInt32(userRow["status"]),
81-
CreatedAt: functions.StringToInt64(userRow["created_at"]),
82-
UpdatedAt: functions.StringToInt64(userRow["updated_at"]),
83-
LastPingWsAt: functions.StringToInt64(userRow["last_ws_ping_at"]),
73+
Status: userActivityData.Status,
74+
CreatedAt: userActivityData.CreatedAt,
75+
UpdatedAt: userActivityData.UpdatedAt,
76+
LastPingWsAt: userActivityData.LastPingWsAt,
8477
}
8578
}
8679

go_activity/api/includes/type/db/pivot_user/session_active_list.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,6 @@ func UpdateUserSessionActivity(ctx context.Context, activities []UserSessionActi
6969
for tableName, tblActivitiesByPingWsAt := range tableMap {
7070

7171
for pingWsAt, tblActivities := range tblActivitiesByPingWsAt {
72-
73-
// формируем список обновляемых значений
74-
values := make([]interface{}, 0)
75-
values = append(values, pingWsAt, time.Now().Unix())
76-
7772
for i := 0; i < len(tblActivities); i += batchSize {
7873
end := i + batchSize
7974
if end > len(tblActivities) {
@@ -82,6 +77,10 @@ func UpdateUserSessionActivity(ctx context.Context, activities []UserSessionActi
8277

8378
batch := tblActivities[i:end]
8479

80+
// формируем список обновляемых значений
81+
values := make([]interface{}, 0)
82+
values = append(values, pingWsAt, time.Now().Unix())
83+
8584
whereClauses := make([]string, 0, len(batch))
8685

8786
for _, activity := range batch {

go_activity/api/includes/type/usercache/cache.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,22 @@ type mainUserStorage struct {
1111
cache map[int64]userActivityStruct
1212
}
1313

14+
// структура активности пользователя из бд
15+
type UserActivityData struct {
16+
Status int32
17+
CreatedAt int64
18+
UpdatedAt int64
19+
LastPingWsAt int64
20+
}
21+
1422
// структура объекта пользователя
1523
type userActivityStruct struct {
1624

1725
// системные метрики
1826
dateCached int64
1927

20-
// информация о пользователе из бд
21-
userRow map[string]string
28+
// информация о активности пользователе из бд
29+
userActivityData UserActivityData
2230

2331
err error
2432
}
@@ -51,7 +59,7 @@ func (s *mainUserStorage) getUserFromCache(userId int64) (userActivityStruct, bo
5159
}
5260

5361
// сохраняем пользователя
54-
func (s *mainUserStorage) doCacheUserItem(userId int64, userRow map[string]string, err error) {
62+
func (s *mainUserStorage) doCacheUserItem(userId int64, userData UserActivityData, err error) {
5563

5664
s.mu.Lock()
5765
defer s.mu.Unlock()
@@ -62,7 +70,7 @@ func (s *mainUserStorage) doCacheUserItem(userId int64, userRow map[string]strin
6270
}
6371

6472
userCache.dateCached = functions.GetCurrentTimeStamp()
65-
userCache.userRow = userRow
73+
userCache.userActivityData = userData
6674
userCache.err = err
6775
s.cache[userId] = userCache
6876
}

go_activity/api/includes/type/usercache/main.go

+12-13
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"github.com/getCompassUtils/go_base_frame/api/system/log"
77
"go_activity/api/conf"
8-
"strconv"
98
"time"
109
)
1110

@@ -29,33 +28,33 @@ type UserActivityListStruct struct {
2928
// ---------------------------------------------
3029

3130
// GetActivityRow получение активности пользователя
32-
func GetActivityRow(ctx context.Context, userId int64) (map[string]string, error) {
31+
func GetActivityRow(ctx context.Context, userId int64) (UserActivityData, error) {
3332

34-
// получаем инфу из основного хранилища
33+
// получаем данные из основного хранилища
3534
userActivity, exist := mainUserStore.getUserFromCache(userId)
3635
if !exist || userActivity.err != nil {
3736

3837
// подписываем на канал и ждем пока пользователь добавится в кэш
3938
err := waitUntilUserAddedToCache(ctx, userId)
4039
if err != nil {
4140

42-
log.Errorf("error: %v", err)
43-
return nil, err
41+
log.Errorf("Ошибка при ожидании пользователя %d в кэше: %v", userId, err)
42+
return UserActivityData{}, err
4443
}
4544

4645
// если так и не появилась
4746
userActivity, exist = mainUserStore.getUserFromCache(userId)
4847
if !exist {
49-
return nil, fmt.Errorf("не смогли получить данные для userId: %d", userId)
48+
return UserActivityData{}, fmt.Errorf("не смогли получить данные для userId: %d", userId)
5049
}
5150
}
5251

53-
// обработка случая когда пользователь не найден
54-
if len(userActivity.userRow) < 1 {
55-
return nil, fmt.Errorf("не смогли получить данные для userId: %d", userId)
52+
// проверяем, что данные пользователя не пустые
53+
if userActivity.userActivityData == (UserActivityData{}) {
54+
return UserActivityData{}, fmt.Errorf("данные пользователя %d отсутствуют", userId)
5655
}
5756

58-
return userActivity.userRow, nil
57+
return userActivity.userActivityData, nil
5958
}
6059

6160
// ждем пока в кэше появится информация
@@ -81,11 +80,11 @@ func UpdateActivityRow(userId int64, activityTimestamp int64) {
8180
userActivity, exist := mainUserStore.getUserFromCache(userId)
8281
if exist {
8382

84-
// если запись существует, обновляем поле last_ws_ping_at
85-
userActivity.userRow["last_ws_ping_at"] = strconv.FormatInt(activityTimestamp, 10)
83+
// если запись существует, обновляем last_ws_ping_at
84+
userActivity.userActivityData.LastPingWsAt = activityTimestamp
8685

8786
// перезаписываем обновленную запись в mainUserStore
88-
mainUserStore.doCacheUserItem(userId, userActivity.userRow, userActivity.err)
87+
mainUserStore.doCacheUserItem(userId, userActivity.userActivityData, userActivity.err)
8988
}
9089
}
9190

go_activity/api/includes/type/usercache/sub.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package usercache
22

33
import (
44
"context"
5+
"github.com/getCompassUtils/go_base_frame/api/system/functions"
56
"github.com/getCompassUtils/go_base_frame/api/system/log"
67
"go_activity/api/includes/type/db/pivot_user"
78
"sync"
@@ -49,14 +50,23 @@ func addUserToMainStore(ctx context.Context, userId int64) {
4950

5051
defer closeChannel(userId)
5152

53+
// если ничего не нашли, выходим
5254
if userActivityRow == nil {
5355

5456
log.Errorf("Не нашли в базе: %v", err)
5557
return
5658
}
5759

58-
// сохраняем user_row в кэш
59-
mainUserStore.doCacheUserItem(userId, userActivityRow, err)
60+
// переводим данные в структуру
61+
userData := UserActivityData{
62+
Status: functions.StringToInt32(userActivityRow["status"]),
63+
CreatedAt: functions.StringToInt64(userActivityRow["created_at"]),
64+
UpdatedAt: functions.StringToInt64(userActivityRow["updated_at"]),
65+
LastPingWsAt: functions.StringToInt64(userActivityRow["last_ws_ping_at"]),
66+
}
67+
68+
// записываем
69+
mainUserStore.doCacheUserItem(userId, userData, err)
6070
}
6171

6272
// закрываем канал для пользователя

go_sender/api/includes/ws_controller/v1/client.go

+10
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,16 @@ func (client) Connect(data *dataStruct) {
125125

126126
// при успешном подключении
127127
onSuccessConnection(data.connection, isolation)
128+
129+
// записываем активность
130+
config, err = conf.GetConfig()
131+
if config.Role == "pivot" || config.CurrentServer == "monolith" {
132+
133+
err := activitycache.AddActivity(data.connection.UserId, functions.GetCurrentTimeStamp(), data.connection.SessionUniq)
134+
if err != nil {
135+
return
136+
}
137+
}
128138
}
129139

130140
// отправляем событие для запроа у клиента отправить нам конфиг

0 commit comments

Comments
 (0)