gengxin
This commit is contained in:
1 parent
71c4711282
commit
3c997033cb
4 files changed
+139
-32
No files matched your search
@@ -8,8 +8,7 @@
|
||||
cleanup-smartcam-data/
|
||||
├── README.md
|
||||
├── assets/
|
||||
│ ├── cleanup-smartcam-data-flow.svg(旧版源文件)
|
||||
│ └── cleanup-smartcam-data-flow.png(当前流程图)
|
||||
│ └── cleanup-smartcam-data-flow.png
|
||||
├── bin/
|
||||
│ └── cleanup-smartcam-data
|
||||
├── systemd/
|
||||
@@ -43,6 +42,10 @@ cleanup-smartcam-data/
|
||||
- smart-cam 容器名:`smart-cam`
|
||||
- 数据目录:`/userdata/data`
|
||||
- 容器内成功记录:`/smart-cam/kafka_sender/processed_files.log`
|
||||
- 强校验回执:`/userdata/data/upload_completed_types.json`
|
||||
- scan 强校验回执:`/userdata/data/upload_completed_scans.json`
|
||||
- 容器必须通过 `--hostname "$(hostname)"` 继承宿主机设备编号;`config.json`
|
||||
的 `device.id` 可留空自动使用该主机名,显式填写时必须与主机名一致
|
||||
- `smart_camera` 支持读取 `/smart-cam/data/.recording-paused-low-disk`
|
||||
(与宿主机 `/userdata/data/.recording-paused-low-disk` 是同一挂载文件)
|
||||
- 宿主机使用 Docker 和 systemd
|
||||
@@ -75,7 +78,11 @@ sudo ./scripts/install.sh
|
||||
- 开机2分钟后首次检查;
|
||||
- 之后每60分钟检查一次;
|
||||
- 每次定时检查都会安全清理已确认上传成功的数据,不以空闲空间阈值作为清理条件;
|
||||
- 只清理 `processed_files.log` 中确认成功、且超过60分钟的数据;
|
||||
- 只清理 `processed_files.log` 与 `upload_completed_types.json` 同时确认、且超过60分钟的数据;
|
||||
- 每条回执必须同时满足:当前启用的上传类型全部成功、回执 `device_id` 等于当前
|
||||
有效设备号、回执 `remote_base` 等于当前配置计算出的后台目录;有效设备号优先取
|
||||
非空 `config.json device.id`,否则取容器主机名;显式设备号与主机名不一致、旧式无
|
||||
设备号回执、设备号不一致或目标目录不一致时一律不删除;
|
||||
- 同时删除同一任务的:
|
||||
|
||||
```text
|
||||
@@ -84,22 +91,17 @@ sudo ./scripts/install.sh
|
||||
/userdata/data/annotations/<base>.xml
|
||||
```
|
||||
|
||||
- 超过60分钟的0字节 raw,如果未被进程占用,也会按上述三件套删除;
|
||||
- 每次运行都会对`videos_raw/videos/annotations`按base进行完整性对账;
|
||||
- 三个成员齐全才视为完整三件套;
|
||||
- 缺少任意成员且所有现存成员均超过60分钟、未被进程打开时,删除该base的全部残留;
|
||||
- 新录制、仍被进程打开或未满60分钟的文件不会被完整性对账误删;
|
||||
- 不再自动删除未获得强校验上传回执的零字节、残缺三件套或 `.part` 残留;这些文件
|
||||
即使看起来无效,也优先保留供人工审计,避免把上传故障误判为可清理数据;
|
||||
- 已确认上传的正常清理在删除前会再次要求raw、annotated和XML三者齐全,缺一项整组跳过;
|
||||
- scan 以一次扫描目录为原子单位;只有全部小图和`meta.json`的SFTP
|
||||
上传均完成、Kafka消息确认成功,并写入
|
||||
`/userdata/data/upload_processed_scans.log`后才允许清理;
|
||||
- 已确认的scan还必须超过60分钟、`meta.json`状态为`completed`且目录内
|
||||
- scan 以一次扫描目录为原子单位;只有全部小图、`meta.json` 和可选
|
||||
`patrol_plan.json` 均通过 SFTP 大小校验、Kafka 消息确认成功,并写入同时包含当前
|
||||
设备号、远端路径、Kafka topic、图片数和文件数的
|
||||
`/userdata/data/upload_completed_scans.json` 强回执后才允许清理;
|
||||
- `upload_processed_scans.log` 只是队列索引,旧版只有 scan_id 的记录不能单独证明
|
||||
上传目标正确,不再触发删除;
|
||||
- 已强确认的 scan 还必须超过60分钟、`meta.json`状态为`completed`且目录内
|
||||
没有文件被进程打开,随后才会整目录删除;
|
||||
- 对`<base>_raw.mp4.partN.mp4`录制残留执行整组安全检查:
|
||||
- 同一base的所有part都必须超过60分钟、全部为0字节且均未被进程打开;
|
||||
- 如果正式`<base>_raw.mp4`已经存在,只删除符合条件的残留part,保留正常三件套;
|
||||
- 如果正式raw不存在,删除全部残留part及对应的annotated视频和XML;
|
||||
- 任一part仍较新、非0字节或正在使用时,整组跳过;
|
||||
- 空闲低于3GiB时只创建“禁止录像”标记,立即结束正在生成的录像,并停止产生新的
|
||||
`videos`、`videos_raw`、`annotations`;持续检测、推理、RTSP/公网直播、scan和
|
||||
Producer上传均不暂停;
|
||||
@@ -125,13 +127,14 @@ systemctl status cleanup-smartcam-data.service
|
||||
journalctl -u cleanup-smartcam-data.service -n 100 --no-pager
|
||||
```
|
||||
|
||||
确认成功记录可读:
|
||||
确认成功记录与强校验回执均可读:
|
||||
|
||||
```bash
|
||||
docker exec smart-cam \
|
||||
test -r /smart-cam/kafka_sender/processed_files.log
|
||||
|
||||
test -r /userdata/data/upload_processed_scans.log
|
||||
test -r /userdata/data/upload_completed_types.json
|
||||
```
|
||||
|
||||
确认 Docker 未重启:
|
||||
|
||||
Reference in new issue
Block a user