From 4e98e1f435f39180710151380ffe7b29df7ef34f Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 10 Mar 2023 21:19:52 -0800 Subject: [PATCH] boinc_cmd: add --get_task_summary command. Shows task summaries, one per line --- client/boinc_cmd.cpp | 107 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/client/boinc_cmd.cpp b/client/boinc_cmd.cpp index 0871a4bf6d..edf3a5d707 100644 --- a/client/boinc_cmd.cpp +++ b/client/boinc_cmd.cpp @@ -188,6 +188,111 @@ void show_alerts(RPC_CLIENT &rpc) { } } +////////////// --get_task_summary start //////////////// + +typedef vector STR_LIST; + +// given: a list of lines, each consisting of n columns +// for each column: find the longest entry. +// Then display the lines so the columns line up. +// +void show_str_lists(vector lines, int ncols) { + vector lengths; + int i; + for (i=0; i lines; + STR_LIST title; + title.push_back("Project"); + title.push_back("% Done"); + title.push_back("Elapsed"); + title.push_back("Deadline"); + title.push_back("Status"); + title.push_back("Procs"); + title.push_back("WU name"); + lines.push_back(title); + for (RESULT* r: results.results) { + RESULT_INFO* ri = new RESULT_INFO; + strcpy(ri->project_name, r->project_url); + for (PROJECT* p: ps.projects) { + if (!strcmp(p->master_url, r->project_url)) { + strcpy(ri->project_name, p->project_name.c_str()); + break; + } + } + if (r->scheduler_state > CPU_SCHED_UNINITIALIZED) { + sprintf(ri->pct_done, "%.2f%%", r->fraction_done*100); + strcpy(ri->elapsed_time, timediff_format(r->elapsed_time).c_str()); + } else { + strcpy(ri->pct_done, "---"); + strcpy(ri->elapsed_time, "---"); + } + strcpy(ri->deadline, time_to_string(r->report_deadline)); + strcpy(ri->status, active_task_state_string(r->active_task_state)); + downcase_string(ri->status); + strcpy(ri->resource_usage, strlen(r->resources)?r->resources:"1 CPU"); + strcpy(ri->wu_name, r->wu_name); + STR_LIST line; + line.push_back(ri->project_name); + line.push_back(ri->pct_done); + line.push_back(ri->elapsed_time); + line.push_back(ri->deadline); + line.push_back(ri->status); + line.push_back(ri->resource_usage); + line.push_back(ri->wu_name); + lines.push_back(line); + } + show_str_lists(lines, 7); + return 0; +} + +////////////// --get_task_summary end //////////////// + int main(int argc, char** argv) { RPC_CLIENT rpc; int i, retval, port=0; @@ -335,6 +440,8 @@ int main(int argc, char** argv) { RESULTS results; retval = rpc.get_results(results); if (!retval) results.print(); + } else if (!strcmp(cmd, "--get_task_summary")) { + retval = show_task_summary(rpc); } else if (!strcmp(cmd, "--get_old_tasks")) { vector ors; retval = rpc.get_old_results(ors);