From 734226a33a927c977859c98359c7e51e60acd55d Mon Sep 17 00:00:00 2001
From: zhaojingkui <1553836110@qq.com>
Date: Thu, 13 Feb 2025 12:58:13 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=B8=8B=E8=BD=BD?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/appPowerMangerWebUI/index.html | 157 +++++++++++++++++++----------
src/appPowerMangerWebUI/main.cpp | 57 +++++++++--
src/pPowerManger/SQLiteDB.cpp | 5 +
src/pPowerManger/SQLiteDB.h | 5 +
4 files changed, 160 insertions(+), 64 deletions(-)
diff --git a/src/appPowerMangerWebUI/index.html b/src/appPowerMangerWebUI/index.html
index 0cff833..2f90468 100644
--- a/src/appPowerMangerWebUI/index.html
+++ b/src/appPowerMangerWebUI/index.html
@@ -16,11 +16,20 @@
padding: 20px;
height: 100vh;
display: grid;
- grid-template-rows: auto 1fr 1fr;
+ grid-template-rows: auto auto 1fr 1fr;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
+ .db-status-panel {
+ grid-column: 1 / -1;
+ background-color: #333;
+ border: 1px solid #61dafb;
+ border-radius: 8px;
+ padding: 20px;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ }
+
.control-panel {
grid-column: 1 / -1;
display: flex;
@@ -32,16 +41,6 @@
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
- .db-status-panel {
- grid-column: 1 / -1;
- background-color: #333;
- border: 1px solid #61dafb;
- border-radius: 8px;
- padding: 20px;
- margin-top: 20px;
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
- }
-
.db-status {
display: flex;
align-items: center;
@@ -123,22 +122,22 @@
.log-panel {
grid-column: 1;
- grid-row: 3;
+ grid-row: 4;
}
.ccu-state-panel {
grid-column: 2;
- grid-row: 2;
+ grid-row: 3;
}
.dis-sys-panel {
grid-column: 1;
- grid-row: 2;
+ grid-row: 3;
}
.state-machine-panel {
grid-column: 2;
- grid-row: 3;
+ grid-row: 4;
}
pre {
@@ -148,10 +147,44 @@
font-size: 13px;
line-height: 1.4;
}
+
+ .file-input {
+ display: none;
+ }
+
+ .file-label {
+ display: inline-block;
+ padding: 10px 15px;
+ background: #61dafb;
+ color: #282c34;
+ border-radius: 4px;
+ cursor: pointer;
+ margin-left: 10px;
+ }
+
+
+
+
+
MOOSDB
+
+
+ 正在连接MOOSDB...
+
+
+
+
本地数据库
+
+
+ 正在连接数据库...
+
+
+
+
+
-
-
-
-
-
-
数据库操作
-
-
- 正在连接数据库...
-
@@ -204,6 +227,32 @@
diff --git a/src/appPowerMangerWebUI/main.cpp b/src/appPowerMangerWebUI/main.cpp
index fd2e9fe..192b4de 100644
--- a/src/appPowerMangerWebUI/main.cpp
+++ b/src/appPowerMangerWebUI/main.cpp
@@ -10,6 +10,7 @@
#include
#include
#include "../pPowerManger/SQLiteDB.h"
+#include
using namespace std;
@@ -24,38 +25,72 @@ string read_file(const string& path) {
int main() {
crow::SimpleApp app;
SQLiteDB db("/home/zjk/project/H100/H100PowerManger/data/power_data.db");
- // 初始化 SQLite 数据库
+ MOOS::MOOSAsyncCommClient moosClient;
+ moosClient.Run("localhost", 9000, "appPowerMangerWebUI");
- // 路由返回 HTML 页面
+ // 定义路由,处理根路径的请求
CROW_ROUTE(app, "/")([](){
// 读取 HTML 文件
string html_content = read_file("/home/zjk/project/H100/H100PowerManger/src/appPowerMangerWebUI/index.html");
return html_content;
});
-
+ // 定义路由,处理 /api/power-data 的请求
CROW_ROUTE(app, "/api/db-status")
([&db]() {
crow::json::wvalue response;
if (db.isDatabaseConnected("/home/zjk/project/H100/H100PowerManger/data", "power_data.db")) {
response["connected"] = true;
- response["database"] = "YourDatabaseName"; // 替换为实际的数据库名称
+ response["database"] = db.getDBPatch(); // 替换为实际的数据库名称
} else {
response["connected"] = false;
}
return response;
});
-
+ // 定义路由,处理 /api/power-data 的请求
CROW_ROUTE(app, "/api/download-db")
([&db]() {
std::ifstream file("/home/zjk/project/H100/H100PowerManger/data/power_data.db", std::ios::binary);
if (!file) {
return crow::response(404, "Database file not found");
}
- std::vector buffer((std::istreambuf_iterator(file)), std::istreambuf_iterator());
- // 将 buffer.size() 转换为 std::string
- std::string contentLength = std::to_string(buffer.size());
- crow::response response(buffer.size(), contentLength, "application/octet-stream");
- response.add_header("Content-Disposition", "attachment; filename=power_data.db");
+
+ // 获取文件大小
+ file.seekg(0, std::ios::end);
+ size_t fileSize = file.tellg();
+ file.seekg(0, std::ios::beg);
+
+ // 创建响应对象
+ crow::response response;
+ response.code = 200;
+ response.set_header("Content-Type", "application/octet-stream");
+ response.set_header("Content-Disposition", "attachment; filename=power_data.db");
+ response.set_header("Content-Length", std::to_string(fileSize));
+
+ // 直接返回文件流
+ response.body = std::string((std::istreambuf_iterator(file)), std::istreambuf_iterator());
+ file.close();
+
+ return response;
+ });
+ // 定义路由,处理 /api/moos-db 的请求
+ CROW_ROUTE(app, "/api/moos-db")
+ ([&moosClient]() -> crow::json::wvalue {
+ crow::json::wvalue response;
+ if (moosClient.IsConnected()) {
+ response["connected"] = true;
+ response["host"] = moosClient.GetDBHostname();
+ response["port"] = std::to_string(moosClient.GetDBHostPort());
+ }
+ else {
+ response["connected"] = false;
+ }
+ return response;
+ });
+ // 定义路由,处理 /api/moos-notify 的请求(POST)
+ CROW_ROUTE(app, "/api/moos-notify")
+ ([&moosClient]() {
+ crow::json::wvalue response;
+ response["message"] = "Received MOOS notification";
return response;
});
@@ -63,4 +98,4 @@ int main() {
app.port(18080).multithreaded().run();
return 0;
-}
\ No newline at end of file
+}
diff --git a/src/pPowerManger/SQLiteDB.cpp b/src/pPowerManger/SQLiteDB.cpp
index 738f5d7..aa6db58 100644
--- a/src/pPowerManger/SQLiteDB.cpp
+++ b/src/pPowerManger/SQLiteDB.cpp
@@ -8,6 +8,7 @@ SQLiteDB::SQLiteDB(const std::string& dbPath) {
std::cerr << "Error opening database: " << sqlite3_errmsg(m_db) << std::endl;
m_db = nullptr;
}
+ m_dbPath = dbPath;
}
SQLiteDB::~SQLiteDB() {
@@ -151,3 +152,7 @@ std::vector SQLiteDB::getPowerData(int limit) {
return data;
}
+
+string SQLiteDB::getDBPatch(){
+ return m_dbPath;
+}
\ No newline at end of file
diff --git a/src/pPowerManger/SQLiteDB.h b/src/pPowerManger/SQLiteDB.h
index 8d27bef..2c4a8d2 100644
--- a/src/pPowerManger/SQLiteDB.h
+++ b/src/pPowerManger/SQLiteDB.h
@@ -7,6 +7,7 @@
#include "json/json.h"
// #include
+using namespace std;
struct PowerData {
std::string timestamp;
double voltage;
@@ -38,8 +39,12 @@ public:
//使用函数
bool isDatabaseConnected(const std::string& path, const std::string& dbName);
+ //获取数据库状态函数
+ string getDBPatch();
+
private:
sqlite3* m_db;
+ string m_dbPath;
};
#endif // SQLITEDB_H