safesight-edge/plugins/alarm/actions/log_action.cpp
2025-12-26 16:58:18 +08:00

56 lines
1.7 KiB
C++

#include "log_action.h"
#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <sstream>
namespace rk3588 {
bool LogAction::Init(const SimpleJson& config) {
level_ = config.ValueOr<std::string>("level", "info");
include_detections_ = config.ValueOr<bool>("include_detections", true);
std::cout << "[LogAction] initialized, level=" << level_ << "\n";
return true;
}
void LogAction::Execute(AlarmEvent& event, std::shared_ptr<Frame> /*frame*/) {
auto now = std::chrono::system_clock::now();
auto time_t_now = std::chrono::system_clock::to_time_t(now);
std::tm* tm_now = std::localtime(&time_t_now);
std::ostringstream oss;
oss << "[ALARM][" << level_ << "] "
<< std::put_time(tm_now, "%Y-%m-%d %H:%M:%S")
<< " node=" << event.node_id
<< " rule=" << event.rule_name
<< " frame=" << event.frame_id;
if (include_detections_ && !event.detections.empty()) {
oss << " detections=[";
for (size_t i = 0; i < event.detections.size(); ++i) {
const auto& det = event.detections[i];
if (i > 0) oss << ", ";
oss << "{cls=" << det.cls_id
<< " score=" << std::fixed << std::setprecision(2) << det.score
<< " bbox=(" << static_cast<int>(det.bbox.x) << ","
<< static_cast<int>(det.bbox.y) << ","
<< static_cast<int>(det.bbox.w) << ","
<< static_cast<int>(det.bbox.h) << ")}";
}
oss << "]";
}
if (!event.snapshot_url.empty()) {
oss << " snapshot=" << event.snapshot_url;
}
if (!event.clip_url.empty()) {
oss << " clip=" << event.clip_url;
}
std::cout << oss.str() << "\n";
}
} // namespace rk3588