mb-rrvideo-server 1.0.6 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DOCKER.md +4 -1
- package/Dockerfile +3 -1
- package/docker-compose.yml +3 -3
- package/package.json +1 -1
- package/src/logger.js +19 -2
- package/src/routes/receive.js +24 -1
package/DOCKER.md
CHANGED
|
@@ -30,9 +30,12 @@ docker-compose up -d
|
|
|
30
30
|
#第一次安装
|
|
31
31
|
sudo docker compose up -d --build --progress=plain
|
|
32
32
|
|
|
33
|
-
# 更新docker
|
|
33
|
+
# 更新docker镜像(里面的npm依赖更新的时候用这个):
|
|
34
34
|
sudo docker compose build --no-cache
|
|
35
35
|
|
|
36
|
+
# 清理旧容器
|
|
37
|
+
sudo docker system prune -f
|
|
38
|
+
|
|
36
39
|
# 容器名称
|
|
37
40
|
docker ps | grep rrvideo-server
|
|
38
41
|
|
package/Dockerfile
CHANGED
|
@@ -27,13 +27,15 @@ RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debia
|
|
|
27
27
|
sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources
|
|
28
28
|
|
|
29
29
|
# ============================================
|
|
30
|
-
#
|
|
30
|
+
# 第三步:安装系统依赖
|
|
31
31
|
# ============================================
|
|
32
32
|
RUN apt-get update && apt-get install -y \
|
|
33
33
|
# 基础工具
|
|
34
34
|
curl \
|
|
35
35
|
wget \
|
|
36
36
|
ca-certificates \
|
|
37
|
+
# 安装 ffmpeg 和 ffprobe (合并视频必须)
|
|
38
|
+
ffmpeg \
|
|
37
39
|
# Playwright Chromium 依赖
|
|
38
40
|
libnss3 \
|
|
39
41
|
libnspr4 \
|
package/docker-compose.yml
CHANGED
|
@@ -8,7 +8,7 @@ services:
|
|
|
8
8
|
restart: unless-stopped
|
|
9
9
|
|
|
10
10
|
ports:
|
|
11
|
-
- "
|
|
11
|
+
- "23501:24203"
|
|
12
12
|
|
|
13
13
|
volumes:
|
|
14
14
|
# 配置文件(必须)
|
|
@@ -30,10 +30,10 @@ services:
|
|
|
30
30
|
deploy:
|
|
31
31
|
resources:
|
|
32
32
|
limits:
|
|
33
|
-
cpus: '
|
|
33
|
+
# cpus: '12'
|
|
34
34
|
memory: 4G
|
|
35
35
|
reservations:
|
|
36
|
-
cpus: '
|
|
36
|
+
cpus: '4'
|
|
37
37
|
memory: 2G
|
|
38
38
|
|
|
39
39
|
healthcheck:
|
package/package.json
CHANGED
package/src/logger.js
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
|
+
const config = require('./config');
|
|
4
|
+
|
|
5
|
+
const LOG_LEVELS = {
|
|
6
|
+
'DEBUG': 0,
|
|
7
|
+
'INFO': 1,
|
|
8
|
+
'WARN': 2,
|
|
9
|
+
'ERROR': 3
|
|
10
|
+
};
|
|
3
11
|
|
|
4
12
|
class Logger {
|
|
5
13
|
constructor() {
|
|
6
14
|
this.buffers = new Map(); // fileKey -> { logs: [], timer: null }
|
|
7
|
-
this.flushInterval = 2000; // 2秒
|
|
8
|
-
this.bufferMaxSize = 500; // 500条
|
|
15
|
+
this.flushInterval = config.get('log.flush_interval', 2000); // 默认2秒
|
|
16
|
+
this.bufferMaxSize = config.get('log.buffer_max_size', 500); // 默认500条
|
|
9
17
|
this.baseDir = path.join(__dirname, '../logs');
|
|
10
18
|
}
|
|
11
19
|
|
|
@@ -70,6 +78,15 @@ class Logger {
|
|
|
70
78
|
|
|
71
79
|
log(logType, fileName, message, level = 'INFO') {
|
|
72
80
|
try {
|
|
81
|
+
// 检查日志级别
|
|
82
|
+
const currentLevelStr = config.get('log.level', 'INFO').toUpperCase();
|
|
83
|
+
const currentLevel = LOG_LEVELS[currentLevelStr] !== undefined ? LOG_LEVELS[currentLevelStr] : LOG_LEVELS['INFO'];
|
|
84
|
+
const msgLevel = LOG_LEVELS[level.toUpperCase()] !== undefined ? LOG_LEVELS[level.toUpperCase()] : LOG_LEVELS['INFO'];
|
|
85
|
+
|
|
86
|
+
if (msgLevel < currentLevel) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
73
90
|
const timestamp = this.getCurrentTime();
|
|
74
91
|
const lines = String(message).split('\n');
|
|
75
92
|
const fileKey = `${logType}::${fileName}`;
|
package/src/routes/receive.js
CHANGED
|
@@ -35,7 +35,30 @@ async function handleReceiveRequest(req, res) {
|
|
|
35
35
|
logFileName = `${recordId}_${actionName}_${Date.now()}`;
|
|
36
36
|
|
|
37
37
|
logger.info(`[${actionName}] 收到统一请求,类型: ${type}, record_id: ${recordId}, request_id: ${requestId}`, logFileName, 'receive');
|
|
38
|
-
|
|
38
|
+
// 创建输入的副本进行日志记录,截断过长的字段
|
|
39
|
+
const logData = { ...inputData };
|
|
40
|
+
|
|
41
|
+
const truncate = (obj) => {
|
|
42
|
+
try {
|
|
43
|
+
const str = JSON.stringify(obj);
|
|
44
|
+
return str.length > 200 ? str.substring(0, 200) + '...' : obj;
|
|
45
|
+
} catch (e) {
|
|
46
|
+
return String(obj).substring(0, 200) + '...';
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
if (logData.events) {
|
|
51
|
+
logData.events = truncate(logData.events);
|
|
52
|
+
}
|
|
53
|
+
if (logData.tasks) {
|
|
54
|
+
logData.tasks = logData.tasks.map(t => {
|
|
55
|
+
const taskLog = { ...t };
|
|
56
|
+
if (taskLog.events) taskLog.events = truncate(taskLog.events);
|
|
57
|
+
return taskLog;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
logger.debug(`[${actionName}] 收到请求数据: ${JSON.stringify(logData)}`, logFileName, 'receive');
|
|
39
62
|
|
|
40
63
|
if (!recordId) {
|
|
41
64
|
logger.info(`[${actionName}] record_id不能为空`, logFileName, 'receive');
|