mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-10-27 22:12:15 +08:00
Merge branch 'openimsdk:main' into main
This commit is contained in:
commit
f7bcbadb3c
@ -1,8 +1,10 @@
|
|||||||
{{ define "email.to.html" }}
|
{{ define "email.to.html" }}
|
||||||
|
{{ if eq .Status "firing" }}
|
||||||
{{ range .Alerts }}
|
{{ range .Alerts }}
|
||||||
<!-- Begin of OpenIM Alert -->
|
<!-- Begin of OpenIM Alert -->
|
||||||
<div style="border:1px solid #ccc; padding:10px; margin-bottom:10px;">
|
<div style="border:1px solid #ccc; padding:10px; margin-bottom:10px;">
|
||||||
<h3>OpenIM Alert</h3>
|
<h3>OpenIM Alert</h3>
|
||||||
|
<p><strong>Alert Status:</strong> firing</p>
|
||||||
<p><strong>Alert Program:</strong> Prometheus Alert</p>
|
<p><strong>Alert Program:</strong> Prometheus Alert</p>
|
||||||
<p><strong>Severity Level:</strong> {{ .Labels.severity }}</p>
|
<p><strong>Severity Level:</strong> {{ .Labels.severity }}</p>
|
||||||
<p><strong>Alert Type:</strong> {{ .Labels.alertname }}</p>
|
<p><strong>Alert Type:</strong> {{ .Labels.alertname }}</p>
|
||||||
@ -11,6 +13,24 @@
|
|||||||
<p><strong>Alert Subject:</strong> {{ .Annotations.summary }}</p>
|
<p><strong>Alert Subject:</strong> {{ .Annotations.summary }}</p>
|
||||||
<p><strong>Trigger Time:</strong> {{ .StartsAt.Format "2006-01-02 15:04:05" }}</p>
|
<p><strong>Trigger Time:</strong> {{ .StartsAt.Format "2006-01-02 15:04:05" }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
|
||||||
|
{{ else if eq .Status "resolved" }}
|
||||||
|
{{ range .Alerts }}
|
||||||
|
<!-- Begin of OpenIM Alert -->
|
||||||
|
<div style="border:1px solid #ccc; padding:10px; margin-bottom:10px;">
|
||||||
|
<h3>OpenIM Alert</h3>
|
||||||
|
<p><strong>Alert Status:</strong> resolved</p>
|
||||||
|
<p><strong>Alert Program:</strong> Prometheus Alert</p>
|
||||||
|
<p><strong>Severity Level:</strong> {{ .Labels.severity }}</p>
|
||||||
|
<p><strong>Alert Type:</strong> {{ .Labels.alertname }}</p>
|
||||||
|
<p><strong>Affected Host:</strong> {{ .Labels.instance }}</p>
|
||||||
|
<p><strong>Affected Service:</strong> {{ .Labels.job }}</p>
|
||||||
|
<p><strong>Alert Subject:</strong> {{ .Annotations.summary }}</p>
|
||||||
|
<p><strong>Trigger Time:</strong> {{ .StartsAt.Format "2006-01-02 15:04:05" }}</p>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
<!-- End of OpenIM Alert -->
|
<!-- End of OpenIM Alert -->
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|||||||
2
go.mod
2
go.mod
@ -13,7 +13,7 @@ require (
|
|||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
||||||
github.com/mitchellh/mapstructure v1.5.0
|
github.com/mitchellh/mapstructure v1.5.0
|
||||||
github.com/openimsdk/protocol v0.0.69-alpha.38
|
github.com/openimsdk/protocol v0.0.69-alpha.38
|
||||||
github.com/openimsdk/tools v0.0.49-alpha.51
|
github.com/openimsdk/tools v0.0.49-alpha.52
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/prometheus/client_golang v1.18.0
|
github.com/prometheus/client_golang v1.18.0
|
||||||
github.com/stretchr/testify v1.9.0
|
github.com/stretchr/testify v1.9.0
|
||||||
|
|||||||
4
go.sum
4
go.sum
@ -321,8 +321,8 @@ github.com/openimsdk/gomake v0.0.14-alpha.5 h1:VY9c5x515lTfmdhhPjMvR3BBRrRquAUCF
|
|||||||
github.com/openimsdk/gomake v0.0.14-alpha.5/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI=
|
github.com/openimsdk/gomake v0.0.14-alpha.5/go.mod h1:PndCozNc2IsQIciyn9mvEblYWZwJmAI+06z94EY+csI=
|
||||||
github.com/openimsdk/protocol v0.0.69-alpha.38 h1:kVZCHIXg/el8YJFoIBWhZu1sbbTUqmzgF4l0W3sUH24=
|
github.com/openimsdk/protocol v0.0.69-alpha.38 h1:kVZCHIXg/el8YJFoIBWhZu1sbbTUqmzgF4l0W3sUH24=
|
||||||
github.com/openimsdk/protocol v0.0.69-alpha.38/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8=
|
github.com/openimsdk/protocol v0.0.69-alpha.38/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8=
|
||||||
github.com/openimsdk/tools v0.0.49-alpha.51 h1:JTPEetVSNOczw1n+XjiPozaH2SBPQAc+9VlPE41wEeY=
|
github.com/openimsdk/tools v0.0.49-alpha.52 h1:NwAAtBO4BV96qG6Z0P2btGEqn4AI2DFgaHvLMXNHal0=
|
||||||
github.com/openimsdk/tools v0.0.49-alpha.51/go.mod h1:h1cYmfyaVtgFbKmb1Cfsl8XwUOMTt8ubVUQrdGtsUh4=
|
github.com/openimsdk/tools v0.0.49-alpha.52/go.mod h1:h1cYmfyaVtgFbKmb1Cfsl8XwUOMTt8ubVUQrdGtsUh4=
|
||||||
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
|
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
|
||||||
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
||||||
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
|
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
|
||||||
|
|||||||
@ -22,11 +22,15 @@ import (
|
|||||||
"github.com/openimsdk/open-im-server/v3/pkg/rpcclient"
|
"github.com/openimsdk/open-im-server/v3/pkg/rpcclient"
|
||||||
"github.com/openimsdk/protocol/constant"
|
"github.com/openimsdk/protocol/constant"
|
||||||
"github.com/openimsdk/protocol/msggateway"
|
"github.com/openimsdk/protocol/msggateway"
|
||||||
|
"github.com/openimsdk/protocol/sdkws"
|
||||||
"github.com/openimsdk/tools/discovery"
|
"github.com/openimsdk/tools/discovery"
|
||||||
"github.com/openimsdk/tools/errs"
|
"github.com/openimsdk/tools/errs"
|
||||||
"github.com/openimsdk/tools/log"
|
"github.com/openimsdk/tools/log"
|
||||||
"github.com/openimsdk/tools/mcontext"
|
"github.com/openimsdk/tools/mcontext"
|
||||||
|
"github.com/openimsdk/tools/mq/memamq"
|
||||||
|
"github.com/openimsdk/tools/utils/datautil"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
"sync/atomic"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *Server) InitServer(ctx context.Context, config *Config, disCov discovery.SvcDiscoveryRegistry, server *grpc.Server) error {
|
func (s *Server) InitServer(ctx context.Context, config *Config, disCov discovery.SvcDiscoveryRegistry, server *grpc.Server) error {
|
||||||
@ -57,6 +61,7 @@ type Server struct {
|
|||||||
pushTerminal map[int]struct{}
|
pushTerminal map[int]struct{}
|
||||||
ready func(srv *Server) error
|
ready func(srv *Server) error
|
||||||
userRcp rpcclient.UserRpcClient
|
userRcp rpcclient.UserRpcClient
|
||||||
|
queue *memamq.MemoryQueue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) SetLongConnServer(LongConnServer LongConnServer) {
|
func (s *Server) SetLongConnServer(LongConnServer LongConnServer) {
|
||||||
@ -70,6 +75,7 @@ func NewServer(rpcPort int, longConnServer LongConnServer, conf *Config, ready f
|
|||||||
pushTerminal: make(map[int]struct{}),
|
pushTerminal: make(map[int]struct{}),
|
||||||
config: conf,
|
config: conf,
|
||||||
ready: ready,
|
ready: ready,
|
||||||
|
queue: memamq.NewMemoryQueue(512, 1024*16),
|
||||||
}
|
}
|
||||||
s.pushTerminal[constant.IOSPlatformID] = struct{}{}
|
s.pushTerminal[constant.IOSPlatformID] = struct{}{}
|
||||||
s.pushTerminal[constant.AndroidPlatformID] = struct{}{}
|
s.pushTerminal[constant.AndroidPlatformID] = struct{}{}
|
||||||
@ -125,55 +131,93 @@ func (s *Server) OnlineBatchPushOneMsg(ctx context.Context, req *msggateway.Onli
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) SuperGroupOnlineBatchPushOneMsg(ctx context.Context, req *msggateway.OnlineBatchPushOneMsgReq,
|
func (s *Server) pushToUser(ctx context.Context, userID string, msgData *sdkws.MsgData) *msggateway.SingleMsgToUserResults {
|
||||||
) (*msggateway.OnlineBatchPushOneMsgResp, error) {
|
clients, ok := s.LongConnServer.GetUserAllCons(userID)
|
||||||
var singleUserResults []*msggateway.SingleMsgToUserResults
|
|
||||||
for _, v := range req.PushToUserIDs {
|
|
||||||
var resp []*msggateway.SingleMsgToUserPlatform
|
|
||||||
results := &msggateway.SingleMsgToUserResults{
|
|
||||||
UserID: v,
|
|
||||||
}
|
|
||||||
clients, ok := s.LongConnServer.GetUserAllCons(v)
|
|
||||||
if !ok {
|
if !ok {
|
||||||
log.ZDebug(ctx, "push user not online", "userID", v)
|
log.ZDebug(ctx, "push user not online", "userID", userID)
|
||||||
results.Resp = resp
|
return &msggateway.SingleMsgToUserResults{
|
||||||
singleUserResults = append(singleUserResults, results)
|
UserID: userID,
|
||||||
continue
|
}
|
||||||
|
}
|
||||||
|
log.ZDebug(ctx, "push user online", "clients", clients, "userID", userID)
|
||||||
|
result := &msggateway.SingleMsgToUserResults{
|
||||||
|
UserID: userID,
|
||||||
|
Resp: make([]*msggateway.SingleMsgToUserPlatform, 0, len(clients)),
|
||||||
}
|
}
|
||||||
|
|
||||||
log.ZDebug(ctx, "push user online", "clients", clients, "userID", v)
|
|
||||||
for _, client := range clients {
|
for _, client := range clients {
|
||||||
if client == nil {
|
if client == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
userPlatform := &msggateway.SingleMsgToUserPlatform{
|
userPlatform := &msggateway.SingleMsgToUserPlatform{
|
||||||
RecvPlatFormID: int32(client.PlatformID),
|
RecvPlatFormID: int32(client.PlatformID),
|
||||||
}
|
}
|
||||||
if !client.IsBackground ||
|
if !client.IsBackground ||
|
||||||
(client.IsBackground && client.PlatformID != constant.IOSPlatformID) {
|
(client.IsBackground && client.PlatformID != constant.IOSPlatformID) {
|
||||||
err := client.PushMessage(ctx, req.MsgData)
|
err := client.PushMessage(ctx, msgData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
userPlatform.ResultCode = int64(servererrs.ErrPushMsgErr.Code())
|
userPlatform.ResultCode = int64(servererrs.ErrPushMsgErr.Code())
|
||||||
resp = append(resp, userPlatform)
|
|
||||||
} else {
|
} else {
|
||||||
if _, ok := s.pushTerminal[client.PlatformID]; ok {
|
if _, ok := s.pushTerminal[client.PlatformID]; ok {
|
||||||
results.OnlinePush = true
|
result.OnlinePush = true
|
||||||
resp = append(resp, userPlatform)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
userPlatform.ResultCode = int64(servererrs.ErrIOSBackgroundPushErr.Code())
|
userPlatform.ResultCode = int64(servererrs.ErrIOSBackgroundPushErr.Code())
|
||||||
resp = append(resp, userPlatform)
|
|
||||||
}
|
}
|
||||||
|
result.Resp = append(result.Resp, userPlatform)
|
||||||
}
|
}
|
||||||
results.Resp = resp
|
return result
|
||||||
singleUserResults = append(singleUserResults, results)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &msggateway.OnlineBatchPushOneMsgResp{
|
func (s *Server) SuperGroupOnlineBatchPushOneMsg(ctx context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) {
|
||||||
SinglePushResult: singleUserResults,
|
if len(req.PushToUserIDs) == 0 {
|
||||||
}, nil
|
return &msggateway.OnlineBatchPushOneMsgResp{}, nil
|
||||||
|
}
|
||||||
|
ch := make(chan *msggateway.SingleMsgToUserResults, len(req.PushToUserIDs))
|
||||||
|
var count atomic.Int64
|
||||||
|
count.Add(int64(len(req.PushToUserIDs)))
|
||||||
|
for i := range req.PushToUserIDs {
|
||||||
|
userID := req.PushToUserIDs[i]
|
||||||
|
err := s.queue.PushCtx(ctx, func() {
|
||||||
|
ch <- s.pushToUser(ctx, userID, req.MsgData)
|
||||||
|
if count.Add(-1) == 0 {
|
||||||
|
close(ch)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
if count.Add(-1) == 0 {
|
||||||
|
close(ch)
|
||||||
|
}
|
||||||
|
log.ZError(ctx, "pushToUser MemoryQueue failed", err, "userID", userID)
|
||||||
|
ch <- &msggateway.SingleMsgToUserResults{
|
||||||
|
UserID: userID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resp := &msggateway.OnlineBatchPushOneMsgResp{
|
||||||
|
SinglePushResult: make([]*msggateway.SingleMsgToUserResults, 0, len(req.PushToUserIDs)),
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
log.ZError(ctx, "SuperGroupOnlineBatchPushOneMsg ctx done", context.Cause(ctx))
|
||||||
|
userIDSet := datautil.SliceSet(req.PushToUserIDs)
|
||||||
|
for _, results := range resp.SinglePushResult {
|
||||||
|
delete(userIDSet, results.UserID)
|
||||||
|
}
|
||||||
|
for userID := range userIDSet {
|
||||||
|
resp.SinglePushResult = append(resp.SinglePushResult, &msggateway.SingleMsgToUserResults{
|
||||||
|
UserID: userID,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
case res, ok := <-ch:
|
||||||
|
if !ok {
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
resp.SinglePushResult = append(resp.SinglePushResult, res)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) KickUserOffline(
|
func (s *Server) KickUserOffline(
|
||||||
|
|||||||
@ -50,13 +50,14 @@ func (t *thirdServer) UploadLogs(ctx context.Context, req *third.UploadLogsReq)
|
|||||||
platform := constant.PlatformID2Name[int(req.Platform)]
|
platform := constant.PlatformID2Name[int(req.Platform)]
|
||||||
for _, fileURL := range req.FileURLs {
|
for _, fileURL := range req.FileURLs {
|
||||||
log := relationtb.Log{
|
log := relationtb.Log{
|
||||||
Version: req.Version,
|
|
||||||
SystemType: req.SystemType,
|
|
||||||
Platform: platform,
|
Platform: platform,
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
CreateTime: time.Now(),
|
CreateTime: time.Now(),
|
||||||
Url: fileURL.URL,
|
Url: fileURL.URL,
|
||||||
FileName: fileURL.Filename,
|
FileName: fileURL.Filename,
|
||||||
|
SystemType: req.SystemType,
|
||||||
|
Version: req.Version,
|
||||||
|
Ex: req.Ex,
|
||||||
}
|
}
|
||||||
for i := 0; i < 20; i++ {
|
for i := 0; i < 20; i++ {
|
||||||
id := genLogID()
|
id := genLogID()
|
||||||
|
|||||||
@ -110,6 +110,7 @@ func (u *userDatabase) InitOnce(ctx context.Context, users []*model.User) error
|
|||||||
|
|
||||||
// FindWithError Get the information of the specified user and return an error if the userID is not found.
|
// FindWithError Get the information of the specified user and return an error if the userID is not found.
|
||||||
func (u *userDatabase) FindWithError(ctx context.Context, userIDs []string) (users []*model.User, err error) {
|
func (u *userDatabase) FindWithError(ctx context.Context, userIDs []string) (users []*model.User, err error) {
|
||||||
|
userIDs = datautil.Distinct(userIDs)
|
||||||
users, err = u.cache.GetUsersInfo(ctx, userIDs)
|
users, err = u.cache.GetUsersInfo(ctx, userIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user