Files
cleanup-smartcam-data/assets/cleanup-smartcam-data-flow.svg
T
2026-07-15 13:58:32 +08:00

57 lines
5.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" width="1800" height="1100" viewBox="0 0 1800 1100">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1"><stop stop-color="#f7faff"/><stop offset="1" stop-color="#edf4fb"/></linearGradient>
<linearGradient id="head" x1="0" y1="0" x2="1" y2="0"><stop stop-color="#063b73"/><stop offset="1" stop-color="#0862a6"/></linearGradient>
<filter id="shadow"><feDropShadow dx="0" dy="5" stdDeviation="8" flood-opacity=".12"/></filter>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0,0 L0,6 L9,3 z" fill="#184d80"/></marker>
<style>
text{font-family:"Noto Sans CJK SC","WenQuanYi Micro Hei",sans-serif;fill:#11345b}.title{font-size:55px;font-weight:700}.h{font-size:32px;font-weight:700;fill:#fff}.foot{font-size:24px;fill:#ddecff}.t{font-size:25px;font-weight:600}.s{font-size:21px}.box{fill:#fff;stroke:#1b4f82;stroke-width:3;rx:14}.green{fill:#edf9ef;stroke:#16843a}.orange{fill:#fff7e9;stroke:#e87512}.red{fill:#fff1f1;stroke:#c82532}.line{fill:none;stroke:#184d80;stroke-width:4;marker-end:url(#arrow)}
</style>
</defs>
<rect width="1800" height="1100" fill="#f3f7fc"/>
<text x="900" y="75" text-anchor="middle" class="title">cleanup-smartcam-data 自动清理与恢复策略</text>
<g transform="translate(45 115)">
<rect width="525" height="790" rx="18" fill="#fff" stroke="#b7cee5" stroke-width="2"/>
<path d="M18 0h489q18 0 18 18v62H0V18Q0 0 18 0" fill="#07508d"/><text x="262" y="52" text-anchor="middle" class="h">检查频率</text>
<rect class="box" x="95" y="120" width="335" height="78"/><text class="t" x="262" y="168" text-anchor="middle">开机 2 分钟后首次检查</text>
<path class="line" d="M262 198v58"/>
<rect class="box green" x="95" y="270" width="335" height="105"/><text class="t" x="262" y="312" text-anchor="middle">正常采集状态</text><text class="s" x="262" y="347" text-anchor="middle">每 60 分钟检查一次</text>
<path class="line" d="M262 375v58"/>
<rect class="box red" x="95" y="447" width="335" height="115"/><text class="t" x="262" y="490" text-anchor="middle">采集暂停状态</text><text class="s" x="262" y="526" text-anchor="middle">1 分钟后首次检查</text><text class="s" x="262" y="553" text-anchor="middle">之后每 2 分钟检查</text>
<path class="line" d="M262 562v58"/>
<rect class="box" x="72" y="635" width="380" height="105"/><text class="t" x="262" y="678" text-anchor="middle">恢复到 10 GiB</text><text class="s" x="262" y="714" text-anchor="middle">立即恢复采集,停止快速检查</text>
</g>
<g transform="translate(592 115)">
<rect width="555" height="790" rx="18" fill="#fff" stroke="#b7cee5" stroke-width="2"/>
<path d="M18 0h519q18 0 18 18v62H0V18Q0 0 18 0" fill="#07508d"/><text x="277" y="52" text-anchor="middle" class="h">安全清理</text>
<rect class="box" x="85" y="115" width="385" height="82"/><text class="t" x="277" y="165" text-anchor="middle">检查 /userdata 空闲空间</text>
<path class="line" d="M277 197v55"/>
<polygon points="277,245 450,335 277,425 104,335" fill="#fff" stroke="#1b4f82" stroke-width="3"/>
<text class="t" x="277" y="325" text-anchor="middle">空闲 &lt; 10 GiB?</text><text class="s" x="277" y="362" text-anchor="middle">是:读取成功上传名单</text>
<path class="line" d="M277 425v45"/>
<rect class="box orange" x="55" y="482" width="445" height="120"/><text class="t" x="277" y="523" text-anchor="middle">只删除已确认上传且超过 60 分钟</text><text class="s" x="277" y="558" text-anchor="middle">videos + videos_raw + annotations</text><text class="s" x="277" y="588" text-anchor="middle">三件套按时间从旧到新删除</text>
<path class="line" d="M277 602v43"/>
<rect class="box red" x="55" y="657" width="445" height="90"/><text class="t" x="277" y="696" text-anchor="middle">未上传 / 上传失败 / 正在上传</text><text class="s" x="277" y="729" text-anchor="middle">禁止删除;成功名单不可读时也不删除</text>
</g>
<g transform="translate(1170 115)">
<rect width="585" height="790" rx="18" fill="#fff" stroke="#b7cee5" stroke-width="2"/>
<path d="M18 0h549q18 0 18 18v62H0V18Q0 0 18 0" fill="#07508d"/><text x="292" y="52" text-anchor="middle" class="h">磁盘保护与自动恢复</text>
<rect class="box orange" x="75" y="112" width="435" height="86"/><text class="t" x="292" y="148" text-anchor="middle">空闲 &lt; 10 GiB</text><text class="s" x="292" y="180" text-anchor="middle">开始清理已确认成功的三件套</text>
<path class="line" d="M292 198v45"/>
<rect class="box red" x="75" y="256" width="435" height="98"/><text class="t" x="292" y="296" text-anchor="middle">空闲 &lt; 5 GiB</text><text class="s" x="292" y="331" text-anchor="middle">暂停 smart_camera;上传程序继续运行</text>
<path class="line" d="M292 354v45"/>
<rect class="box red" x="75" y="412" width="435" height="86"/><text class="t" x="292" y="449" text-anchor="middle">空闲 &lt; 3 GiB</text><text class="s" x="292" y="480" text-anchor="middle">输出 CRITICAL 严重告警</text>
<path class="line" d="M292 498v45"/>
<rect class="box" x="75" y="556" width="435" height="82"/><text class="t" x="292" y="606" text-anchor="middle">SFTP / Kafka 继续消化积压</text>
<path class="line" d="M292 638v42"/>
<rect class="box green" x="75" y="692" width="435" height="72"/><text class="t" x="292" y="737" text-anchor="middle">空闲 ≥ 10 GiB → 自动恢复采集</text>
</g>
<rect x="170" y="945" width="1460" height="105" rx="18" fill="#07508d"/>
<text x="900" y="990" text-anchor="middle" class="h">核心原则:只删除确认上传成功的数据;空间不足时暂停采集,不停止上传</text>
<text x="900" y="1028" text-anchor="middle" class="foot">空闲恢复到 10 GiB 后自动继续采集,并恢复每 60 分钟检查</text>
</svg>