# Copyright © 2023 OpenIM. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#OpenIM config


#---------------Infrastructure configuration---------------------#
zookeeper:
  schema: openim                          #不建议修改
  address: [ 127.0.0.1:2181 ]             #
  username:                               #用户名
  password:                               #密码

mysql:
  address: [ 127.0.0.1:13306 ]            #目前仅支持单机
  username: root                          #用户名
  password: openIM123                     #密码
  database: openIM_v3                     #不建议修改
  maxOpenConn: 1000                       #最大连接数
  maxIdleConn: 100                        #最大空闲连接数
  maxLifeTime: 60                         #连接可以重复使用的最长时间(秒)
  logLevel: 4                             #日志级别 1=slient 2=error 3=warn 4=info
  slowThreshold: 500                      #慢语句阈值 (毫秒)

mongo:
  uri:                                    #不为空则直接使用该值
  address: [ 127.0.0.1:37017 ]            #单机时为mongo地址,使用分片集群时,为mongos地址
  database: openIM_v3                      #mongo db 默认即可
  username: root                          #用户名
  password: openIM123                     #密码
  maxPoolSize: 100

redis:
  address: [ 127.0.0.1:16379 ]            #
  username:                               #only redis version 6.0+ need username
  password: openIM123                     #密码

kafka:
  username:                               #用户名
  password:                               #密码
  addr: [ 127.0.0.1:9092 ]                #
  latestMsgToRedis:
    topic: "latestMsgToRedis"             #不建议修改
  offlineMsgToMongo:
    topic: "offlineMsgToMongoMysql"       #不建议修改
  msgToPush:
    topic: "msgToPush"                    #不建议修改
  msgToModify:
    topic: "msgToModify"                  #不建议修改
  consumerGroupID: #消费者组,不建议修改
    msgToRedis: redis                     #
    msgToMongo: mongo                     #
    msgToMySql: mysql                     #
    msgToPush: push                       #
    msgToModify: modify                   #


rpc:
  registerIP:                             #作为rpc启动时,注册到zookeeper的IP,api/gateway能访问到此ip和对应的rpcPort中的端口
  listenIP:                               #默认为0.0.0.0


api:
  openImApiPort: [ 10002 ]                #api服务端口
  listenIP:                               #默认为0.0.0.0

object:
  enable: minio                           #使用minio
  apiURL: http://127.0.0.1:10002/third/object
  minio:
    tempBucket: "openim"                  #不建议修改
    dataBucket: "openim"                  #不建议修改
    location: us-east-1                   #不建议修改
    endpoint: http://127.0.0.1:10005      #minio对外服务的ip和端口,app要能访问此ip和端口
    accessKeyID: root                     #ID
    secretAccessKey: openIM123            #秘钥
    isDistributedMod: false               #是否分布式多硬盘部署,如果是多硬盘部署,需要修改为true
  tencent: #tencent cos
    appID:
    region:
    bucket:
    secretID:
    secretKey:
  ali: #ali oss
    regionID:
    accessKeyID:
    accessKeySecret:
    stsEndpoint:
    ossEndpoint:
    bucket:
    finalHost:
    stsDurationSeconds:
    OssRoleArn:
  aws:
    accessKeyID:
    accessKeySecret:
    region:
    bucket:
    finalHost:
    roleArn:
    externalId:
    roleSessionName:

rpcPort: #rpc服务端口,不建议修改,端口由脚本读取后传入程序,如启动多个程序,只需要填入多个端口,用逗号隔开,如  [10110, 10111]
  openImUserPort: [ 10110 ]
  openImFriendPort: [ 10120 ]
  openImMessagePort: [ 10130 ]
  openImMessageGatewayPort: [ 10140 ]
  openImGroupPort: [ 10150 ]
  openImAuthPort: [ 10160 ]
  openImPushPort: [ 10170 ]
  openImConversationPort: [ 10180 ]
  openImThirdPort: [ 10190 ]

rpcRegisterName: #rpc注册服务名,不建议修改
  openImUserName: User
  openImFriendName: Friend
  openImMsgName: Msg
  openImPushName: Push
  openImMessageGatewayName: MessageGateway
  openImGroupName: Group
  openImAuthName: Auth
  openImConversationName: Conversation
  openImThirdName: Third

log:
  storageLocation: ../logs/           #存放目录
  rotationTime: 24                    #日志旋转时间
  remainRotationCount: 2              #日志数量
  remainLogLevel: 6                   #日志级别 6表示全都打印,
  isStdout: false
  isJson: false
  withStack: false

longConnSvr:
  openImWsPort: [ 10001 ]             #msg_gateway的websocket端口
  websocketMaxConnNum: 100000         #websocket最大连接数
  websocketMaxMsgLen: 4096            #websocket请求包最大长度
  websocketTimeout: 10                #websocket连接握手超时时间

push:
  enable: getui
  geTui: #个推离线推送
    pushUrl: "https://restapi.getui.com/v2/$appId"
    masterSecret: ""
    appKey: ""
    intent: ""
    channelID: ""
    channelName: ""
  fcm: #fcm离线推送
    serviceAccount: "x.json"          #帐号文件,并放在 config目录下
  jpns: #极光推送 在极光后台申请后,修改以下四项
    appKey:
    masterSecret:
    pushUrl:
    pushIntent:

manager:
  userID: [ "openIM123456","openIM654321","openIMAdmin" ]   #内置的app管理员userID
  nickname: [ "system1","system2", "system3" ]              #内置的app管理员nickname




multiLoginPolicy: 1                                     #多平台登录:Android、iOS、Windows、Mac、web 每种平台只能有一个在线


chatPersistenceMysql: true                              #消息是否存入mysql,mysql中的消息仅用于管理后台使用
msgCacheTimeout: 86400                                  #信消息缓存时间秒,不建议修改
groupMessageHasReadReceiptEnable: true                  #群聊已读是否开启
singleMessageHasReadReceiptEnable: true                 #单聊已读是否开启

retainChatRecords: 365                                  #mongo保存离线消息时间(天)
chatRecordsClearTime: "0 2 * * 3"                       #每周三凌晨2点清理mongo中的过期(超过retainChatRecords时间)消息

secret: tuoyun #秘钥,获取token时校验

tokenPolicy:
  expire: 90                                     #过期时间(天)

messageVerify:
  friendVerify: false                                  #发送消息时是否验证好友关系

#ios系统推送声音以及标记计数
iosPush:
  pushSound: "xxx"
  badgeCount: true
  production: false

callback:
  # 回调callback
  url:
  beforeSendSingleMsg:
    enable: false                                     #是否启用此回调事件
    timeout: 5                                        #超时时间(秒)
    failedContinue: true                              #如回调失败是否继续往后执行
  afterSendSingleMsg:
    enable: false
    timeout: 5
  beforeSendGroupMsg:
    enable: false
    timeout: 5
    failedContinue: true
  afterSendGroupMsg:
    enable: false
    timeout: 5
  msgModify:
    enable: false
    timeout: 5
    failedContinue: true
  userOnline:
    enable: false
    timeout: 5
  userOffline:
    enable: false
    timeout: 5
  userKickOff:
    enable: false
    timeout: 5
  offlinePush:
    enable: false
    timeout: 5
    failedContinue: true
  onlinePush:
    enable: false
    timeout: 5
    failedContinue: true
  superGroupOnlinePush:
    enable: false
    timeout: 5
    failedContinue: true
  beforeAddFriend:
    enable: false
    timeout: 5
    failedContinue: true
  beforeCreateGroup:
    enable: false
    timeout: 5
    failedContinue: true
  beforeMemberJoinGroup:
    enable: false
    timeout: 5
    failedContinue: true
  beforeSetGroupMemberInfo:
    enable: false
    timeout: 5
    failedContinue: true
  setMessageReactionExtensions:
    enable: false
    timeout: 5
    failedContinue: true


prometheus: #prometheus每个服务的端口数量需要和rpcPort保持对应
  enable: false
  userPrometheusPort: [ 20110 ]
  friendPrometheusPort: [ 20120 ]
  messagePrometheusPort: [ 20130 ]
  messageGatewayPrometheusPort: [ 20140 ]
  groupPrometheusPort: [ 20150 ]
  authPrometheusPort: [ 20160 ]
  pushPrometheusPort: [ 20170 ]
  conversationPrometheusPort: [ 20230 ]
  rtcPrometheusPort: [ 21300 ]
  thirdPrometheusPort: [ 21301 ]
  messageTransferPrometheusPort: [ 21400, 21401, 21402, 21403 ] #端口数量需要和script/path_info.sh中的msg_transfer_service_num保持一致