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."); // 休眠剩余时间(支持快速退出)