增加日志存储功能
This commit is contained in:
parent
f726d015ae
commit
8245ab0773
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
build/
|
||||
build_gyk/
|
||||
build-gyk/
|
||||
# Ignore Mosquitto runtime data and logs
|
||||
mosquitto/data/
|
||||
mosquitto/log/
|
||||
|
|
@ -61,6 +61,9 @@ add_library(edge_proxy_lib STATIC
|
|||
|
||||
#web
|
||||
src/web/web_server.cc
|
||||
|
||||
#SQL
|
||||
src/dataStorage/data_storage.cc
|
||||
)
|
||||
|
||||
target_include_directories(edge_proxy_lib PUBLIC
|
||||
|
|
@ -94,14 +97,14 @@ target_link_libraries(edge_proxy PRIVATE
|
|||
# =================#================================================
|
||||
# 测试目标
|
||||
# =================================================================
|
||||
add_executable(test
|
||||
src/test.cc
|
||||
src/piper_tts_interface.cc
|
||||
# add_executable(test
|
||||
# src/test.cc
|
||||
# src/piper_tts_interface.cc
|
||||
|
||||
)
|
||||
# )
|
||||
|
||||
target_link_libraries(test PRIVATE
|
||||
edge_proxy_lib
|
||||
)
|
||||
# target_link_libraries(test PRIVATE
|
||||
# edge_proxy_lib
|
||||
# )
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,9 +11,18 @@ services:
|
|||
- /dev/ttyS7:/dev/ttyS7
|
||||
- /dev/ttyS9:/dev/ttyS9
|
||||
|
||||
# --- VPU/NPU/RGA/GPU 硬件访问 ---
|
||||
- /dev/mpp_service:/dev/mpp_service
|
||||
- /dev/vpu_service:/dev/vpu_service
|
||||
- /dev/rga:/dev/rga
|
||||
- /dev/dri:/dev/dri
|
||||
# --- NPU ---
|
||||
- /dev/rknn_service:/dev/rknn_service
|
||||
|
||||
group_add:
|
||||
- "20"
|
||||
|
||||
- "44"
|
||||
- "110"
|
||||
volumes:
|
||||
- .:/app
|
||||
|
||||
|
|
|
|||
|
|
@ -34,24 +34,20 @@ RUN apt-get update && \
|
|||
\
|
||||
# --- 用户和组创建 ---
|
||||
groupadd -r developers && \
|
||||
# 创建 'dev' 用户,将其主组设置为 'developers',并添加到 'sudo' 组
|
||||
useradd -ms /bin/bash -g developers -G sudo dev && \
|
||||
# 添加用户到 'dialout' 组 (GID 20) 以便访问串口设备
|
||||
# `|| true` 用于防止在 GID 已存在时出错
|
||||
groupadd -g 20 dialout || true && \
|
||||
groupadd -g 44 video || true && \
|
||||
groupadd -g 110 render || true && \
|
||||
usermod -a -G dialout dev && \
|
||||
# 为 'dev' 用户设置无密码 sudo
|
||||
usermod -a -G video dev && \
|
||||
usermod -a -G render dev && \
|
||||
echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd
|
||||
|
||||
# 3. 权限和协作设置
|
||||
# =================================
|
||||
# 为所有用户设置 umask 为 0002,这样新创建的文件权限默认为 664 (rw-rw-r--)
|
||||
RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \
|
||||
chmod +x /etc/profile.d/99-shared-umask.sh
|
||||
|
||||
# 4. 编译并安装第三方库
|
||||
# =================================
|
||||
# [cite_start]将整个项目复制到临时目录,用于编译 paho 等库 [cite: 4]
|
||||
COPY . /tmp/build-context
|
||||
|
||||
RUN cd /tmp/build-context/external/paho.mqtt.c && \
|
||||
|
|
@ -77,13 +73,11 @@ COPY piper_models/ /app/piper_models/
|
|||
|
||||
USER dev
|
||||
|
||||
RUN pip install --no-cache-dir --user piper-tts
|
||||
RUN pip install --no-cache-dir --user -i https://mirrors.aliyun.com/pypi/simple/ piper-tts
|
||||
# 将 ~/.local/bin (包含 piper 二进制文件) 添加到 PATH
|
||||
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile
|
||||
# 现在,dev 用户可以使用 `piper` 命令了,只要 shell 环境被正确加载。
|
||||
# 我们可以将最终的 CMD 设置为加载环境然后执行一个命令,或者留空让用户交互。
|
||||
# 5. 设置默认用户
|
||||
# =================================
|
||||
# 容器的默认用户将是 'dev'
|
||||
|
||||
USER dev
|
||||
CMD ["/bin/bash"]
|
||||
|
|
|
|||
|
|
@ -108,9 +108,6 @@ bool DataStorage::storeRawData(const std::string& device_id, const std::string&
|
|||
return false;
|
||||
}
|
||||
|
||||
// **重要**:这里的 stmt_guard 也需要修正
|
||||
// 你之前的代码里是 std::unique_ptr<void, ...>,这也是错误的
|
||||
// 应该是 sqlite3_stmt*
|
||||
std::unique_ptr<sqlite3_stmt, decltype(&sqlite3_finalize)> stmt_guard(stmt, sqlite3_finalize);
|
||||
sqlite3_bind_text(stmt, 1, device_id.c_str(), -1, SQLITE_STATIC);
|
||||
sqlite3_bind_int64(stmt, 2, std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
|
||||
|
|
@ -137,7 +134,6 @@ bool DataStorage::storeProcessedData(const UnifiedData& data) {
|
|||
std::cerr << "Failed to prepare statement for processed_data: " << sqlite3_errmsg(db_->db_handle) << std::endl;
|
||||
return false;
|
||||
}
|
||||
// **重要**:这里的 stmt_guard 也需要修正
|
||||
std::unique_ptr<sqlite3_stmt, decltype(&sqlite3_finalize)> stmt_guard(stmt, sqlite3_finalize);
|
||||
sqlite3_bind_text(stmt, 1, data.device_id.c_str(), -1, SQLITE_STATIC);
|
||||
sqlite3_bind_int64(stmt, 2, data.timestamp_ms);
|
||||
|
|
|
|||
16
src/main.cpp
16
src/main.cpp
|
|
@ -10,6 +10,7 @@
|
|||
#include "dataCache/cache_uploader.h"
|
||||
#include "web/web_server.h"
|
||||
#include "dataCache/live_data_cache.h"
|
||||
#include "dataStorage/data_storage.h"
|
||||
|
||||
#include <boost/asio.hpp>
|
||||
#include <boost/asio/steady_timer.hpp>
|
||||
|
|
@ -52,12 +53,25 @@ int main(int argc, char* argv[]) {
|
|||
std::cerr << "Log initialization failed: " << ex.what() << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// --- 数据库初始化代码 ---
|
||||
spdlog::info("Initializing Data Storage...");
|
||||
if (!DataStorage::getInstance().initialize("edge_proxy_data.db")) {
|
||||
spdlog::critical("Failed to initialize DataStorage. Exiting.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
try {
|
||||
DataCache data_cache;
|
||||
LiveDataCache live_data_cache;
|
||||
MqttClient mqtt_client("tcp://mqtt-broker:1883", "edge-proxy-main-client");
|
||||
auto report_to_mqtt = [&](const UnifiedData& data) {
|
||||
// 使用 DataStorage 单例存储处理后的 UnifiedData 对象
|
||||
if (DataStorage::getInstance().storeProcessedData(data)) {
|
||||
spdlog::debug("Successfully stored PROCESSED data for device '{}'", data.device_id);
|
||||
} else {
|
||||
spdlog::error("Failed to store PROCESSED data for device '{}'", data.device_id);
|
||||
}
|
||||
//
|
||||
live_data_cache.update_data(data.device_id, data.data_json);
|
||||
if (mqtt_client.is_connected()) {
|
||||
// 网络正常,直接上报
|
||||
|
|
|
|||
Loading…
Reference in New Issue