From 69331e895181736b32cd58267859b16e5e850c1e Mon Sep 17 00:00:00 2001 From: cxh Date: Wed, 26 Nov 2025 09:25:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/record_manager.cpp | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/record_manager.cpp b/src/record_manager.cpp index 2d8d0b6..ad9c37b 100644 --- a/src/record_manager.cpp +++ b/src/record_manager.cpp @@ -125,6 +125,24 @@ bool RecordManager::loadSrsConfig() return true; } +std::optional RecordManager::getEarliestRecordMs() +{ + std::lock_guard lock(index_mutex_); + + int64_t earliest = -1; + + for (auto& kv : index_) + { + for (auto& f : kv.second) + { + if (earliest < 0 || f.start_ms < earliest) earliest = f.start_ms; + } + } + + if (earliest < 0) return std::nullopt; + return earliest; +} + void RecordManager::removeExpiredDays() { namespace fs = std::filesystem; @@ -290,7 +308,32 @@ void RecordManager::startAutoScan(int interval_sec) auto t0 = std::chrono::steady_clock::now(); this->scanAll(); + + // ======= 新增:打印最早录像时间 + 磁盘使用率 ======= + auto earliestOpt = this->getEarliestRecordMs(); + if (earliestOpt.has_value()) + { + std::string tReadable = RecordManager::toReadable(earliestOpt.value()); + + struct statvfs vfs{}; + double usedPct = -1; + if (statvfs(record_dir_.c_str(), &vfs) == 0) + { + double used = 1.0 - (double)vfs.f_bavail / (double)vfs.f_blocks; + usedPct = used * 100.0; + } + + LOG_INFO("[RecordManager] Earliest record time=" + tReadable + + ", disk used=" + std::to_string(usedPct) + "%"); + } + else + { + LOG_INFO("[RecordManager] No video files found."); + } + + // ======= 再调用清理 ======= this->cleanupStorage(); + LOG_INFO("[RecordManager] scanAll() completed."); // 休眠剩余时间(支持快速退出)