mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-25 11:06:43 +08:00
Merge branch 'tuoyun' of github.com:OpenIMSDK/Open-IM-Server into tuoyun
This commit is contained in:
commit
7d8d314962
@ -1 +1 @@
|
|||||||
Subproject commit 992f76df0ee500a0377523b0780d3a85f2275755
|
Subproject commit 1c6c7af5393b3e9eefbaf16b673519ca863a6c2c
|
@ -132,7 +132,7 @@ log:
|
|||||||
storageLocation: ../logs/
|
storageLocation: ../logs/
|
||||||
rotationTime: 24
|
rotationTime: 24
|
||||||
remainRotationCount: 5 #日志数量
|
remainRotationCount: 5 #日志数量
|
||||||
remainLogLevel: 6 #日志级别 6表示全都打印,测试阶段建议设置为6
|
remainLogLevel: 4 #日志级别 6表示全都打印,测试阶段建议设置为6
|
||||||
elasticSearchSwitch: false
|
elasticSearchSwitch: false
|
||||||
elasticSearchAddr: [ 127.0.0.1:9201 ]
|
elasticSearchAddr: [ 127.0.0.1:9201 ]
|
||||||
elasticSearchUser: ""
|
elasticSearchUser: ""
|
||||||
@ -178,10 +178,13 @@ tokenpolicy:
|
|||||||
# Token effective time day as a unit
|
# Token effective time day as a unit
|
||||||
accessExpire: 3650 #token过期时间(天) 默认即可
|
accessExpire: 3650 #token过期时间(天) 默认即可
|
||||||
|
|
||||||
messagecallback: #暂时不要使用 还需完善
|
messagecallback:
|
||||||
|
callbackSwitch: false
|
||||||
callbackUrl: "http://www.xxx.com/msg/judge"
|
callbackUrl: "http://www.xxx.com/msg/judge"
|
||||||
#TimeOut use second as unit
|
#TimeOut use second as unit
|
||||||
callbackTimeOut: 10
|
callbackTimeOut: 10
|
||||||
|
messagejudge:
|
||||||
|
isJudgeFriend: true
|
||||||
# c2c:
|
# c2c:
|
||||||
# callbackBeforeSendMsg:
|
# callbackBeforeSendMsg:
|
||||||
# switch: false
|
# switch: false
|
||||||
@ -255,7 +258,7 @@ notification:
|
|||||||
desc: "groupApplicationAccepted desc"
|
desc: "groupApplicationAccepted desc"
|
||||||
ext: "groupApplicationAccepted ext"
|
ext: "groupApplicationAccepted ext"
|
||||||
defaultTips:
|
defaultTips:
|
||||||
tips: "allowed to join the group" # group info changed by xx
|
tips: "was allowed to join the group" # group info changed by xx
|
||||||
|
|
||||||
groupApplicationRejected:
|
groupApplicationRejected:
|
||||||
conversation:
|
conversation:
|
||||||
@ -267,7 +270,7 @@ notification:
|
|||||||
desc: " desc"
|
desc: " desc"
|
||||||
ext: " ext"
|
ext: " ext"
|
||||||
defaultTips:
|
defaultTips:
|
||||||
tips: "rejected into the group" # group info changed by xx
|
tips: "was rejected into the group" # group info changed by xx
|
||||||
|
|
||||||
groupOwnerTransferred:
|
groupOwnerTransferred:
|
||||||
conversation:
|
conversation:
|
||||||
@ -291,7 +294,7 @@ notification:
|
|||||||
desc: "memberKicked desc"
|
desc: "memberKicked desc"
|
||||||
ext: "memberKicked ext"
|
ext: "memberKicked ext"
|
||||||
defaultTips:
|
defaultTips:
|
||||||
tips: "kicked out of the group" # group info changed by xx
|
tips: "was kicked out of the group" # group info changed by xx
|
||||||
|
|
||||||
memberInvited:
|
memberInvited:
|
||||||
conversation:
|
conversation:
|
||||||
@ -303,7 +306,7 @@ notification:
|
|||||||
desc: "memberInvited desc"
|
desc: "memberInvited desc"
|
||||||
ext: "memberInvited ext"
|
ext: "memberInvited ext"
|
||||||
defaultTips:
|
defaultTips:
|
||||||
tips: "invited into the group" # group info changed by xx
|
tips: "was invited into the group" # group info changed by xx
|
||||||
|
|
||||||
memberEnter:
|
memberEnter:
|
||||||
conversation:
|
conversation:
|
||||||
@ -459,19 +462,20 @@ notification:
|
|||||||
#是否启动demo,如果自身没有账号体系,设置为true
|
#是否启动demo,如果自身没有账号体系,设置为true
|
||||||
demoswitch: true
|
demoswitch: true
|
||||||
demo:
|
demo:
|
||||||
openImDemoPort: [ 42233 ] #demo对外服务端口,默认即可,需要开放此端口或做nginx转发
|
#demo对外服务端口,默认即可,需要开放此端口或做nginx转发
|
||||||
|
openImDemoPort: [ 42233 ]
|
||||||
alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改
|
alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改
|
||||||
accessKeyId: LTAI5tJPkn4HuuePdiLdGqe71
|
accessKeyId: LTAI5tJPkn4HuuePdiLdGqe7
|
||||||
accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV1
|
accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV
|
||||||
signName: OpenIM Corporation
|
signName: 托云信息技术
|
||||||
verificationCodeTemplateCode: SMS_2268101641
|
verificationCodeTemplateCode: SMS_226810164
|
||||||
superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代
|
superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代
|
||||||
# second
|
# second
|
||||||
codeTTL: 60
|
codeTTL: 300
|
||||||
mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改
|
mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改
|
||||||
title: "openIM"
|
title: "openIM"
|
||||||
senderMail: "1765567899@qq.com"
|
senderMail: "765567899@qq.com"
|
||||||
senderAuthorizationCode: "1gxyausfoevlzbfag"
|
senderAuthorizationCode: "gxyausfoevlzbfag"
|
||||||
smtpAddr: "smtp.qq.com"
|
smtpAddr: "smtp.qq.com"
|
||||||
smtpPort: 25 #需开放此端口 出口方向
|
smtpPort: 25 #需开放此端口 出口方向
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ services:
|
|||||||
command: /usr/local/bin/etcd --name etcd0 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 --initial-cluster etcd0=http://0.0.0.0:2380 --initial-cluster-token tkn --initial-cluster-state new
|
command: /usr/local/bin/etcd --name etcd0 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 --initial-cluster etcd0=http://0.0.0.0:2380 --initial-cluster-token tkn --initial-cluster-state new
|
||||||
|
|
||||||
open_im_server:
|
open_im_server:
|
||||||
image: openim/open_im_server:v2.0.0
|
image: openim/open_im_server:v2.0.1
|
||||||
container_name: open_im_server
|
container_name: open_im_server
|
||||||
volumes:
|
volumes:
|
||||||
- ./logs:/Open-IM-Server/logs
|
- ./logs:/Open-IM-Server/logs
|
||||||
|
@ -7,12 +7,14 @@
|
|||||||
package manage
|
package manage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
api "Open_IM/pkg/base_info"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
"Open_IM/pkg/common/token_verify"
|
"Open_IM/pkg/common/token_verify"
|
||||||
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
pbChat "Open_IM/pkg/proto/chat"
|
pbChat "Open_IM/pkg/proto/chat"
|
||||||
|
"Open_IM/pkg/proto/sdk_ws"
|
||||||
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
@ -40,11 +42,13 @@ func newUserSendMsgReq(params *ManagementSendMsgReq) *pbChat.SendMsgReq {
|
|||||||
newContent = utils.StructToJsonString(params.Content)
|
newContent = utils.StructToJsonString(params.Content)
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
options := make(map[string]bool, 2)
|
var options map[string]bool
|
||||||
if params.IsOnlineOnly {
|
if params.IsOnlineOnly {
|
||||||
|
options = make(map[string]bool, 5)
|
||||||
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
|
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
|
||||||
utils.SetSwitchFromOptions(options, constant.IsHistory, false)
|
utils.SetSwitchFromOptions(options, constant.IsHistory, false)
|
||||||
utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
|
utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
|
||||||
|
utils.SetSwitchFromOptions(options, constant.IsSenderSync, false)
|
||||||
}
|
}
|
||||||
pbData := pbChat.SendMsgReq{
|
pbData := pbChat.SendMsgReq{
|
||||||
OperationID: params.OperationID,
|
OperationID: params.OperationID,
|
||||||
@ -152,20 +156,16 @@ func ManagementSendMsg(c *gin.Context) {
|
|||||||
|
|
||||||
log.Info("", "", "api ManagementSendMsg call, api call rpc...")
|
log.Info("", "", "api ManagementSendMsg call, api call rpc...")
|
||||||
|
|
||||||
reply, err := client.SendMsg(context.Background(), pbData)
|
RpcResp, err := client.SendMsg(context.Background(), pbData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error())
|
log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error())
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"})
|
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String())
|
log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String())
|
||||||
|
resp := api.ManagementSendMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, ResultList: server_api_params.UserSendMsgResp{ServerMsgID: RpcResp.ServerMsgID, ClientMsgID: RpcResp.ClientMsgID, SendTime: RpcResp.SendTime}}
|
||||||
c.JSON(http.StatusOK, gin.H{
|
log.Info(params.OperationID, "ManagementSendMsg return", resp)
|
||||||
"errCode": reply.ErrCode,
|
c.JSON(http.StatusOK, resp)
|
||||||
"errMsg": reply.ErrMsg,
|
|
||||||
"sendTime": reply.SendTime,
|
|
||||||
"msgID": reply.ClientMsgID,
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@ package gate
|
|||||||
import (
|
import (
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/statistics"
|
||||||
|
"fmt"
|
||||||
"github.com/go-playground/validator/v10"
|
"github.com/go-playground/validator/v10"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
@ -12,6 +14,7 @@ var (
|
|||||||
validate *validator.Validate
|
validate *validator.Validate
|
||||||
ws WServer
|
ws WServer
|
||||||
rpcSvr RPCServer
|
rpcSvr RPCServer
|
||||||
|
count uint64
|
||||||
)
|
)
|
||||||
|
|
||||||
func Init(rpcPort, wsPort int) {
|
func Init(rpcPort, wsPort int) {
|
||||||
@ -19,6 +22,7 @@ func Init(rpcPort, wsPort int) {
|
|||||||
log.NewPrivateLog(config.Config.ModuleName.LongConnSvrName)
|
log.NewPrivateLog(config.Config.ModuleName.LongConnSvrName)
|
||||||
rwLock = new(sync.RWMutex)
|
rwLock = new(sync.RWMutex)
|
||||||
validate = validator.New()
|
validate = validator.New()
|
||||||
|
statistics.NewStatistics(&count, config.Config.ModuleName.LongConnSvrName, fmt.Sprintf("%d second recv to msg_gateway count", count), 10)
|
||||||
ws.onInit(wsPort)
|
ws.onInit(wsPort)
|
||||||
rpcSvr.onInit(rpcPort)
|
rpcSvr.onInit(rpcPort)
|
||||||
}
|
}
|
||||||
|
@ -142,6 +142,7 @@ func (ws *WServer) pullMsgBySeqListResp(conn *UserConn, m *Req, pb *sdk_ws.PullM
|
|||||||
|
|
||||||
}
|
}
|
||||||
func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) {
|
func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) {
|
||||||
|
count++
|
||||||
log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID)
|
log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID)
|
||||||
nReply := new(pbChat.SendMsgResp)
|
nReply := new(pbChat.SendMsgResp)
|
||||||
isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg)
|
isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg)
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
pbMsg "Open_IM/pkg/proto/chat"
|
pbMsg "Open_IM/pkg/proto/chat"
|
||||||
pbPush "Open_IM/pkg/proto/push"
|
pbPush "Open_IM/pkg/proto/push"
|
||||||
|
"Open_IM/pkg/statistics"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
"github.com/Shopify/sarama"
|
"github.com/Shopify/sarama"
|
||||||
@ -20,9 +21,14 @@ type fcb func(msg []byte, msgKey string)
|
|||||||
type HistoryConsumerHandler struct {
|
type HistoryConsumerHandler struct {
|
||||||
msgHandle map[string]fcb
|
msgHandle map[string]fcb
|
||||||
historyConsumerGroup *kfk.MConsumerGroup
|
historyConsumerGroup *kfk.MConsumerGroup
|
||||||
|
singleMsgCount uint64
|
||||||
|
groupMsgCount uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mc *HistoryConsumerHandler) Init() {
|
func (mc *HistoryConsumerHandler) Init() {
|
||||||
|
statistics.NewStatistics(&mc.singleMsgCount, config.Config.ModuleName.MsgTransferName, "singleMsgCount insert to mongo ", 10)
|
||||||
|
statistics.NewStatistics(&mc.groupMsgCount, config.Config.ModuleName.MsgTransferName, "groupMsgCount insert to mongo ", 10)
|
||||||
|
|
||||||
mc.msgHandle = make(map[string]fcb)
|
mc.msgHandle = make(map[string]fcb)
|
||||||
mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2Mongo
|
mc.msgHandle[config.Config.Kafka.Ws2mschat.Topic] = mc.handleChatWs2Mongo
|
||||||
mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0,
|
mc.historyConsumerGroup = kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V0_10_2_0,
|
||||||
@ -55,6 +61,7 @@ func (mc *HistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey string)
|
|||||||
log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String())
|
log.NewError(operationID, "single data insert to mongo err", err.Error(), msgFromMQ.String())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
mc.singleMsgCount++
|
||||||
log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", utils.GetCurrentTimestampByNano()-time)
|
log.NewDebug(msgFromMQ.OperationID, "sendMessageToPush cost time ", utils.GetCurrentTimestampByNano()-time)
|
||||||
}
|
}
|
||||||
if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID {
|
if !isSenderSync && msgKey == msgFromMQ.MsgData.SendID {
|
||||||
@ -70,6 +77,7 @@ func (mc *HistoryConsumerHandler) handleChatWs2Mongo(msg []byte, msgKey string)
|
|||||||
log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error())
|
log.NewError(operationID, "group data insert to mongo err", msgFromMQ.String(), msgFromMQ.MsgData.RecvID, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
mc.groupMsgCount++
|
||||||
}
|
}
|
||||||
go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID)
|
go sendMessageToPush(&msgFromMQ, msgFromMQ.MsgData.RecvID)
|
||||||
default:
|
default:
|
||||||
|
@ -20,6 +20,6 @@ func Init() {
|
|||||||
}
|
}
|
||||||
func Run() {
|
func Run() {
|
||||||
//register mysqlConsumerHandler to
|
//register mysqlConsumerHandler to
|
||||||
go persistentCH.persistentConsumerGroup.RegisterHandleAndConsumer(&persistentCH)
|
//go persistentCH.persistentConsumerGroup.RegisterHandleAndConsumer(&persistentCH)
|
||||||
go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH)
|
go historyCH.historyConsumerGroup.RegisterHandleAndConsumer(&historyCH)
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,8 @@ import (
|
|||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/kafka"
|
"Open_IM/pkg/common/kafka"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/statistics"
|
||||||
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -18,6 +20,7 @@ var (
|
|||||||
pushCh PushConsumerHandler
|
pushCh PushConsumerHandler
|
||||||
pushTerminal []int32
|
pushTerminal []int32
|
||||||
producer *kafka.Producer
|
producer *kafka.Producer
|
||||||
|
count uint64
|
||||||
)
|
)
|
||||||
|
|
||||||
func Init(rpcPort int) {
|
func Init(rpcPort int) {
|
||||||
@ -28,6 +31,7 @@ func Init(rpcPort int) {
|
|||||||
}
|
}
|
||||||
func init() {
|
func init() {
|
||||||
producer = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic)
|
producer = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic)
|
||||||
|
statistics.NewStatistics(&count, config.Config.ModuleName.PushName, fmt.Sprintf("%d second push to msg_gateway count", 10), 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Run() {
|
func Run() {
|
||||||
|
@ -7,16 +7,12 @@
|
|||||||
package logic
|
package logic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
push "Open_IM/internal/push/jpush"
|
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
"Open_IM/pkg/grpc-etcdv3/getcdv3"
|
||||||
pbPush "Open_IM/pkg/proto/push"
|
pbPush "Open_IM/pkg/proto/push"
|
||||||
pbRelay "Open_IM/pkg/proto/relay"
|
pbRelay "Open_IM/pkg/proto/relay"
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -34,7 +30,7 @@ type AtContent struct {
|
|||||||
|
|
||||||
func MsgToUser(pushMsg *pbPush.PushMsgReq) {
|
func MsgToUser(pushMsg *pbPush.PushMsgReq) {
|
||||||
var wsResult []*pbRelay.SingleMsgToUser
|
var wsResult []*pbRelay.SingleMsgToUser
|
||||||
isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush)
|
//isOfflinePush := utils.GetSwitchFromOptions(pushMsg.MsgData.Options, constant.IsOfflinePush)
|
||||||
log.InfoByKv("Get msg from msg_transfer And push msg", pushMsg.OperationID, "PushData", pushMsg.String())
|
log.InfoByKv("Get msg from msg_transfer And push msg", pushMsg.OperationID, "PushData", pushMsg.String())
|
||||||
grpcCons := getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName)
|
grpcCons := getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName)
|
||||||
//Online push message
|
//Online push message
|
||||||
@ -51,66 +47,67 @@ func MsgToUser(pushMsg *pbPush.PushMsgReq) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.InfoByKv("push_result", pushMsg.OperationID, "result", wsResult, "sendData", pushMsg.MsgData)
|
log.InfoByKv("push_result", pushMsg.OperationID, "result", wsResult, "sendData", pushMsg.MsgData)
|
||||||
if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID {
|
count++
|
||||||
for _, v := range wsResult {
|
//if isOfflinePush && pushMsg.PushToUserID != pushMsg.MsgData.SendID {
|
||||||
if v.ResultCode == 0 {
|
// for _, v := range wsResult {
|
||||||
continue
|
// if v.ResultCode == 0 {
|
||||||
}
|
// continue
|
||||||
//supported terminal
|
// }
|
||||||
for _, t := range pushTerminal {
|
// //supported terminal
|
||||||
if v.RecvPlatFormID == t {
|
// for _, t := range pushTerminal {
|
||||||
//Use offline push messaging
|
// if v.RecvPlatFormID == t {
|
||||||
var UIDList []string
|
// //Use offline push messaging
|
||||||
UIDList = append(UIDList, v.RecvID)
|
// var UIDList []string
|
||||||
customContent := OpenIMContent{
|
// UIDList = append(UIDList, v.RecvID)
|
||||||
SessionType: int(pushMsg.MsgData.SessionType),
|
// customContent := OpenIMContent{
|
||||||
From: pushMsg.MsgData.SendID,
|
// SessionType: int(pushMsg.MsgData.SessionType),
|
||||||
To: pushMsg.MsgData.RecvID,
|
// From: pushMsg.MsgData.SendID,
|
||||||
Seq: pushMsg.MsgData.Seq,
|
// To: pushMsg.MsgData.RecvID,
|
||||||
}
|
// Seq: pushMsg.MsgData.Seq,
|
||||||
bCustomContent, _ := json.Marshal(customContent)
|
// }
|
||||||
jsonCustomContent := string(bCustomContent)
|
// bCustomContent, _ := json.Marshal(customContent)
|
||||||
var content string
|
// jsonCustomContent := string(bCustomContent)
|
||||||
if pushMsg.MsgData.OfflinePushInfo != nil {
|
// var content string
|
||||||
content = pushMsg.MsgData.OfflinePushInfo.Title
|
// if pushMsg.MsgData.OfflinePushInfo != nil {
|
||||||
|
// content = pushMsg.MsgData.OfflinePushInfo.Title
|
||||||
} else {
|
//
|
||||||
switch pushMsg.MsgData.ContentType {
|
// } else {
|
||||||
case constant.Text:
|
// switch pushMsg.MsgData.ContentType {
|
||||||
content = constant.ContentType2PushContent[constant.Text]
|
// case constant.Text:
|
||||||
case constant.Picture:
|
// content = constant.ContentType2PushContent[constant.Text]
|
||||||
content = constant.ContentType2PushContent[constant.Picture]
|
// case constant.Picture:
|
||||||
case constant.Voice:
|
// content = constant.ContentType2PushContent[constant.Picture]
|
||||||
content = constant.ContentType2PushContent[constant.Voice]
|
// case constant.Voice:
|
||||||
case constant.Video:
|
// content = constant.ContentType2PushContent[constant.Voice]
|
||||||
content = constant.ContentType2PushContent[constant.Video]
|
// case constant.Video:
|
||||||
case constant.File:
|
// content = constant.ContentType2PushContent[constant.Video]
|
||||||
content = constant.ContentType2PushContent[constant.File]
|
// case constant.File:
|
||||||
case constant.AtText:
|
// content = constant.ContentType2PushContent[constant.File]
|
||||||
a := AtContent{}
|
// case constant.AtText:
|
||||||
_ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a)
|
// a := AtContent{}
|
||||||
if utils.IsContain(v.RecvID, a.AtUserList) {
|
// _ = utils.JsonStringToStruct(string(pushMsg.MsgData.Content), &a)
|
||||||
content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common]
|
// if utils.IsContain(v.RecvID, a.AtUserList) {
|
||||||
} else {
|
// content = constant.ContentType2PushContent[constant.AtText] + constant.ContentType2PushContent[constant.Common]
|
||||||
content = constant.ContentType2PushContent[constant.GroupMsg]
|
// } else {
|
||||||
}
|
// content = constant.ContentType2PushContent[constant.GroupMsg]
|
||||||
default:
|
// }
|
||||||
content = constant.ContentType2PushContent[constant.Common]
|
// default:
|
||||||
}
|
// content = constant.ContentType2PushContent[constant.Common]
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
pushResult, err := push.JGAccountListPush(UIDList, content, jsonCustomContent, constant.PlatformIDToName(t))
|
//
|
||||||
if err != nil {
|
// pushResult, err := push.JGAccountListPush(UIDList, content, jsonCustomContent, constant.PlatformIDToName(t))
|
||||||
log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error(), constant.PlatformIDToName(t))
|
// if err != nil {
|
||||||
} else {
|
// log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error(), constant.PlatformIDToName(t))
|
||||||
log.NewDebug(pushMsg.OperationID, "offline push return result is ", string(pushResult), pushMsg.MsgData, constant.PlatformIDToName(t))
|
// } else {
|
||||||
}
|
// log.NewDebug(pushMsg.OperationID, "offline push return result is ", string(pushResult), pushMsg.MsgData, constant.PlatformIDToName(t))
|
||||||
|
// }
|
||||||
}
|
//
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
}
|
//
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
//func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) {
|
//func SendMsgByWS(m *pbChat.WSToMsgSvrChatMsg) {
|
||||||
|
@ -245,7 +245,7 @@ func (rpc *rpcChat) sendMsgToKafka(m *pbChat.MsgDataToMQ, key string) error {
|
|||||||
}
|
}
|
||||||
func GetMsgID(sendID string) string {
|
func GetMsgID(sendID string) string {
|
||||||
t := time.Now().Format("2006-01-02 15:04:05")
|
t := time.Now().Format("2006-01-02 15:04:05")
|
||||||
return t + "-" + sendID + "-" + strconv.Itoa(rand.Int())
|
return utils.Md5(t + "-" + sendID + "-" + strconv.Itoa(rand.Int()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func returnMsg(replay *pbChat.SendMsgResp, pb *pbChat.SendMsgReq, errCode int32, errMsg, serverMsgID string, sendTime int64) (*pbChat.SendMsgResp, error) {
|
func returnMsg(replay *pbChat.SendMsgResp, pb *pbChat.SendMsgReq, errCode int32, errMsg, serverMsgID string, sendTime int64) (*pbChat.SendMsgResp, error) {
|
||||||
|
@ -2,6 +2,7 @@ package base_info
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
pbRelay "Open_IM/pkg/proto/relay"
|
pbRelay "Open_IM/pkg/proto/relay"
|
||||||
|
"Open_IM/pkg/proto/sdk_ws"
|
||||||
pbUser "Open_IM/pkg/proto/user"
|
pbUser "Open_IM/pkg/proto/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -36,3 +37,8 @@ type AccountCheckResp struct {
|
|||||||
CommResp
|
CommResp
|
||||||
ResultList []*pbUser.AccountCheckResp_SingleUserStatus `json:"data"`
|
ResultList []*pbUser.AccountCheckResp_SingleUserStatus `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ManagementSendMsgResp struct {
|
||||||
|
CommResp
|
||||||
|
ResultList server_api_params.UserSendMsgResp `json:"data"`
|
||||||
|
}
|
||||||
|
@ -10,8 +10,8 @@ type GetUsersInfoReq struct {
|
|||||||
}
|
}
|
||||||
type GetUsersInfoResp struct {
|
type GetUsersInfoResp struct {
|
||||||
CommResp
|
CommResp
|
||||||
UserInfoList []*open_im_sdk.PublicUserInfo
|
UserInfoList []*open_im_sdk.PublicUserInfo `json:"-"`
|
||||||
Data []map[string]interface{} `json:"data"`
|
Data []map[string]interface{} `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateSelfUserInfoReq struct {
|
type UpdateSelfUserInfoReq struct {
|
||||||
|
@ -11,7 +11,7 @@ func GetRegister(account string) (*db.Register, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var r db.Register
|
var r db.Register
|
||||||
return &r, dbConn.Debug().Table("registers").Where("account = ?",
|
return &r, dbConn.Table("registers").Where("account = ?",
|
||||||
account).Take(&r).Error
|
account).Take(&r).Error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ func GetFriendRelationshipFromFriend(OwnerUserID, FriendUserID string) (*db.Frie
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var friend db.Friend
|
var friend db.Friend
|
||||||
err = dbConn.Table("friends").Where("owner_user_id=? and friend_user_id=?", OwnerUserID, FriendUserID).Find(&friend).Error
|
err = dbConn.Table("friends").Where("owner_user_id=? and friend_user_id=?", OwnerUserID, FriendUserID).Take(&friend).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ func GetFriendApplicationByBothUserID(FromUserID, ToUserID string) (*db.FriendRe
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var friendRequest db.FriendRequest
|
var friendRequest db.FriendRequest
|
||||||
err = dbConn.Table("friend_requests").Where("from_user_id=? and to_user_id=?", FromUserID, ToUserID).Find(&friendRequest).Error
|
err = dbConn.Table("friend_requests").Where("from_user_id=? and to_user_id=?", FromUserID, ToUserID).Take(&friendRequest).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db"
|
"Open_IM/pkg/common/db"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -43,6 +44,7 @@ func GetGroupMemberListByUserID(userID string) ([]db.GroupMember, error) {
|
|||||||
}
|
}
|
||||||
var groupMemberList []db.GroupMember
|
var groupMemberList []db.GroupMember
|
||||||
err = dbConn.Table("group_members").Where("user_id=?", userID).Find(&groupMemberList).Error
|
err = dbConn.Table("group_members").Where("user_id=?", userID).Find(&groupMemberList).Error
|
||||||
|
//err = dbConn.Table("group_members").Where("user_id=?", userID).Take(&groupMemberList).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -82,7 +84,7 @@ func GetGroupMemberInfoByGroupIDAndUserID(groupID, userID string) (*db.GroupMemb
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var groupMember db.GroupMember
|
var groupMember db.GroupMember
|
||||||
err = dbConn.Table("group_members").Where("group_id=? and user_id=? ", groupID, userID).Limit(1).Find(&groupMember).Error
|
err = dbConn.Table("group_members").Where("group_id=? and user_id=? ", groupID, userID).Limit(1).Take(&groupMember).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -149,7 +151,8 @@ func GetGroupOwnerInfoByGroupID(groupID string) (*db.GroupMember, error) {
|
|||||||
return &v, nil
|
return &v, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, nil
|
|
||||||
|
return nil, utils.Wrap(errors.New("no owner"), "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsExistGroupMember(groupID, userID string) bool {
|
func IsExistGroupMember(groupID, userID string) bool {
|
||||||
|
@ -45,7 +45,7 @@ func GetGroupInfoByGroupID(groupId string) (*db.Group, error) {
|
|||||||
return nil, utils.Wrap(err, "")
|
return nil, utils.Wrap(err, "")
|
||||||
}
|
}
|
||||||
var groupInfo db.Group
|
var groupInfo db.Group
|
||||||
err = dbConn.Table("groups").Where("group_id=?", groupId).Find(&groupInfo).Error
|
err = dbConn.Table("groups").Where("group_id=?", groupId).Take(&groupInfo).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -86,11 +86,10 @@ func GetGroups(pageNumber, showNumber int) ([]db.Group, error) {
|
|||||||
return groups, nil
|
return groups, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func OperateGroupStatus(groupId string, groupStatus int32) error {
|
func OperateGroupStatus(groupId string, groupStatus int32) error {
|
||||||
group := db.Group{
|
group := db.Group{
|
||||||
GroupID: groupId,
|
GroupID: groupId,
|
||||||
Status: groupStatus,
|
Status: groupStatus,
|
||||||
}
|
}
|
||||||
if err := SetGroupInfo(group); err != nil {
|
if err := SetGroupInfo(group); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -98,7 +97,6 @@ func OperateGroupStatus(groupId string, groupStatus int32) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func DeleteGroup(groupId string) error {
|
func DeleteGroup(groupId string) error {
|
||||||
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
|
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -129,15 +127,14 @@ func OperateGroupRole(userId, groupId string, roleLevel int32) (string, string,
|
|||||||
updateInfo := db.GroupMember{
|
updateInfo := db.GroupMember{
|
||||||
RoleLevel: roleLevel,
|
RoleLevel: roleLevel,
|
||||||
}
|
}
|
||||||
groupMaster := db.GroupMember{
|
groupMaster := db.GroupMember{}
|
||||||
}
|
|
||||||
switch roleLevel {
|
switch roleLevel {
|
||||||
case constant.GroupOwner:
|
case constant.GroupOwner:
|
||||||
err = dbConn.Transaction(func(tx *gorm.DB) error {
|
err = dbConn.Transaction(func(tx *gorm.DB) error {
|
||||||
result := dbConn.Table("group_members").Where("group_id = ? and role_level = ?", groupId, constant.GroupOwner).First(&groupMaster).Update(&db.GroupMember{
|
result := dbConn.Table("group_members").Where("group_id = ? and role_level = ?", groupId, constant.GroupOwner).First(&groupMaster).Update(&db.GroupMember{
|
||||||
RoleLevel: constant.GroupOrdinaryUsers,
|
RoleLevel: constant.GroupOrdinaryUsers,
|
||||||
})
|
})
|
||||||
if result.Error != nil {
|
if result.Error != nil {
|
||||||
return result.Error
|
return result.Error
|
||||||
}
|
}
|
||||||
if result.RowsAffected == 0 {
|
if result.RowsAffected == 0 {
|
||||||
@ -145,7 +142,7 @@ func OperateGroupRole(userId, groupId string, roleLevel int32) (string, string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
result = dbConn.Table("group_members").First(&groupMember).Update(updateInfo)
|
result = dbConn.Table("group_members").First(&groupMember).Update(updateInfo)
|
||||||
if result.Error != nil {
|
if result.Error != nil {
|
||||||
return result.Error
|
return result.Error
|
||||||
}
|
}
|
||||||
if result.RowsAffected == 0 {
|
if result.RowsAffected == 0 {
|
||||||
@ -161,7 +158,7 @@ func OperateGroupRole(userId, groupId string, roleLevel int32) (string, string,
|
|||||||
return result.Error
|
return result.Error
|
||||||
}
|
}
|
||||||
if result.RowsAffected == 0 {
|
if result.RowsAffected == 0 {
|
||||||
return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId))
|
return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId))
|
||||||
}
|
}
|
||||||
if groupMaster.UserID == userId {
|
if groupMaster.UserID == userId {
|
||||||
return errors.New(fmt.Sprintf("user %s is master of %s, cant set to ordinary user", userId, groupId))
|
return errors.New(fmt.Sprintf("user %s is master of %s, cant set to ordinary user", userId, groupId))
|
||||||
@ -171,7 +168,7 @@ func OperateGroupRole(userId, groupId string, roleLevel int32) (string, string,
|
|||||||
return result.Error
|
return result.Error
|
||||||
}
|
}
|
||||||
if result.RowsAffected == 0 {
|
if result.RowsAffected == 0 {
|
||||||
return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId))
|
return errors.New(fmt.Sprintf("user %s not exist in group %s or already operate", userId, groupId))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -219,4 +216,4 @@ func GetGroupMaster(groupId string) (db.GroupMember, error) {
|
|||||||
return groupMember, err
|
return groupMember, err
|
||||||
}
|
}
|
||||||
return groupMember, nil
|
return groupMember, nil
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ func GetGroupRequestByGroupIDAndUserID(groupID, userID string) (*db.GroupRequest
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var groupRequest db.GroupRequest
|
var groupRequest db.GroupRequest
|
||||||
err = dbConn.Table("group_requests").Where("user_id=? and group_id=?", userID, groupID).Find(&groupRequest).Error
|
err = dbConn.Table("group_requests").Where("user_id=? and group_id=?", userID, groupID).Take(&groupRequest).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -128,7 +128,6 @@ func GetUserReqGroupByUserID(userID string) ([]db.GroupRequest, error) {
|
|||||||
return groupRequestList, err
|
return groupRequestList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
//func GroupApplicationResponse(pb *group.GroupApplicationResponseReq) (*group.CommonResp, error) {
|
//func GroupApplicationResponse(pb *group.GroupApplicationResponseReq) (*group.CommonResp, error) {
|
||||||
//
|
//
|
||||||
|
@ -51,18 +51,6 @@ func UserRegister(user db.User) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type User struct {
|
|
||||||
UserID string `gorm:"column:user_id;primaryKey;"`
|
|
||||||
Nickname string `gorm:"column:name"`
|
|
||||||
FaceUrl string `gorm:"column:icon"`
|
|
||||||
Gender int32 `gorm:"column:gender"`
|
|
||||||
PhoneNumber string `gorm:"column:phone_number"`
|
|
||||||
Birth string `gorm:"column:birth"`
|
|
||||||
Email string `gorm:"column:email"`
|
|
||||||
Ex string `gorm:"column:ex"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func DeleteUser(userID string) (i int64) {
|
func DeleteUser(userID string) (i int64) {
|
||||||
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
|
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -78,7 +66,7 @@ func GetUserByUserID(userID string) (*db.User, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var user db.User
|
var user db.User
|
||||||
err = dbConn.Table("users").Where("user_id=?", userID).First(&user).Error
|
err = dbConn.Table("users").Where("user_id=?", userID).Take(&user).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package getcdv3
|
package getcdv3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go.etcd.io/etcd/clientv3"
|
"go.etcd.io/etcd/clientv3"
|
||||||
@ -39,9 +40,9 @@ func RegisterEtcd4Unique(schema, etcdAddr, myHost string, myPort int, serviceNam
|
|||||||
func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName string, ttl int) error {
|
func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName string, ttl int) error {
|
||||||
cli, err := clientv3.New(clientv3.Config{
|
cli, err := clientv3.New(clientv3.Config{
|
||||||
Endpoints: strings.Split(etcdAddr, ","), DialTimeout: 5 * time.Second})
|
Endpoints: strings.Split(etcdAddr, ","), DialTimeout: 5 * time.Second})
|
||||||
fmt.Println("RegisterEtcd")
|
|
||||||
|
log.Info("", "RegisterEtcd, ", schema, etcdAddr, myHost, myPort, serviceName, ttl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// return fmt.Errorf("grpclb: create clientv3 client failed: %v", err)
|
|
||||||
return fmt.Errorf("create etcd clientv3 client failed, errmsg:%v, etcd addr:%s", err, etcdAddr)
|
return fmt.Errorf("create etcd clientv3 client failed, errmsg:%v, etcd addr:%s", err, etcdAddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,15 +67,16 @@ func RegisterEtcd(schema, etcdAddr, myHost string, myPort int, serviceName strin
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("keepalive failed, errmsg:%v, lease id:%d", err, resp.ID)
|
return fmt.Errorf("keepalive failed, errmsg:%v, lease id:%d", err, resp.ID)
|
||||||
}
|
}
|
||||||
fmt.Println("RegisterEtcd ok")
|
log.Info("", "RegisterEtcd ok ")
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case v, ok := <-kresp:
|
case v, ok := <-kresp:
|
||||||
if ok == true {
|
if ok == true {
|
||||||
// fmt.Println(" kresp ok ", v)
|
log.Debug("", "KeepAlive kresp ok", v, schema, etcdAddr, myHost, myPort, serviceName, ttl)
|
||||||
} else {
|
} else {
|
||||||
fmt.Println(" kresp failed ", v)
|
log.Error("", "KeepAlive kresp failed", schema, etcdAddr, myHost, myPort, serviceName, ttl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package getcdv3
|
package getcdv3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go.etcd.io/etcd/clientv3"
|
"go.etcd.io/etcd/clientv3"
|
||||||
@ -102,7 +103,7 @@ func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts re
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
var addrList []resolver.Address
|
var addrList []resolver.Address
|
||||||
for i := range resp.Kvs {
|
for i := range resp.Kvs {
|
||||||
fmt.Println("init addr: ", string(resp.Kvs[i].Value))
|
log.Debug("", "init addr: ", string(resp.Kvs[i].Value))
|
||||||
addrList = append(addrList, resolver.Address{Addr: string(resp.Kvs[i].Value)})
|
addrList = append(addrList, resolver.Address{Addr: string(resp.Kvs[i].Value)})
|
||||||
}
|
}
|
||||||
r.cc.UpdateState(resolver.State{Addresses: addrList})
|
r.cc.UpdateState(resolver.State{Addresses: addrList})
|
||||||
@ -148,27 +149,27 @@ func (r *Resolver) watch(prefix string, addrList []resolver.Address) {
|
|||||||
if !exists(addrList, string(ev.Kv.Value)) {
|
if !exists(addrList, string(ev.Kv.Value)) {
|
||||||
flag = 1
|
flag = 1
|
||||||
addrList = append(addrList, resolver.Address{Addr: string(ev.Kv.Value)})
|
addrList = append(addrList, resolver.Address{Addr: string(ev.Kv.Value)})
|
||||||
fmt.Println("after add, new list: ", addrList)
|
log.Debug("", "after add, new list: ", addrList)
|
||||||
}
|
}
|
||||||
case mvccpb.DELETE:
|
case mvccpb.DELETE:
|
||||||
fmt.Println("remove addr key: ", string(ev.Kv.Key), "value:", string(ev.Kv.Value))
|
log.Debug("remove addr key: ", string(ev.Kv.Key), "value:", string(ev.Kv.Value))
|
||||||
i := strings.LastIndexAny(string(ev.Kv.Key), "/")
|
i := strings.LastIndexAny(string(ev.Kv.Key), "/")
|
||||||
if i < 0 {
|
if i < 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
t := string(ev.Kv.Key)[i+1:]
|
t := string(ev.Kv.Key)[i+1:]
|
||||||
fmt.Println("remove addr key: ", string(ev.Kv.Key), "value:", string(ev.Kv.Value), "addr:", t)
|
log.Debug("remove addr key: ", string(ev.Kv.Key), "value:", string(ev.Kv.Value), "addr:", t)
|
||||||
if s, ok := remove(addrList, t); ok {
|
if s, ok := remove(addrList, t); ok {
|
||||||
flag = 1
|
flag = 1
|
||||||
addrList = s
|
addrList = s
|
||||||
fmt.Println("after remove, new list: ", addrList)
|
log.Debug("after remove, new list: ", addrList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if flag == 1 {
|
if flag == 1 {
|
||||||
r.cc.UpdateState(resolver.State{Addresses: addrList})
|
r.cc.UpdateState(resolver.State{Addresses: addrList})
|
||||||
fmt.Println("update: ", addrList)
|
log.Debug("update: ", addrList)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -176,7 +177,7 @@ func (r *Resolver) watch(prefix string, addrList []resolver.Address) {
|
|||||||
func GetConn4Unique(schema, etcdaddr, servicename string) []*grpc.ClientConn {
|
func GetConn4Unique(schema, etcdaddr, servicename string) []*grpc.ClientConn {
|
||||||
gEtcdCli, err := clientv3.New(clientv3.Config{Endpoints: strings.Split(etcdaddr, ",")})
|
gEtcdCli, err := clientv3.New(clientv3.Config{Endpoints: strings.Split(etcdaddr, ",")})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("eeeeeeeeeeeee", err.Error())
|
log.Error("clientv3.New failed", err.Error())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,7 +201,7 @@ func GetConn4Unique(schema, etcdaddr, servicename string) []*grpc.ClientConn {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
gEtcdCli.Close()
|
gEtcdCli.Close()
|
||||||
fmt.Println("rrrrrrrrrrr", err.Error())
|
log.Error("gEtcdCli.Get failed", err.Error())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
gEtcdCli.Close()
|
gEtcdCli.Close()
|
||||||
@ -236,7 +237,7 @@ func GetConnPool(schema, etcdaddr, servicename string) (*ClientConn, error) {
|
|||||||
ctx, _ := context.WithDeadline(context.Background(), time.Now().Add(1000*time.Millisecond))
|
ctx, _ := context.WithDeadline(context.Background(), time.Now().Add(1000*time.Millisecond))
|
||||||
|
|
||||||
c, err := p.Get(ctx)
|
c, err := p.Get(ctx)
|
||||||
fmt.Println(err)
|
log.Info("", "Get ", err)
|
||||||
return c, err
|
return c, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
33
pkg/statistics/statistics.go
Normal file
33
pkg/statistics/statistics.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
package statistics
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Statistics struct {
|
||||||
|
Count *uint64
|
||||||
|
ModuleName string
|
||||||
|
PrintArgs string
|
||||||
|
SleepTime int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Statistics) output() {
|
||||||
|
t := time.NewTicker(time.Duration(s.SleepTime) * time.Second)
|
||||||
|
defer t.Stop()
|
||||||
|
var sum uint64
|
||||||
|
for {
|
||||||
|
sum = *s.Count
|
||||||
|
select {
|
||||||
|
case <-t.C:
|
||||||
|
}
|
||||||
|
log.NewWarn(s.ModuleName, s.PrintArgs, *s.Count-sum)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStatistics(count *uint64, moduleName, printArgs string, sleepTime int) *Statistics {
|
||||||
|
p := &Statistics{Count: count, ModuleName: moduleName, SleepTime: sleepTime, PrintArgs: printArgs}
|
||||||
|
go p.output()
|
||||||
|
return p
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user