localPackages.hpcstat: fix

This commit is contained in:
陈浩南 2024-05-05 22:29:06 +08:00
parent 9efe69151c
commit 3b858d88ea
7 changed files with 25 additions and 10 deletions

View File

@ -1,11 +1,12 @@
{
stdenv, cmake, pkg-config, standalone ? false, makeWrapper,
boost, fmt, sqlite-orm, nlohmann_json, zpp-bits, range-v3, nameof, openssh, sqlite, date, openxlsx, httplib
boost, fmt, sqlite-orm, nlohmann_json, zpp-bits, range-v3, nameof, openssh, sqlite, date, openxlsx, httplib, openssl
}: stdenv.mkDerivation
{
name = "hpcstat";
src = ./.;
buildInputs = [ boost fmt sqlite-orm nlohmann_json zpp-bits range-v3 nameof sqlite date openxlsx httplib ];
buildInputs =
[ boost fmt sqlite-orm nlohmann_json zpp-bits range-v3 nameof sqlite date openxlsx httplib openssl.dev ];
nativeBuildInputs = [ cmake pkg-config makeWrapper ];
postInstall =
if standalone then "cp ${openssh}/bin/{ssh-add,ssh-keygen} $out/bin"

View File

@ -5,6 +5,7 @@ namespace hpcstat::lfs
{
std::optional<std::pair<unsigned, std::string>> bsub(std::vector<std::string> args);
// JobId -> { SubmitTime, Status, CpuTime, JobName }
std::optional<std::map<unsigned, std::tuple<std::string, std::string, double, std::string>>> bjobs_list();
std::optional<std::map<unsigned, std::tuple<std::string, std::string, double, std::string>>>
bjobs_list(bool finished_jobs_only = false);
std::optional<std::string> bjobs_detail(unsigned jobid);
}

View File

@ -44,7 +44,8 @@ namespace hpcstat::lfs
}
}
}
std::optional<std::map<unsigned, std::tuple<std::string, std::string, double, std::string>>> bjobs_list()
std::optional<std::map<unsigned, std::tuple<std::string, std::string, double, std::string>>> bjobs_list
(bool finished_jobs_only)
{
if
(
@ -70,7 +71,7 @@ namespace hpcstat::lfs
for (auto& job : j["RECORDS"])
{
std::string status = job["STAT"];
if (!std::set<std::string>{ "DONE", "EXIT" }.contains(status)) continue;
if (finished_jobs_only && !std::set<std::string>{ "DONE", "EXIT" }.contains(status)) continue;
std::string cpu_used_str = job["CPU_USED"];
double cpu_used = 0;
if (!cpu_used_str.empty())

View File

@ -77,7 +77,7 @@ int main(int argc, const char** argv)
if (auto fp = ssh::fingerprint(); !fp) return 1;
else if (auto session = env::env("XDG_SESSION_ID", true); !session)
return 1;
else if (auto all_jobs = lfs::bjobs_list(); !all_jobs) return 1;
else if (auto all_jobs = lfs::bjobs_list(true); !all_jobs) return 1;
else if
(
auto not_recorded = sql::finishjob_remove_existed

View File

@ -34,7 +34,8 @@ namespace hpcstat::push
token,
boost::urls::encode
(
fmt::format("{} {} {}", id, std::get<0>(info), std::get<1>(info)), boost::urls::unreserved_chars
fmt::format("{} {} {}", std::get<1>(info), std::get<0>(info), id),
boost::urls::unreserved_chars
),
users[user_string]
);

View File

@ -171,8 +171,18 @@ namespace hpcstat::sql
std::optional<SubmitJobData> result;
long submit_date = [&]
{
std::chrono::system_clock::time_point submit_date;
std::stringstream(submit_time) >> date::parse("%b %d %H:%M:%S %Y", submit_date);
std::chrono::system_clock::time_point submit_date_with_local;
std::stringstream(submit_time) >> date::parse("%b %d %H:%M:%S %Y", submit_date_with_local);
date::zoned_time submit_date_with_zone
(
date::current_zone(),
date::local_seconds
{
std::chrono::seconds(std::chrono::duration_cast<std::chrono::seconds>
(submit_date_with_local.time_since_epoch()).count())
}
);
auto submit_date = submit_date_with_zone.get_sys_time();
return std::chrono::duration_cast<std::chrono::seconds>(submit_date.time_since_epoch()).count();
}();
auto submit_jobs = connection->template get_all<SubmitJobData>
@ -317,7 +327,7 @@ namespace hpcstat::sql
result[job_id] =
{ std::get<3>(status), std::get<1>(status), job_in_submit->Key, job_in_submit->Subaccount };
conn->remove_all<CheckJobData>();
auto new_data = result
auto new_data = *jobs_current
| ranges::views::transform
([](auto& it) { return CheckJobData{ .JobId = it.first, .Status = std::get<1>(it.second) }; })
| ranges::to<std::vector<CheckJobData>>;

View File

@ -38,6 +38,7 @@ inputs:
fi
# check finishjob
${ssh} jykang@hpc.xmu.edu.cn hpcstat finishjob
${ssh} jykang@hpc.xmu.edu.cn hpcstat push
# download database
now=$(${date} '+%Y%m%d%H%M%S')
${rsync} -e "${ssh}" \