From e5fd732788c3b1a8e9b4a8c225e32cfb44b307e5 Mon Sep 17 00:00:00 2001 From: chn Date: Sun, 5 May 2024 14:52:15 +0800 Subject: [PATCH] localPackages/hpcstat: initdb command --- local/pkgs/hpcstat/include/hpcstat/sql.hpp | 2 ++ local/pkgs/hpcstat/src/main.cpp | 3 ++- local/pkgs/hpcstat/src/sql.cpp | 9 ++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/local/pkgs/hpcstat/include/hpcstat/sql.hpp b/local/pkgs/hpcstat/include/hpcstat/sql.hpp index 89921a78..9a07d1ce 100644 --- a/local/pkgs/hpcstat/include/hpcstat/sql.hpp +++ b/local/pkgs/hpcstat/include/hpcstat/sql.hpp @@ -42,6 +42,8 @@ namespace hpcstat::sql }; // 序列化任意数据,用于之后签名 std::string serialize(auto data); + // 初始化数据库 + bool initdb(); // 将数据写入数据库 bool writedb(auto value); // 查询 bjobs -a 的结果中,有哪些是已经被写入到数据库中的(按照任务 id 和提交时间计算),返回未被写入的任务 id diff --git a/local/pkgs/hpcstat/src/main.cpp b/local/pkgs/hpcstat/src/main.cpp index 00bcf154..ed511930 100644 --- a/local/pkgs/hpcstat/src/main.cpp +++ b/local/pkgs/hpcstat/src/main.cpp @@ -14,7 +14,8 @@ int main(int argc, const char** argv) using namespace std::literals; std::vector args(argv, argv + argc); - if (args.size() == 1) { std::cout << "Usage: hpcstat login|logout|submitjob|finishjob|verify\n"; return 1; } + if (args.size() == 1) { std::cout << "Usage: hpcstat initdb|login|logout|submitjob|finishjob|verify\n"; return 1; } + else if (args[1] == "initdb") { if (!sql::initdb()) { std::cerr << "Failed to initialize database\n"; return 1; } } else if (args[1] == "login") { if (env::interactive()) diff --git a/local/pkgs/hpcstat/src/sql.cpp b/local/pkgs/hpcstat/src/sql.cpp index 63ed46f1..2de4ee83 100644 --- a/local/pkgs/hpcstat/src/sql.cpp +++ b/local/pkgs/hpcstat/src/sql.cpp @@ -76,7 +76,14 @@ namespace hpcstat::sql return decltype(conn())(); else dbfile = std::filesystem::path(*datadir) / "hpcstat.db"; } - return conn(); + auto result = conn(); + if (!result) std::cerr << "Failed to connect to database.\n"; + return result; + } + bool initdb() + { + if (auto conn = connect(); !conn) return false; + else { conn->sync_schema(); return true; } } bool writedb(auto value) { if (auto conn = connect(); !conn) return false; else { conn->insert(value); return true; } }