bonus-edge-proxy/src/web/web_server.cc

66 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 文件名: src/web/web_server.cc
#include "web_server.h"
#include "spdlog/spdlog.h"
WebServer::WebServer(SystemMonitor::SystemMonitor& monitor, uint16_t port)
: m_monitor(monitor), m_port(port)
{
// Crow默认会输出很多调试信息我们可以将其日志级别调高
// 以便只显示警告和错误,让我们的终端更干净。
m_app.loglevel(crow::LogLevel::Warning);
// 调用函数来设置所有的API路由
setup_routes();
}
WebServer::~WebServer() {
stop();
}
void WebServer::start() {
if (m_thread.joinable()) {
spdlog::warn("Web server is already running.");
return;
}
// Crow的 run() 方法是一个阻塞操作,它会一直运行直到被停止。
// 因此,我们必须在一个独立的线程中启动它,否则它会卡住我们的主程序。
m_thread = std::thread([this]() {
spdlog::info("Starting Web server on port {}", m_port);
m_app.port(m_port).run();
spdlog::info("Web server has stopped.");
});
}
void WebServer::stop() {
m_app.stop();
if (m_thread.joinable()) {
m_thread.join();
}
}
void WebServer::setup_routes() {
// ----------------------------------------------------------------
// 定义第一个API路由: GET /api/system/status
// ----------------------------------------------------------------
CROW_ROUTE(m_app, "/api/system/status")
([this] {
auto cpu_util = m_monitor.getCpuUtilization();
auto mem_info = m_monitor.getMemoryInfo();
crow::json::wvalue response;
response["cpu_usage_percentage"] = cpu_util.totalUsagePercentage;
response["memory_total_kb"] = mem_info.total_kb;
response["memory_free_kb"] = mem_info.available_kb;
response["memory_usage_percentage"] = (mem_info.total_kb > 0)
? (1.0 - static_cast<double>(mem_info.available_kb) / mem_info.total_kb) * 100.0
: 0.0;
return response;
});
// 未来在这里添加更多的路由,例如:
// CROW_ROUTE(m_app, "/api/devices")([this]{ ... });
}