复制项目
This commit is contained in:
87
config/README.md
Normal file
87
config/README.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# OpenIM Configuration File Descriptions and Common Configuration Modifications
|
||||
|
||||
## External Component Configurations
|
||||
|
||||
| Configuration File | Description |
|
||||
| ------------------ |-------------------------------------------------------------|
|
||||
| **kafka.yml** | Configuration for Kafka username, password, address, etc. |
|
||||
| **redis.yml** | Configuration for Redis password, address, etc. |
|
||||
| **minio.yml** | Configuration for MinIO username, password, address, etc. |
|
||||
| **mongodb.yml** | Configuration for MongoDB username, password, address, etc. |
|
||||
| **discovery.yml** | Service discovery and etcd credentials and address. |
|
||||
|
||||
## OpenIMServer Related Configurations
|
||||
| Configuration File | Description |
|
||||
| ------------------------------- | ---------------------------------------------- |
|
||||
| **log.yml** | Configuration for logging levels and storage directory |
|
||||
| **notification.yml** | Event notification settings (e.g., add friend, create group) |
|
||||
| **share.yml** | Common settings for all services (e.g., secrets) |
|
||||
| **webhooks.yml** | Webhook URLs and related settings |
|
||||
| **local-cache.yml** | Local cache settings (generally do not modify) |
|
||||
| **openim-rpc-third.yml** | openim-rpc-third listen IP, port, and object storage settings |
|
||||
| **openim-rpc-user.yml** | openim-rpc-user listen IP and port settings |
|
||||
| **openim-api.yml** | openim-api listen IP, port, and other settings |
|
||||
| **openim-crontask.yml** | openim-crontask scheduled task settings |
|
||||
| **openim-msggateway.yml** | openim-msggateway listen IP, port, and other settings |
|
||||
| **openim-msgtransfer.yml** | Settings for openim-msgtransfer service |
|
||||
| **openim-push.yml** | openim-push listen IP, port, and offline push settings |
|
||||
| **openim-rpc-auth.yml** | openim-rpc-auth listen IP, port, token validity settings |
|
||||
| **openim-rpc-conversation.yml** | openim-rpc-conversation listen IP and port settings |
|
||||
| **openim-rpc-friend.yml** | openim-rpc-friend listen IP and port settings |
|
||||
| **openim-rpc-group.yml** | openim-rpc-group listen IP and port settings |
|
||||
| **openim-rpc-msg.yml** | openim-rpc-msg listen IP and port settings |
|
||||
|
||||
|
||||
## Monitoring and Alerting Related Configurations
|
||||
| Configuration File | Description |
|
||||
| ------------------------------ | --------------- |
|
||||
| **prometheus.yml** | Prometheus configuration |
|
||||
| **instance-down-rules.yml** | Alert rules |
|
||||
| **alertmanager.yml** | Alertmanager configuration |
|
||||
| **email.tmpl** | Email alert template |
|
||||
| **grefana-template/Demo.json** | Default Grafana dashboard |
|
||||
|
||||
## Common Configuration Modifications
|
||||
| Configuration Item | Configuration File |
|
||||
| -------------------------------------------------------- | ----------------------- |
|
||||
| Configure MinIO as object storage (focus on the externalAddress field) | `minio.yml` |
|
||||
| Adjust log level and number of log files | `log.yml` |
|
||||
| Enable or disable friend verification when sending messages | `openim-rpc-msg.yml` |
|
||||
| OpenIMServer secret | `share.yml` |
|
||||
| Configure OSS, COS, AWS, or Kodo as object storage | `openim-rpc-third.yml` |
|
||||
| Multi-end mutual kick strategy and max concurrent connections per gateway | `openim-msggateway.yml` |
|
||||
| Offline message push configuration | `openim-push.yml` |
|
||||
| Configure webhooks for callback notifications (e.g., before/after message send) | `webhooks.yml` |
|
||||
| Whether new group members can view historical messages | `openim-rpc-group.yml` |
|
||||
| Token expiration time settings | `openim-rpc-auth.yml` |
|
||||
| Scheduled task settings (e.g., how long to retain messages) | `openim-crontask.yml` |
|
||||
|
||||
## Starting Multiple Instances of a Service and Maximum File Descriptors
|
||||
|
||||
|
||||
To start multiple instances of an OpenIM service, simply add the corresponding port numbers and modify the `start-config.yml` file in the project’s root directory,
|
||||
then restart the service. For example, to start 2 instances of `openim-rpc-user`:
|
||||
|
||||
```yaml
|
||||
rpc:
|
||||
registerIP: ''
|
||||
listenIP: 0.0.0.0
|
||||
ports: [ 10110, 10111 ]
|
||||
|
||||
prometheus:
|
||||
enable: true
|
||||
ports: [ 20100, 20101 ]
|
||||
```
|
||||
|
||||
Modify`start-config.yml`:
|
||||
|
||||
```yaml
|
||||
serviceBinaries:
|
||||
openim-rpc-user: 2
|
||||
```
|
||||
|
||||
To set the maximum number of open file descriptors (typically one per online user):
|
||||
|
||||
```
|
||||
maxFileDescriptors: 10000
|
||||
```
|
||||
86
config/README_zh_CN.md
Normal file
86
config/README_zh_CN.md
Normal file
@@ -0,0 +1,86 @@
|
||||
# OpenIM配置文件说明以及常用配置修改说明
|
||||
|
||||
## 外部组件相关配置
|
||||
|
||||
| Configuration File | Description |
|
||||
| ------------------ | ---------------------------------- |
|
||||
| **kafka.yml** | Kafka用户名、密码、地址等配置 |
|
||||
| **redis.yml** | Redis密码、地址等配置 |
|
||||
| **minio.yml** | MinIO用户名、密码、地址等配置 |
|
||||
| **mongodb.yml** | MongoDB用户名、密码、地址等配置 |
|
||||
| **discovery.yml** | 服务发现以及etcd用户名、密码、地址 |
|
||||
|
||||
## OpenIMServer相关配置
|
||||
| Configuration File | Description |
|
||||
| ------------------------------- | ---------------------------------------------- |
|
||||
| **log.yml** | 日志级别及存储目录等配置 |
|
||||
| **notification.yml** | 添加好友、创建群组等事件通知配置 |
|
||||
| **share.yml** | 各服务所需的公共配置,如secret等 |
|
||||
| **webhooks.yml** | Webhook中URL等配置 |
|
||||
| **local-cache.yml** | 本地缓存配置,一般不用修改 |
|
||||
| **openim-rpc-third.yml** | openim-rpc-third监听IP、端口及对象存储配置 |
|
||||
| **openim-rpc-user.yml** | openim-rpc-user监听IP、端口配置 |
|
||||
| **openim-api.yml** | openim-api监听IP、端口等配置 |
|
||||
| **openim-crontask.yml** | openim-crontask定时任务配置 |
|
||||
| **openim-msggateway.yml** | openim-msggateway监听IP、端口等配置 |
|
||||
| **openim-msgtransfer.yml** | openim-msgtransfer服务配置 |
|
||||
| **openim-push.yml** | openim-push监听IP、端口及离线推送配置 |
|
||||
| **openim-rpc-auth.yml** | openim-rpc-auth监听IP、端口及token有效期等配置 |
|
||||
| **openim-rpc-conversation.yml** | openim-rpc-conversation监听IP、端口等配置 |
|
||||
| **openim-rpc-friend.yml** | openim-rpc-friend监听IP、端口等配置 |
|
||||
| **openim-rpc-group.yml** | openim-rpc-group监听IP、端口等配置 |
|
||||
| **openim-rpc-msg.yml** | openim-rpc-msg服务的监听IP、端口等配置 |
|
||||
|
||||
|
||||
## 监控告警相关配置
|
||||
| Configuration File | Description |
|
||||
| ------------------------------ | --------------- |
|
||||
| **prometheus.yml** | prometheus配置 |
|
||||
| **instance-down-rules.yml** | 告警规则 |
|
||||
| **alertmanager.yml** | 告警管理配置 |
|
||||
| **email.tmpl** | 邮件告警模版 |
|
||||
| **grefana-template/Demo.json** | 默认的dashboard |
|
||||
|
||||
## 常用配置修改
|
||||
| 修改配置项 | 配置文件 |
|
||||
| -------------------------------------------------------- | ----------------------- |
|
||||
| 使用minio作为对象存储时配置,重点关注externalAddress字段 | `minio.yml` |
|
||||
| 日志级别及日志文件数量调整 | `log.yml` |
|
||||
| 发送消息是否需要验证好友关系 | `openim-rpc-msg.yml` |
|
||||
| OpenIMServer秘钥 | `share.yml` |
|
||||
| 使用oss, cos, aws, kodo作为对象存储时配置 | `openim-rpc-third.yml` |
|
||||
| 多端互踢策略,单个gateway同时最大连接数 | `openim-msggateway.yml` |
|
||||
| 消息离线推送 | `openim-push.yml` |
|
||||
| 配置webhook来通知回调服务器,如消息发送前后回调 | `webhooks.yml` |
|
||||
| 新入群用户是否可以查看历史消息 | `openim-rpc-group.yml` |
|
||||
| token 过期时间设置 | `openim-rpc-auth.yml` |
|
||||
| 定时任务设置,例如消息保存多长时间 | `openim-crontask.yml` |
|
||||
|
||||
## 启动某个服务的多个实例和最大文件句柄数
|
||||
|
||||
|
||||
若要启动某个OpenIM的多个实例,只需增加对应的端口数,并修改项目根目录下的`start-config.yml`文件,重启服务即可生效。例如,启动2个`openim-rpc-user`实例的配置如下:
|
||||
|
||||
```yaml
|
||||
rpc:
|
||||
registerIP: ''
|
||||
listenIP: 0.0.0.0
|
||||
ports: [ 10110, 10111 ]
|
||||
|
||||
prometheus:
|
||||
enable: true
|
||||
ports: [ 20100, 20101 ]
|
||||
```
|
||||
|
||||
修改`start-config.yml`:
|
||||
|
||||
```yaml
|
||||
serviceBinaries:
|
||||
openim-rpc-user: 2
|
||||
```
|
||||
|
||||
修改最大同时打开的文件句柄数,一般是每个在线用户占用一个
|
||||
|
||||
```
|
||||
maxFileDescriptors: 10000
|
||||
```
|
||||
34
config/alertmanager.yml
Normal file
34
config/alertmanager.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
global:
|
||||
resolve_timeout: 5m
|
||||
smtp_from: alert@openim.io
|
||||
smtp_smarthost: smtp.163.com:465
|
||||
smtp_auth_username: alert@openim.io
|
||||
smtp_auth_password: YOURAUTHPASSWORD
|
||||
smtp_require_tls: false
|
||||
smtp_hello: xxx
|
||||
|
||||
templates:
|
||||
- /etc/alertmanager/email.tmpl
|
||||
|
||||
route:
|
||||
group_by: [ 'alertname' ]
|
||||
group_wait: 5s
|
||||
group_interval: 5s
|
||||
repeat_interval: 5m
|
||||
receiver: email
|
||||
routes:
|
||||
- matchers:
|
||||
- alertname = "XXX"
|
||||
group_by: [ 'instance' ]
|
||||
group_wait: 5s
|
||||
group_interval: 5s
|
||||
repeat_interval: 5m
|
||||
receiver: email
|
||||
|
||||
receivers:
|
||||
- name: email
|
||||
email_configs:
|
||||
- to: 'alert@example.com'
|
||||
html: '{{ template "email.to.html" . }}'
|
||||
headers: { Subject: "[OPENIM-SERVER]Alarm" }
|
||||
send_resolved: true
|
||||
22
config/discovery.yml
Normal file
22
config/discovery.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
enable: etcd
|
||||
etcd:
|
||||
rootDirectory: openim
|
||||
address: [localhost:12379]
|
||||
## Attention: If you set auth in etcd
|
||||
## you must also update the username and password in Chat project.
|
||||
username:
|
||||
password:
|
||||
|
||||
kubernetes:
|
||||
namespace: default
|
||||
|
||||
rpcService:
|
||||
user: user-rpc-service
|
||||
friend: friend-rpc-service
|
||||
msg: msg-rpc-service
|
||||
push: push-rpc-service
|
||||
messageGateway: messagegateway-rpc-service
|
||||
group: group-rpc-service
|
||||
auth: auth-rpc-service
|
||||
conversation: conversation-rpc-service
|
||||
third: third-rpc-service
|
||||
36
config/email.tmpl
Normal file
36
config/email.tmpl
Normal file
@@ -0,0 +1,36 @@
|
||||
{{ define "email.to.html" }}
|
||||
{{ if eq .Status "firing" }}
|
||||
{{ 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> firing</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 }}
|
||||
|
||||
|
||||
{{ 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 }}
|
||||
{{ end }}
|
||||
5576
config/grafana-template/Demo.json
Normal file
5576
config/grafana-template/Demo.json
Normal file
File diff suppressed because it is too large
Load Diff
44
config/instance-down-rules.yml
Normal file
44
config/instance-down-rules.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
groups:
|
||||
- name: instance_down
|
||||
rules:
|
||||
- alert: InstanceDown
|
||||
expr: up == 0
|
||||
for: 1m
|
||||
labels:
|
||||
severity: critical
|
||||
annotations:
|
||||
summary: "Instance {{ $labels.instance }} down"
|
||||
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
|
||||
|
||||
- name: database_insert_failure_alerts
|
||||
rules:
|
||||
- alert: DatabaseInsertFailed
|
||||
expr: (increase(msg_insert_redis_failed_total[5m]) > 0) or (increase(msg_insert_mongo_failed_total[5m]) > 0)
|
||||
for: 1m
|
||||
labels:
|
||||
severity: critical
|
||||
annotations:
|
||||
summary: "Increase in MsgInsertRedisFailedCounter or MsgInsertMongoFailedCounter detected"
|
||||
description: "Either MsgInsertRedisFailedCounter or MsgInsertMongoFailedCounter has increased in the last 5 minutes, indicating failures in message insert operations to Redis or MongoDB,maybe the redis or mongodb is crash."
|
||||
|
||||
- name: registrations_few
|
||||
rules:
|
||||
- alert: RegistrationsFew
|
||||
expr: increase(user_login_total[1h]) == 0
|
||||
for: 1m
|
||||
labels:
|
||||
severity: info
|
||||
annotations:
|
||||
summary: "Too few registrations within the time frame"
|
||||
description: "The number of registrations in the last hour is 0. There might be some issues."
|
||||
|
||||
- name: messages_few
|
||||
rules:
|
||||
- alert: MessagesFew
|
||||
expr: (increase(single_chat_msg_process_success_total[1h])+increase(group_chat_msg_process_success_total[1h])) == 0
|
||||
for: 1m
|
||||
labels:
|
||||
severity: info
|
||||
annotations:
|
||||
summary: "Too few messages within the time frame"
|
||||
description: "The number of messages sent in the last hour is 0. There might be some issues."
|
||||
40
config/kafka.yml
Normal file
40
config/kafka.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
## Kafka authentication
|
||||
username:
|
||||
password:
|
||||
|
||||
# Producer acknowledgment settings
|
||||
producerAck:
|
||||
# Compression type to use (e.g., none, gzip, snappy)
|
||||
compressType: none
|
||||
# List of Kafka broker addresses
|
||||
address: [localhost:19094]
|
||||
# Kafka topic for Redis integration
|
||||
toRedisTopic: toRedis
|
||||
# Kafka topic for MongoDB integration
|
||||
toMongoTopic: toMongo
|
||||
# Kafka topic for push notifications
|
||||
toPushTopic: toPush
|
||||
# Kafka topic for offline push notifications
|
||||
toOfflinePushTopic: toOfflinePush
|
||||
# Consumer group ID for Redis topic
|
||||
toRedisGroupID: redis
|
||||
# Consumer group ID for MongoDB topic
|
||||
toMongoGroupID: mongo
|
||||
# Consumer group ID for push notifications topic
|
||||
toPushGroupID: push
|
||||
# Consumer group ID for offline push notifications topic
|
||||
toOfflinePushGroupID: offlinePush
|
||||
# TLS (Transport Layer Security) configuration
|
||||
tls:
|
||||
# Enable or disable TLS
|
||||
enableTLS: false
|
||||
# CA certificate file path
|
||||
caCrt:
|
||||
# Client certificate file path
|
||||
clientCrt:
|
||||
# Client key file path
|
||||
clientKey:
|
||||
# Client key password
|
||||
clientKeyPwd:
|
||||
# Whether to skip TLS verification (not recommended for production)
|
||||
insecureSkipVerify: false
|
||||
34
config/local-cache.yml
Normal file
34
config/local-cache.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
auth:
|
||||
topic: DELETE_CACHE_AUTH
|
||||
slotNum: 100
|
||||
slotSize: 2000
|
||||
successExpire: 300
|
||||
failedExpire: 5
|
||||
|
||||
user:
|
||||
topic: DELETE_CACHE_USER
|
||||
slotNum: 100
|
||||
slotSize: 2000
|
||||
successExpire: 300
|
||||
failedExpire: 5
|
||||
|
||||
group:
|
||||
topic: DELETE_CACHE_GROUP
|
||||
slotNum: 100
|
||||
slotSize: 2000
|
||||
successExpire: 300
|
||||
failedExpire: 5
|
||||
|
||||
friend:
|
||||
topic: DELETE_CACHE_FRIEND
|
||||
slotNum: 100
|
||||
slotSize: 2000
|
||||
successExpire: 300
|
||||
failedExpire: 5
|
||||
|
||||
conversation:
|
||||
topic: DELETE_CACHE_CONVERSATION
|
||||
slotNum: 100
|
||||
slotSize: 2000
|
||||
successExpire: 300
|
||||
failedExpire: 5
|
||||
14
config/log.yml
Normal file
14
config/log.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
# Log storage path, default is acceptable, change to a full path if modification is needed
|
||||
storageLocation: ../../../../logs/
|
||||
# Log rotation period (in hours), default is acceptable
|
||||
rotationTime: 24
|
||||
# Number of log files to retain, default is acceptable
|
||||
remainRotationCount: 2
|
||||
# Log level settings: 3 for production environment; 6 for more verbose logging in debugging environments
|
||||
remainLogLevel: 6
|
||||
# Whether to output to standard output, default is acceptable
|
||||
isStdout: true
|
||||
# Whether to log in JSON format, default is acceptable
|
||||
isJson: false
|
||||
# output simplify log when KeyAndValues's value len is bigger than 50 in rpc method log
|
||||
isSimplify: true
|
||||
16
config/minio.yml
Normal file
16
config/minio.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
# Name of the bucket in MinIO
|
||||
bucket: images
|
||||
# Access key ID for MinIO authentication
|
||||
accessKeyID: Z9Mgqtdm9OczzeRG
|
||||
# Secret access key for MinIO authentication
|
||||
secretAccessKey: vV6CzNvxYaN9jSZ8g7nOhGF1N4ygLJbE
|
||||
# Session token for MinIO authentication (optional)
|
||||
sessionToken:
|
||||
# Internal address of the MinIO server
|
||||
internalAddress: s3.jizhying.com
|
||||
# External address of the MinIO server, accessible from outside. Supports both HTTP and HTTPS using a domain name
|
||||
externalAddress: https://s3.jizhying.com
|
||||
# Flag to enable or disable public read access to the bucket
|
||||
publicRead: true
|
||||
|
||||
|
||||
51
config/mongodb.yml
Normal file
51
config/mongodb.yml
Normal file
@@ -0,0 +1,51 @@
|
||||
# URI for database connection, leave empty if using address and credential settings directly
|
||||
uri:
|
||||
# List of MongoDB server addresses
|
||||
address: [localhost:37017]
|
||||
# Name of the database
|
||||
database: openim_v3
|
||||
# Username for database authentication
|
||||
username: openIM
|
||||
# Password for database authentication
|
||||
password: openIM123
|
||||
# Authentication source for database authentication, if use root user, set it to admin
|
||||
authSource: openim_v3
|
||||
# Maximum number of connections in the connection pool
|
||||
maxPoolSize: 100
|
||||
# Maximum number of retry attempts for a failed database connection
|
||||
maxRetry: 10
|
||||
# MongoDB Mode, including "standalone", "replicaSet"
|
||||
mongoMode: "standalone"
|
||||
|
||||
# The following configurations only take effect when mongoMode is set to "replicaSet"
|
||||
replicaSet:
|
||||
name: rs0
|
||||
hosts: [127.0.0.1:37017, 127.0.0.1:37018, 127.0.0.1:37019]
|
||||
# Read concern level: "local", "available", "majority", "linearizable", "snapshot"
|
||||
readConcern: majority
|
||||
# maximum staleness of data in seconds
|
||||
maxStaleness: 90s
|
||||
|
||||
# The following configurations only take effect when mongoMode is set to "replicaSet"
|
||||
readPreference:
|
||||
# Read preference mode, can be "primary", "primaryPreferred", "secondary", "secondaryPreferred", "nearest"
|
||||
mode: primary
|
||||
maxStaleness: 90s
|
||||
# TagSets is an array of maps with priority based on order, empty map must be placed last for fallback tagSets
|
||||
tagSets:
|
||||
- datacenter: "cn-east"
|
||||
rack: "1"
|
||||
storage: "ssd"
|
||||
- datacenter: "cn-east"
|
||||
storage: "ssd"
|
||||
- datacenter: "cn-east"
|
||||
- {} # Empty map, indicates any node
|
||||
|
||||
# The following configurations only take effect when mongoMode is set to "replicaSet"
|
||||
writeConcern:
|
||||
# Write node count or tag (int, "majority", or custom tag)
|
||||
w: majority
|
||||
# Whether to wait for journal confirmation
|
||||
j: true
|
||||
# Write timeout duration
|
||||
wtimeout: 30s
|
||||
326
config/notification.yml
Normal file
326
config/notification.yml
Normal file
@@ -0,0 +1,326 @@
|
||||
groupCreated:
|
||||
isSendMsg: true
|
||||
# Deprecated. Fixed as 1.
|
||||
reliabilityLevel: 1
|
||||
# Deprecated. Fixed as false.
|
||||
unreadCount: false
|
||||
# Configuration for offline push notifications.
|
||||
offlinePush:
|
||||
# Enables or disables offline push notifications.
|
||||
enable: false
|
||||
# Title for the notification when a group is created.
|
||||
title: create group title
|
||||
# Description for the notification.
|
||||
desc: create group desc
|
||||
# Additional information for the notification.
|
||||
ext: create group ext
|
||||
|
||||
groupInfoSet:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupInfoSet title
|
||||
desc: groupInfoSet desc
|
||||
ext: groupInfoSet ext
|
||||
|
||||
|
||||
joinGroupApplication:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: true
|
||||
title: joinGroupApplication title
|
||||
desc: joinGroupApplication desc
|
||||
ext: joinGroupApplication ext
|
||||
|
||||
memberQuit:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: memberQuit title
|
||||
desc: memberQuit desc
|
||||
ext: memberQuit ext
|
||||
|
||||
groupApplicationAccepted:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: true
|
||||
title: groupApplicationAccepted title
|
||||
desc: groupApplicationAccepted desc
|
||||
ext: groupApplicationAccepted ext
|
||||
|
||||
groupApplicationRejected:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: true
|
||||
title: groupApplicationRejected title
|
||||
desc: groupApplicationRejected desc
|
||||
ext: groupApplicationRejected ext
|
||||
|
||||
|
||||
groupOwnerTransferred:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupOwnerTransferred title
|
||||
desc: groupOwnerTransferred desc
|
||||
ext: groupOwnerTransferred ext
|
||||
|
||||
memberKicked:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: memberKicked title
|
||||
desc: memberKicked desc
|
||||
ext: memberKicked ext
|
||||
|
||||
memberInvited:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: memberInvited title
|
||||
desc: memberInvited desc
|
||||
ext: memberInvited ext
|
||||
|
||||
memberEnter:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: memberEnter title
|
||||
desc: memberEnter desc
|
||||
ext: memberEnter ext
|
||||
|
||||
groupDismissed:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupDismissed title
|
||||
desc: groupDismissed desc
|
||||
ext: groupDismissed ext
|
||||
|
||||
groupMuted:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupMuted title
|
||||
desc: groupMuted desc
|
||||
ext: groupMuted ext
|
||||
|
||||
groupCancelMuted:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupCancelMuted title
|
||||
desc: groupCancelMuted desc
|
||||
ext: groupCancelMuted ext
|
||||
defaultTips:
|
||||
tips: group Cancel Muted
|
||||
|
||||
|
||||
groupMemberMuted:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupMemberMuted title
|
||||
desc: groupMemberMuted desc
|
||||
ext: groupMemberMuted ext
|
||||
|
||||
groupMemberCancelMuted:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupMemberCancelMuted title
|
||||
desc: groupMemberCancelMuted desc
|
||||
ext: groupMemberCancelMuted ext
|
||||
|
||||
groupMemberInfoSet:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupMemberInfoSet title
|
||||
desc: groupMemberInfoSet desc
|
||||
ext: groupMemberInfoSet ext
|
||||
|
||||
groupInfoSetAnnouncement:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupInfoSetAnnouncement title
|
||||
desc: groupInfoSetAnnouncement desc
|
||||
ext: groupInfoSetAnnouncement ext
|
||||
|
||||
|
||||
groupInfoSetName:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: groupInfoSetName title
|
||||
desc: groupInfoSetName desc
|
||||
ext: groupInfoSetName ext
|
||||
|
||||
|
||||
#############################friend#################################
|
||||
friendApplicationAdded:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: true
|
||||
title: Somebody applies to add you as a friend
|
||||
desc: Somebody applies to add you as a friend
|
||||
ext: Somebody applies to add you as a friend
|
||||
|
||||
friendApplicationApproved:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: true
|
||||
title: Someone applies to add your friend application
|
||||
desc: Someone applies to add your friend application
|
||||
ext: Someone applies to add your friend application
|
||||
|
||||
friendApplicationRejected:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: true
|
||||
title: Someone rejected your friend application
|
||||
desc: Someone rejected your friend application
|
||||
ext: Someone rejected your friend application
|
||||
|
||||
friendAdded:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: We have become friends
|
||||
desc: We have become friends
|
||||
ext: We have become friends
|
||||
|
||||
friendDeleted:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: deleted a friend
|
||||
desc: deleted a friend
|
||||
ext: deleted a friend
|
||||
|
||||
friendRemarkSet:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: Your friend's profile has been changed
|
||||
desc: Your friend's profile has been changed
|
||||
ext: Your friend's profile has been changed
|
||||
|
||||
blackAdded:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: blocked a user
|
||||
desc: blocked a user
|
||||
ext: blocked a user
|
||||
|
||||
blackDeleted:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: Remove a blocked user
|
||||
desc: Remove a blocked user
|
||||
ext: Remove a blocked user
|
||||
|
||||
friendInfoUpdated:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: friend info updated
|
||||
desc: friend info updated
|
||||
ext: friend info updated
|
||||
|
||||
#####################user#########################
|
||||
userInfoUpdated:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: userInfo updated
|
||||
desc: userInfo updated
|
||||
ext: userInfo updated
|
||||
|
||||
userStatusChanged:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: user status changed
|
||||
desc: user status changed
|
||||
ext: user status changed
|
||||
|
||||
#####################conversation#########################
|
||||
conversationChanged:
|
||||
isSendMsg: false
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: conversation changed
|
||||
desc: conversation changed
|
||||
ext: conversation changed
|
||||
|
||||
conversationSetPrivate:
|
||||
isSendMsg: true
|
||||
reliabilityLevel: 1
|
||||
unreadCount: false
|
||||
offlinePush:
|
||||
enable: false
|
||||
title: burn after reading
|
||||
desc: burn after reading
|
||||
ext: burn after reading
|
||||
33
config/openim-api.yml
Normal file
33
config/openim-api.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
api:
|
||||
# Listening IP; 0.0.0.0 means both internal and external IPs are listened to, default is recommended
|
||||
listenIP: 0.0.0.0
|
||||
# Listening ports; if multiple are configured, multiple instances will be launched, must be consistent with the number of prometheus.ports
|
||||
ports: [ 10002 ]
|
||||
# API compression level; 0: default compression, 1: best compression, 2: best speed, -1: no compression
|
||||
compressionLevel: 0
|
||||
|
||||
|
||||
prometheus:
|
||||
# Whether to enable prometheus
|
||||
enable: true
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
autoSetPorts: true
|
||||
# Prometheus listening ports, must match the number of api.ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
# This address can be accessed via a browser
|
||||
grafanaURL:
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
onlineCountRefresh:
|
||||
enable: true
|
||||
interval: 30s
|
||||
4
config/openim-crontask.yml
Normal file
4
config/openim-crontask.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
cronExecuteTime: 0 2 * * *
|
||||
retainChatRecords: 365
|
||||
fileExpireTime: 180
|
||||
deleteObjectType: ["msg-picture","msg-file", "msg-voice","msg-video","msg-video-snapshot","sdklog"]
|
||||
45
config/openim-msggateway.yml
Normal file
45
config/openim-msggateway.yml
Normal file
@@ -0,0 +1,45 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
# IP address that the RPC/WebSocket service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
|
||||
longConnSvr:
|
||||
# WebSocket listening ports, must match the number of rpc.ports
|
||||
ports: [ 10001 ]
|
||||
# Maximum number of WebSocket connections
|
||||
websocketMaxConnNum: 100000
|
||||
# Maximum length of the entire WebSocket message packet
|
||||
websocketMaxMsgLen: 4096
|
||||
# WebSocket connection handshake timeout in seconds
|
||||
websocketTimeout: 10
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
25
config/openim-msgtransfer.yml
Normal file
25
config/openim-msgtransfer.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
autoSetPorts: true
|
||||
# List of ports that Prometheus listens on; each port corresponds to an instance of monitoring. Ensure these are managed accordingly
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
64
config/openim-push.yml
Normal file
64
config/openim-push.yml
Normal file
@@ -0,0 +1,64 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
maxConcurrentWorkers: 50
|
||||
#Use geTui for offline push notifications, or choose fcm or jpns; corresponding configuration settings must be specified.
|
||||
enable:
|
||||
getui:
|
||||
pushUrl: https://restapi.getui.com/v2/$appId
|
||||
masterSecret:
|
||||
appKey:
|
||||
intent:
|
||||
channelID:
|
||||
channelName:
|
||||
fcm:
|
||||
# Prioritize using file paths. If the file path is empty, use URL
|
||||
filePath: # File path is concatenated with the parameters passed in through - c(`mage` default pass in `config/`) and filePath.
|
||||
authURL: # Must start with https or http.
|
||||
jpush:
|
||||
appKey:
|
||||
masterSecret:
|
||||
pushURL:
|
||||
pushIntent:
|
||||
|
||||
# iOS system push sound and badge count
|
||||
iosPush:
|
||||
pushSound: xxx
|
||||
badgeCount: true
|
||||
production: false
|
||||
|
||||
fullUserCache: true
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
39
config/openim-rpc-auth.yml
Normal file
39
config/openim-rpc-auth.yml
Normal file
@@ -0,0 +1,39 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
tokenPolicy:
|
||||
# Token validity period, in days
|
||||
expire: 90
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
35
config/openim-rpc-conversation.yml
Normal file
35
config/openim-rpc-conversation.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
35
config/openim-rpc-friend.yml
Normal file
35
config/openim-rpc-friend.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
38
config/openim-rpc-group.yml
Normal file
38
config/openim-rpc-group.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
|
||||
enableHistoryForNewMembers: true
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
39
config/openim-rpc-msg.yml
Normal file
39
config/openim-rpc-msg.yml
Normal file
@@ -0,0 +1,39 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
|
||||
# Does sending messages require friend verification
|
||||
friendVerify: false
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
69
config/openim-rpc-third.yml
Normal file
69
config/openim-rpc-third.yml
Normal file
@@ -0,0 +1,69 @@
|
||||
rpc:
|
||||
# The IP address where this RPC service registers itself; if left blank, it defaults to the internal network IP
|
||||
registerIP:
|
||||
# IP address that the RPC service listens on; setting to 0.0.0.0 listens on both internal and external IPs. If left blank, it automatically uses the internal network IP
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Enable or disable Prometheus monitoring
|
||||
enable: true
|
||||
# List of ports that Prometheus listens on; these must match the number of rpc.ports to ensure correct monitoring setup
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
|
||||
object:
|
||||
# Use MinIO as object storage, or set to "cos", "oss", "kodo", "aws", while also configuring the corresponding settings
|
||||
# Cloudflare R2 使用 aws 模式,配置 endpoint 即可
|
||||
enable: minio
|
||||
cos:
|
||||
endpoint: https://e032b3e2e74d56c41118001d0f8e8106.r2.cloudflarestorage.com
|
||||
secretID: TVLQOpXcTCjpePajNI8qnD2tp4C9eean4tVdOT17
|
||||
secretKey: fbafa94b5036c147d5f27ffa55417a5daab662e348acb3a21b73c33405633cc8
|
||||
sessionToken:
|
||||
publicRead: true
|
||||
oss:
|
||||
endpoint: https://oss-ap-southeast-1.aliyuncs.com
|
||||
bucket: chatall
|
||||
bucketURL: http://asset.imall.cloud
|
||||
accessKeyID: LTAI5t6DiZgPducgW28HW9sv
|
||||
accessKeySecret: Hre20TaRDQadYZfQzp8ZwS9HfHIPrw
|
||||
sessionToken:
|
||||
publicRead: true
|
||||
kodo:
|
||||
endpoint: https://s3.cn-south-1.qiniucs.com
|
||||
bucket: testdemo12313
|
||||
bucketURL: http://so2at6d05.hn-bkt.clouddn.com
|
||||
accessKeyID:
|
||||
accessKeySecret:
|
||||
sessionToken:
|
||||
publicRead: false
|
||||
aws:
|
||||
region: ap-southeast-1
|
||||
bucket: im1688
|
||||
accessKeyID: AKIA5TMMSZWVFYCLKJ2G
|
||||
secretAccessKey: P+slboxgk8MqqXFHBFYRxBCKNfXQVuL7n5GJS56p
|
||||
sessionToken:
|
||||
publicRead: true
|
||||
35
config/openim-rpc-user.yml
Normal file
35
config/openim-rpc-user.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
rpc:
|
||||
# API or other RPCs can access this RPC through this IP; if left blank, the internal network IP is obtained by default
|
||||
registerIP:
|
||||
# Listening IP; 0.0.0.0 means both internal and external IPs are listened to, if blank, the internal network IP is automatically obtained by default
|
||||
listenIP: 0.0.0.0
|
||||
# autoSetPorts indicates whether to automatically set the ports
|
||||
# if you use in kubernetes, set it to false
|
||||
autoSetPorts: true
|
||||
# List of ports that the RPC service listens on; configuring multiple ports will launch multiple instances. These must match the number of configured prometheus ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
prometheus:
|
||||
# Whether to enable prometheus
|
||||
enable: true
|
||||
# Prometheus listening ports, must be consistent with the number of rpc.ports
|
||||
# It will only take effect when autoSetPorts is set to false.
|
||||
ports:
|
||||
|
||||
ratelimiter:
|
||||
# Whether to enable rate limiting
|
||||
enable: false
|
||||
# WindowSize defines time duration per window
|
||||
window: 20s
|
||||
# BucketNum defines bucket number for each window
|
||||
bucket: 500
|
||||
# CPU threshold; valid range 0–1000 (1000 = 100%)
|
||||
cpuThreshold: 850
|
||||
|
||||
circuitBreaker:
|
||||
enable: false
|
||||
window: 5s # Time window size (seconds)
|
||||
bucket: 100 # Number of buckets
|
||||
success: 0.6 # Success rate threshold (0.6 means 60%)
|
||||
request: 500 # Request threshold; circuit breaker evaluation occurs when reached
|
||||
119
config/prometheus.yml
Normal file
119
config/prometheus.yml
Normal file
@@ -0,0 +1,119 @@
|
||||
# my global config
|
||||
global:
|
||||
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
|
||||
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
|
||||
# scrape_timeout is set to the global default (10s).
|
||||
|
||||
# Alertmanager configuration
|
||||
alerting:
|
||||
alertmanagers:
|
||||
- static_configs:
|
||||
- targets: [127.0.0.1:19093]
|
||||
|
||||
# Load rules once and periodically evaluate them according to the global evaluation_interval.
|
||||
rule_files:
|
||||
- instance-down-rules.yml
|
||||
# - first_rules.yml
|
||||
# - second_rules.yml
|
||||
|
||||
# A scrape configuration containing exactly one endpoint to scrape:
|
||||
# Here it's Prometheus itself.
|
||||
scrape_configs:
|
||||
# The job name is added as a label "job=job_name" to any timeseries scraped from this config.
|
||||
# Monitored information captured by prometheus
|
||||
|
||||
# prometheus fetches application services
|
||||
- job_name: node_exporter
|
||||
static_configs:
|
||||
- targets: [ 127.0.0.1:19100 ]
|
||||
|
||||
- job_name: openimserver-openim-api
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/api"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12002 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-msggateway
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/msg_gateway"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12140 ]
|
||||
# # - targets: [ 127.0.0.1:12140, 127.0.0.1:12141, 127.0.0.1:12142, 127.0.0.1:12143, 127.0.0.1:12144, 127.0.0.1:12145, 127.0.0.1:12146, 127.0.0.1:12147, 127.0.0.1:12148, 127.0.0.1:12149, 127.0.0.1:12150, 127.0.0.1:12151, 127.0.0.1:12152, 127.0.0.1:12153, 127.0.0.1:12154, 127.0.0.1:12155 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-msgtransfer
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/msg_transfer"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12020, 127.0.0.1:12021, 127.0.0.1:12022, 127.0.0.1:12023, 127.0.0.1:12024, 127.0.0.1:12025, 127.0.0.1:12026, 127.0.0.1:12027 ]
|
||||
# # - targets: [ 127.0.0.1:12020, 127.0.0.1:12021, 127.0.0.1:12022, 127.0.0.1:12023, 127.0.0.1:12024, 127.0.0.1:12025, 127.0.0.1:12026, 127.0.0.1:12027, 127.0.0.1:12028, 127.0.0.1:12029, 127.0.0.1:12030, 127.0.0.1:12031, 127.0.0.1:12032, 127.0.0.1:12033, 127.0.0.1:12034, 127.0.0.1:12035 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-push
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/push"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12170, 127.0.0.1:12171, 127.0.0.1:12172, 127.0.0.1:12173, 127.0.0.1:12174, 127.0.0.1:12175, 127.0.0.1:12176, 127.0.0.1:12177 ]
|
||||
## - targets: [ 127.0.0.1:12170, 127.0.0.1:12171, 127.0.0.1:12172, 127.0.0.1:12173, 127.0.0.1:12174, 127.0.0.1:12175, 127.0.0.1:12176, 127.0.0.1:12177, 127.0.0.1:12178, 127.0.0.1:12179, 127.0.0.1:12180, 127.0.0.1:12182, 127.0.0.1:12183, 127.0.0.1:12184, 127.0.0.1:12185, 127.0.0.1:12186 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-rpc-auth
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/auth"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12200 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-rpc-conversation
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/conversation"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12220 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-rpc-friend
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/friend"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12240 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-rpc-group
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/group"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12260 ]
|
||||
# labels:
|
||||
# namespace: default.
|
||||
|
||||
- job_name: openimserver-openim-rpc-msg
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/msg"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12280 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-rpc-third
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/third"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12300 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
|
||||
- job_name: openimserver-openim-rpc-user
|
||||
http_sd_configs:
|
||||
- url: "http://127.0.0.1:10002/prometheus_discovery/user"
|
||||
# static_configs:
|
||||
# - targets: [ 127.0.0.1:12320 ]
|
||||
# labels:
|
||||
# namespace: default
|
||||
16
config/redis.yml
Normal file
16
config/redis.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
address: [localhost:16379]
|
||||
username:
|
||||
password: openIM123
|
||||
# redis Mode, including "standalone","cluster","sentinel"
|
||||
redisMode: "standalone"
|
||||
db: 0
|
||||
maxRetry: 10
|
||||
poolSize: 100
|
||||
onlineKeyPrefix: "openim:cms-test"
|
||||
onlineKeyPrefixHashTag: false
|
||||
# Sentinel configuration (only used when redisMode is "sentinel")
|
||||
sentinelMode:
|
||||
masterName: "redis-master"
|
||||
sentinelsAddrs: ["127.0.0.1:26379", "127.0.0.1:26380", "127.0.0.1:26381"]
|
||||
routeByLatency: true
|
||||
routeRandomly: true
|
||||
20
config/share.yml
Normal file
20
config/share.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
secret: openIM123
|
||||
|
||||
# imAdminUser: Configuration for instant messaging system administrators
|
||||
imAdminUser:
|
||||
# userIDs: List of administrator user IDs.
|
||||
# Each entry here corresponds by index to the matching entry in the nicknames list below.
|
||||
userIDs: [imAdmin]
|
||||
# nicknames: List of administrator display names.
|
||||
# Each entry here corresponds by index to the matching entry in the userIDs list above.
|
||||
nicknames: [superAdmin]
|
||||
|
||||
# 1: For Android, iOS, Windows, Mac, and web platforms, only one instance can be online at a time
|
||||
multiLogin:
|
||||
policy: 1
|
||||
# max num of tokens in one end
|
||||
maxNumOneEnd: 30
|
||||
|
||||
rpcMaxBodySize:
|
||||
requestMaxBodySize: 67108864 # 64MB
|
||||
responseMaxBodySize: 67108864 # 64MB
|
||||
202
config/webhooks.yml
Normal file
202
config/webhooks.yml
Normal file
@@ -0,0 +1,202 @@
|
||||
url: http://127.0.0.1:10006/callbackExample
|
||||
beforeSendSingleMsg:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
# Only the contentType not in deniedTypes will send the callback.
|
||||
# If not set, all contentType messages will through this filter.
|
||||
deniedTypes: []
|
||||
beforeUpdateUserInfoEx:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterUpdateUserInfoEx:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterSendSingleMsg:
|
||||
enable: false
|
||||
timeout: 5
|
||||
# Only the recvIDs specified in attentionIds will send the callback
|
||||
# if not set, all user messages will be callback
|
||||
attentionIds: []
|
||||
# See beforeSendSingleMsg comment.
|
||||
deniedTypes: []
|
||||
beforeSendGroupMsg:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
# See beforeSendSingleMsg comment.
|
||||
deniedTypes: []
|
||||
beforeMsgModify:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
# See beforeSendSingleMsg comment.
|
||||
deniedTypes: []
|
||||
afterSendGroupMsg:
|
||||
enable: false
|
||||
timeout: 5
|
||||
# Only the GroupIDs specified in attentionIds will send the callback
|
||||
# if not set, all user messages will be callback
|
||||
attentionIds: []
|
||||
# See beforeSendSingleMsg comment.
|
||||
deniedTypes: []
|
||||
afterMsgSaveDB:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterUserOnline:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterUserOffline:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterUserKickOff:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeOfflinePush:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
beforeOnlinePush:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
beforeGroupOnlinePush:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
beforeAddFriend:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
beforeUpdateUserInfo:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterUpdateUserInfo:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeCreateGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterCreateGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeMemberJoinGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
beforeSetGroupMemberInfo:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterSetGroupMemberInfo:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterQuitGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterKickGroupMember:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterDismissGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeApplyJoinGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterGroupMsgRead:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterSingleMsgRead:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeUserRegister:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterUserRegister:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterTransferGroupOwner:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeSetFriendRemark:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterSetFriendRemark:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterGroupMsgRevoke:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterJoinGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeInviteUserToGroup:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterSetGroupInfo:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeSetGroupInfo:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterSetGroupInfoEx:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeSetGroupInfoEx:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterRevokeMsg:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeAddBlack:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue:
|
||||
afterAddFriend:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeAddFriendAgree:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterAddFriendAgree:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterDeleteFriend:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeImportFriends:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: true
|
||||
afterImportFriends:
|
||||
enable: false
|
||||
timeout: 5
|
||||
afterRemoveBlack:
|
||||
enable: false
|
||||
timeout: 5
|
||||
beforeCreateSingleChatConversations:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: false
|
||||
afterCreateSingleChatConversations:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: false
|
||||
beforeCreateGroupChatConversations:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: false
|
||||
afterCreateGroupChatConversations:
|
||||
enable: false
|
||||
timeout: 5
|
||||
failedContinue: false
|
||||
Reference in New Issue
Block a user