diff scictl.c @ 1:5afdb14df924

sci: add support for storing results
author David Demelier <markand@malikania.fr>
date Tue, 08 Jun 2021 08:40:01 +0200
parents f1de39079243
children 5fa3d2f479b2
line wrap: on
line diff
--- a/scictl.c	Mon Jun 07 09:41:37 2021 +0200
+++ b/scictl.c	Tue Jun 08 08:40:01 2021 +0200
@@ -8,6 +8,7 @@
 
 #include "config.h"
 #include "project.h"
+#include "job.h"
 #include "req.h"
 #include "util.h"
 #include "worker.h"
@@ -22,11 +23,13 @@
 noreturn static void
 help(void)
 {
-	fprintf(stderr, "usage: job-queue project tag\n");
-	fprintf(stderr, "       project-add name desc url script\n");
-	fprintf(stderr, "       project-list\n");
-	fprintf(stderr, "       worker-add name desc\n");
-	fprintf(stderr, "       worker-list\n");
+	fprintf(stderr, "usage: %s job-queue project tag\n", getprogname());
+	fprintf(stderr, "       %s job-list project\n", getprogname());
+	fprintf(stderr, "       %s job-save id worker status retcode console\n", getprogname());
+	fprintf(stderr, "       %s project-add name desc url script\n", getprogname());
+	fprintf(stderr, "       %s project-list\n", getprogname());
+	fprintf(stderr, "       %s worker-add name desc\n", getprogname());
+	fprintf(stderr, "       %s worker-list\n", getprogname());
 	exit(0);
 }
 
@@ -40,6 +43,38 @@
 }
 
 static struct req
+cmd_job_list(int argc, char **argv)
+{
+	struct job_result jobs[SCI_JOB_LIST_MAX];
+	size_t jobsz = UTIL_SIZE(jobs);
+	struct req req;
+
+	if (argc < 1)
+		usage();
+
+	if ((req = req_job_list(jobs, &jobsz, argv[0])).status)
+		return req;
+
+	printf("%-16s%-16s%-16s%s\n", "ID", "TAG", "PROJECT", "WORKER");
+
+	for (size_t i = 0; i < jobsz; ++i) {
+		printf("%-16lld%-16s%-16s%s\n", (long long int)jobs[i].job.id,
+		    jobs[i].job.tag, jobs[i].job.project.name, jobs[i].worker.name);
+	}
+
+	return req;
+}
+
+static struct req
+cmd_job_save(int argc, char **argv)
+{
+	if (argc < 5)
+		usage();
+
+	return req_job_save(argv[0], argv[1], argv[2], argv[3], argv[4]);
+}
+
+static struct req
 cmd_project_add(int argc, char **argv)
 {
 	struct project pc;
@@ -71,15 +106,11 @@
 	if ((req = req_project_list(pc, &pcsz)).status)
 		return req;
 
-	for (size_t i = 0; i < pcsz; ++i) {
-		printf("%-16s%s\n", "name:", pc[i].name);
-		printf("%-16s%s\n", "description:", pc[i].desc);
-		printf("%-16s%s\n", "url:", pc[i].url);
-		printf("%-16s%s\n", "script:", pc[i].script);
+	printf("%-16s%-24s%-20s%s\n", "NAME", "DESCRIPTION", "URL", "SCRIPT");
 
-		if (i + 1 < pcsz)
-			printf("\n");
-	}
+	for (size_t i = 0; i < pcsz; ++i)
+		printf("%-16s%-24s%-20s%s\n", pc[i].name, pc[i].desc,
+		    pc[i].url, pc[i].script);
 
 	return req;
 }
@@ -112,13 +143,10 @@
 	if ((req = req_worker_list(wk, &wksz)).status)
 		return req;
 
-	for (size_t i = 0; i < wksz; ++i) {
-		printf("%-16s%s\n", "name:", wk[i].name);
-		printf("%-16s%s\n", "description:", wk[i].desc);
+	printf("%-16s%s\n", "NAME", "DESCRIPTION");
 
-		if (i + 1 < wksz)
-			printf("\n");
-	}
+	for (size_t i = 0; i < wksz; ++i)
+		printf("%-16s%s\n",  wk[i].name, wk[i].desc);
 
 	return req;
 }
@@ -128,6 +156,8 @@
 	struct req (*exec)(int, char **);
 } commands[] = {
 	{ "job-queue",          cmd_job_queue           },
+	{ "job-list",           cmd_job_list            },
+	{ "job-save",           cmd_job_save            },
 	{ "project-add",        cmd_project_add         },
 	{ "project-list",       cmd_project_list        },
 	{ "worker-add",         cmd_worker_add          },
@@ -139,7 +169,7 @@
 main(int argc, char **argv)
 {
 	const char *sock = VARDIR "/run/sci.sock";
-	int ch;
+	int ch, cmdfound = 0;
 
 	setprogname("scictl");
 
@@ -168,6 +198,7 @@
 
 		if (strcmp(commands[i].name, argv[0]) == 0) {
 			res = commands[i].exec(--argc, ++argv);
+			cmdfound = 1;
 
 			if (res.status)
 				warnx("%s", res.msg);
@@ -176,5 +207,8 @@
 		}
 	}
 
+	if (!cmdfound)
+		errx(1, "abort: command %s not found", argv[0]);
+
 	req_finish();
 }