Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
hilo-group
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hujiebin
hilo-group
Commits
3df2d5f0
Commit
3df2d5f0
authored
May 23, 2023
by
chenweijian
Committed by
hujiebin
May 23, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
trtc导量
parent
6e504653
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
153 additions
and
17 deletions
+153
-17
group_im.go
domain/model/group_m/group_im.go
+68
-0
trtc.sql
mysql/trtc.sql
+26
-1
group_op.go
route/group_r/group_op.go
+39
-16
group_power_test.go
test/group_power_test.go
+20
-0
No files found.
domain/model/group_m/group_im.go
0 → 100644
View file @
3df2d5f0
package
group_m
import
(
"git.hilo.cn/hilo-common/domain"
"hilo-group/_const/enum/group_e"
"hilo-group/myerr"
"math/rand"
"time"
)
type
GroupIm
struct
{
Id
uint64
Provider
group_e
.
GroupProvider
Prob
int
StartIdx
int
`gorm:"-"'`
EndIdx
int
`gorm:"-"`
}
type
GroupImLog
struct
{
ImGroupId
string
Provider
group_e
.
GroupProvider
}
func
GetGroupImConf
(
model
*
domain
.
Model
)
([]
*
GroupIm
,
error
)
{
rows
:=
make
([]
*
GroupIm
,
0
)
if
err
:=
model
.
Db
.
Table
(
"group_im"
)
.
Find
(
&
rows
)
.
Error
;
err
!=
nil
{
return
nil
,
myerr
.
WrapErr
(
err
)
}
return
rows
,
nil
}
func
GetRandomImProvider
(
model
*
domain
.
Model
)
group_e
.
GroupProvider
{
var
res
group_e
.
GroupProvider
confList
,
err
:=
GetGroupImConf
(
model
)
if
err
!=
nil
{
model
.
Log
.
Errorf
(
"GetRandomImProvider err:%v"
,
err
)
return
res
}
conf
:=
GetRandomGroupImConf
(
confList
)
return
conf
.
Provider
}
func
GetRandomGroupImConf
(
confList
[]
*
GroupIm
)
*
GroupIm
{
var
res
*
GroupIm
var
max
int
for
i
,
v
:=
range
confList
{
if
v
.
Prob
>
0
{
confList
[
i
]
.
StartIdx
=
max
max
+=
v
.
Prob
confList
[
i
]
.
EndIdx
=
max
}
}
rand
.
Seed
(
time
.
Now
()
.
UnixNano
())
randNum
:=
rand
.
Intn
(
max
)
for
_
,
v
:=
range
confList
{
if
v
.
StartIdx
<=
randNum
&&
randNum
<
v
.
EndIdx
{
res
=
v
}
}
return
res
}
func
CreateGroupImLog
(
model
*
domain
.
Model
,
imGroupId
string
,
provider
group_e
.
GroupProvider
)
error
{
if
err
:=
model
.
Db
.
Model
(
GroupImLog
{})
.
Create
(
GroupImLog
{
ImGroupId
:
imGroupId
,
Provider
:
provider
})
.
Error
;
err
!=
nil
{
return
myerr
.
WrapErr
(
err
)
}
return
nil
}
mysql/trtc.sql
View file @
3df2d5f0
...
...
@@ -7,3 +7,28 @@
UNIQUE
KEY
`im_group_id`
(
`im_group_id`
),
KEY
`created_time`
(
`created_time`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
COMMENT
=
'使用trtc的群组'
;
CREATE
TABLE
`group_im`
(
`id`
bigint
unsigned
NOT
NULL
AUTO_INCREMENT
COMMENT
'id'
,
`provider`
int
NOT
NULL
COMMENT
'厂商类型0.声网1.腾讯trtc'
,
`prob`
bigint
unsigned
NOT
NULL
COMMENT
'概率'
,
`created_time`
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`updated_time`
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`id`
),
KEY
`created_time`
(
`created_time`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'房间im厂商选用概率配置'
;
INSERT
INTO
hilo
.
group_im
(
`provider`
,
`prob`
)
VALUES
(
0
,
1000
),
(
1
,
1000
);
CREATE
TABLE
`group_im_log`
(
`id`
bigint
unsigned
NOT
NULL
AUTO_INCREMENT
COMMENT
'id'
,
`im_group_id`
char
(
32
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
,
`provider`
int
NOT
NULL
COMMENT
'厂商类型0.声网1.腾讯trtc'
,
`created_time`
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`updated_time`
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`id`
),
KEY
`im_group_id_idx`
(
`im_group_id`
)
USING
BTREE
,
KEY
`created_time_idx`
(
`created_time`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_0900_ai_ci
COMMENT
=
'房间im提供商切换log'
;
\ No newline at end of file
route/group_r/group_op.go
View file @
3df2d5f0
...
...
@@ -2,7 +2,6 @@ package group_r
import
(
"encoding/json"
"git.hilo.cn/hilo-common/_const/rediskey"
"git.hilo.cn/hilo-common/domain"
"git.hilo.cn/hilo-common/mycontext"
"git.hilo.cn/hilo-common/mylogrus"
...
...
@@ -1775,26 +1774,50 @@ func GroupIn(c *gin.Context) (*mycontext.MyContext, error) {
// }
// }
//}
}
else
if
time
.
Now
()
.
Unix
()
>
1684810309
&&
time
.
Now
()
.
Unix
()
<
1684857600
{
}
else
{
// 增加trtc房间
dayMaxCovertNum
:=
int64
(
600
)
numKey
:=
rediskey
.
GetConvertToTRTCNum
()
covertNum
,
err
:=
redisCli
.
GetCacheInt64
(
numKey
)
if
err
==
nil
&&
covertNum
<=
dayMaxCovertNum
{
//if false && time.Now().Unix() > 1682499704 {
//dayMaxCovertNum := int64(600)
//numKey := rediskey.GetConvertToTRTCNum()
//covertNum, err := redisCli.GetCacheInt64(numKey)
//if time.Now().Unix() > 1684810309 && time.Now().Unix() < 1684857600 && err == nil && covertNum <= dayMaxCovertNum {
// roomUser, err := group_m.GetRoomOnlineUser(myContext, groupId)
// if err == nil && roomUser.Total == 0 {
// newNum, err := redisCli.IncrNumExpire(numKey, 1, time.Hour*24)
// if err == nil && newNum <= dayMaxCovertNum {
// if err := group_m.InitTRTC(model, groupId); err != nil {
// return myContext, err
// }
// provider = group_e.GroupProvider_TRTC
// model.Log.Infof("auto shift trtc room groupId:%v,%+v-%v", groupId, roomUser, err)
// }
// }
//}
}
// 进房时判断要用哪个im
targetProvider
:=
group_m
.
GetRandomImProvider
(
model
)
if
provider
!=
targetProvider
{
roomUser
,
err
:=
group_m
.
GetRoomOnlineUser
(
myContext
,
groupId
)
if
err
==
nil
&&
roomUser
.
Total
==
0
{
newNum
,
err
:=
redisCli
.
IncrNumExpire
(
numKey
,
1
,
time
.
Hour
*
24
)
if
err
==
nil
&&
newNum
<=
dayMaxCovertNum
{
if
err
==
nil
&&
roomUser
.
Total
==
0
{
// 房间没人才做切换
switch
provider
{
case
group_e
.
GroupProvider_SW
:
// 旧的是声网,切换成trtc
if
err
:=
group_m
.
InitTRTC
(
model
,
groupId
);
err
!=
nil
{
return
myContext
,
err
}
provider
=
group_e
.
GroupProvider_TRTC
model
.
Log
.
Infof
(
"auto shift trtc room groupId:%v,%+v-%v"
,
groupId
,
roomUser
,
err
)
case
group_e
.
GroupProvider_TRTC
:
// 旧的是trtc,切换成声网
if
err
:=
group_m
.
DeleteTRTC
(
model
,
groupId
);
err
!=
nil
{
return
myContext
,
err
}
}
// 切换
provider
=
targetProvider
// log
err
=
group_m
.
CreateGroupImLog
(
model
,
groupId
,
provider
)
if
err
!=
nil
{
model
.
Log
.
Errorf
(
"CreateGroupImLog err:%v, imGroupId:%s, provider:%v"
,
err
,
groupId
,
provider
)
}
}
}
if
provider
==
group_e
.
GroupProvider_TRTC
{
// 版本升级提示,旧版本(3.6.0以下),提示升级
_
,
major
,
minor
,
_
,
err
:=
req
.
GetAppVersion
(
c
)
...
...
test/group_power_test.go
View file @
3df2d5f0
...
...
@@ -49,3 +49,23 @@ func TestDoCalcGroupPowerMonthRankActbufa(t *testing.T) {
beginDate
,
endDate
:=
_now
.
BeginningOfMonth
()
.
Format
(
"2006-01-02"
),
_now
.
EndOfMonth
()
.
Format
(
"2006-01-02"
)
_
=
group_power_s
.
BufaDoCalcGroupPowerMonthRankAct
(
domain
.
CreateModelNil
(),
calcMonth
,
beginDate
,
endDate
,
starDate
)
}
func
TestGetRandomImProvider
(
t
*
testing
.
T
)
{
var
times0
,
times1
int
model
:=
domain
.
CreateModelNil
()
confList
,
err
:=
group_m
.
GetGroupImConf
(
model
)
if
err
!=
nil
{
model
.
Log
.
Errorf
(
"GetRandomImProvider err:%v"
,
err
)
return
}
for
i
:=
0
;
i
<
1000000
;
i
++
{
conf
:=
group_m
.
GetRandomGroupImConf
(
confList
)
if
conf
.
Provider
==
0
{
times0
+=
1
}
else
if
conf
.
Provider
==
1
{
times1
+=
1
}
}
fmt
.
Printf
(
"true--------------times0:%v
\n
"
,
times0
)
fmt
.
Printf
(
"true--------------times1:%v
\n
"
,
times1
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment