增加日志存储功能
This commit is contained in:
parent
f726d015ae
commit
8245ab0773
|
|
@ -42,6 +42,7 @@
|
||||||
|
|
||||||
build/
|
build/
|
||||||
build_gyk/
|
build_gyk/
|
||||||
|
build-gyk/
|
||||||
# Ignore Mosquitto runtime data and logs
|
# Ignore Mosquitto runtime data and logs
|
||||||
mosquitto/data/
|
mosquitto/data/
|
||||||
mosquitto/log/
|
mosquitto/log/
|
||||||
|
|
@ -61,6 +61,9 @@ add_library(edge_proxy_lib STATIC
|
||||||
|
|
||||||
#web
|
#web
|
||||||
src/web/web_server.cc
|
src/web/web_server.cc
|
||||||
|
|
||||||
|
#SQL
|
||||||
|
src/dataStorage/data_storage.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(edge_proxy_lib PUBLIC
|
target_include_directories(edge_proxy_lib PUBLIC
|
||||||
|
|
@ -94,14 +97,14 @@ target_link_libraries(edge_proxy PRIVATE
|
||||||
# =================#================================================
|
# =================#================================================
|
||||||
# 测试目标
|
# 测试目标
|
||||||
# =================================================================
|
# =================================================================
|
||||||
add_executable(test
|
# add_executable(test
|
||||||
src/test.cc
|
# src/test.cc
|
||||||
src/piper_tts_interface.cc
|
# src/piper_tts_interface.cc
|
||||||
|
|
||||||
)
|
# )
|
||||||
|
|
||||||
target_link_libraries(test PRIVATE
|
# target_link_libraries(test PRIVATE
|
||||||
edge_proxy_lib
|
# edge_proxy_lib
|
||||||
)
|
# )
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,18 @@ services:
|
||||||
- /dev/ttyS7:/dev/ttyS7
|
- /dev/ttyS7:/dev/ttyS7
|
||||||
- /dev/ttyS9:/dev/ttyS9
|
- /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:
|
group_add:
|
||||||
- "20"
|
- "20"
|
||||||
|
- "44"
|
||||||
|
- "110"
|
||||||
volumes:
|
volumes:
|
||||||
- .:/app
|
- .:/app
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,24 +34,20 @@ RUN apt-get update && \
|
||||||
\
|
\
|
||||||
# --- 用户和组创建 ---
|
# --- 用户和组创建 ---
|
||||||
groupadd -r developers && \
|
groupadd -r developers && \
|
||||||
# 创建 'dev' 用户,将其主组设置为 'developers',并添加到 'sudo' 组
|
|
||||||
useradd -ms /bin/bash -g developers -G sudo dev && \
|
useradd -ms /bin/bash -g developers -G sudo dev && \
|
||||||
# 添加用户到 'dialout' 组 (GID 20) 以便访问串口设备
|
|
||||||
# `|| true` 用于防止在 GID 已存在时出错
|
|
||||||
groupadd -g 20 dialout || true && \
|
groupadd -g 20 dialout || true && \
|
||||||
|
groupadd -g 44 video || true && \
|
||||||
|
groupadd -g 110 render || true && \
|
||||||
usermod -a -G dialout dev && \
|
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
|
echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd
|
||||||
|
|
||||||
# 3. 权限和协作设置
|
|
||||||
# =================================
|
# =================================
|
||||||
# 为所有用户设置 umask 为 0002,这样新创建的文件权限默认为 664 (rw-rw-r--)
|
# 为所有用户设置 umask 为 0002,这样新创建的文件权限默认为 664 (rw-rw-r--)
|
||||||
RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \
|
RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \
|
||||||
chmod +x /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
|
COPY . /tmp/build-context
|
||||||
|
|
||||||
RUN cd /tmp/build-context/external/paho.mqtt.c && \
|
RUN cd /tmp/build-context/external/paho.mqtt.c && \
|
||||||
|
|
@ -77,13 +73,11 @@ COPY piper_models/ /app/piper_models/
|
||||||
|
|
||||||
USER dev
|
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
|
# 将 ~/.local/bin (包含 piper 二进制文件) 添加到 PATH
|
||||||
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile
|
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile
|
||||||
# 现在,dev 用户可以使用 `piper` 命令了,只要 shell 环境被正确加载。
|
# 现在,dev 用户可以使用 `piper` 命令了,只要 shell 环境被正确加载。
|
||||||
# 我们可以将最终的 CMD 设置为加载环境然后执行一个命令,或者留空让用户交互。
|
# 我们可以将最终的 CMD 设置为加载环境然后执行一个命令,或者留空让用户交互。
|
||||||
# 5. 设置默认用户
|
|
||||||
# =================================
|
|
||||||
# 容器的默认用户将是 'dev'
|
|
||||||
USER dev
|
USER dev
|
||||||
CMD ["/bin/bash"]
|
CMD ["/bin/bash"]
|
||||||
|
|
|
||||||
|
|
@ -108,9 +108,6 @@ bool DataStorage::storeRawData(const std::string& device_id, const std::string&
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// **重要**:这里的 stmt_guard 也需要修正
|
|
||||||
// 你之前的代码里是 std::unique_ptr<void, ...>,这也是错误的
|
|
||||||
// 应该是 sqlite3_stmt*
|
|
||||||
std::unique_ptr<sqlite3_stmt, decltype(&sqlite3_finalize)> stmt_guard(stmt, sqlite3_finalize);
|
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_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());
|
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;
|
std::cerr << "Failed to prepare statement for processed_data: " << sqlite3_errmsg(db_->db_handle) << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// **重要**:这里的 stmt_guard 也需要修正
|
|
||||||
std::unique_ptr<sqlite3_stmt, decltype(&sqlite3_finalize)> stmt_guard(stmt, sqlite3_finalize);
|
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_text(stmt, 1, data.device_id.c_str(), -1, SQLITE_STATIC);
|
||||||
sqlite3_bind_int64(stmt, 2, data.timestamp_ms);
|
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 "dataCache/cache_uploader.h"
|
||||||
#include "web/web_server.h"
|
#include "web/web_server.h"
|
||||||
#include "dataCache/live_data_cache.h"
|
#include "dataCache/live_data_cache.h"
|
||||||
|
#include "dataStorage/data_storage.h"
|
||||||
|
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/asio/steady_timer.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;
|
std::cerr << "Log initialization failed: " << ex.what() << std::endl;
|
||||||
return 1;
|
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 {
|
try {
|
||||||
DataCache data_cache;
|
DataCache data_cache;
|
||||||
LiveDataCache live_data_cache;
|
LiveDataCache live_data_cache;
|
||||||
MqttClient mqtt_client("tcp://mqtt-broker:1883", "edge-proxy-main-client");
|
MqttClient mqtt_client("tcp://mqtt-broker:1883", "edge-proxy-main-client");
|
||||||
auto report_to_mqtt = [&](const UnifiedData& data) {
|
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);
|
live_data_cache.update_data(data.device_id, data.data_json);
|
||||||
if (mqtt_client.is_connected()) {
|
if (mqtt_client.is_connected()) {
|
||||||
// 网络正常,直接上报
|
// 网络正常,直接上报
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue