Mercurial > sci
comparison scictl.c @ 2:5fa3d2f479b2
sci: initial upload support
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 10 Jun 2021 10:39:21 +0200 |
parents | 5afdb14df924 |
children | 215c0c3b3609 |
comparison
equal
deleted
inserted
replaced
1:5afdb14df924 | 2:5fa3d2f479b2 |
---|---|
22 | 22 |
23 noreturn static void | 23 noreturn static void |
24 help(void) | 24 help(void) |
25 { | 25 { |
26 fprintf(stderr, "usage: %s job-queue project tag\n", getprogname()); | 26 fprintf(stderr, "usage: %s job-queue project tag\n", getprogname()); |
27 fprintf(stderr, " %s job-list project\n", getprogname()); | 27 fprintf(stderr, " %s job-list worker\n", getprogname()); |
28 fprintf(stderr, " %s job-save id worker status retcode console\n", getprogname()); | 28 fprintf(stderr, " %s job-save id worker status retcode console\n", getprogname()); |
29 fprintf(stderr, " %s project-add name desc url script\n", getprogname()); | 29 fprintf(stderr, " %s project-add name desc url script\n", getprogname()); |
30 fprintf(stderr, " %s project-list\n", getprogname()); | 30 fprintf(stderr, " %s project-list\n", getprogname()); |
31 fprintf(stderr, " %s script-get project\n", getprogname()); | |
31 fprintf(stderr, " %s worker-add name desc\n", getprogname()); | 32 fprintf(stderr, " %s worker-add name desc\n", getprogname()); |
32 fprintf(stderr, " %s worker-list\n", getprogname()); | 33 fprintf(stderr, " %s worker-list\n", getprogname()); |
33 exit(0); | 34 exit(0); |
34 } | 35 } |
35 | 36 |
37 static char * | |
38 readfile(const char *path) | |
39 { | |
40 FILE *fp, *str; | |
41 static char console[SCI_MSG_MAX]; | |
42 char buf[BUFSIZ], *ret = console; | |
43 size_t nr; | |
44 | |
45 if (strcmp(path, "-") == 0) | |
46 fp = stdin; | |
47 else if (!(fp = fopen(path, "r"))) | |
48 err(1, "%s", path); | |
49 | |
50 if (!(str = fmemopen(console, sizeof (console), "w"))) | |
51 err(1, "fmemopen"); | |
52 | |
53 while ((nr = fread(buf, 1, sizeof (buf), fp)) > 0) | |
54 fwrite(buf, 1, nr, str); | |
55 | |
56 if ((ferror(fp) && !feof(fp)) || (ferror(str) && !feof(str))) | |
57 ret = NULL; | |
58 | |
59 fclose(str); | |
60 fclose(fp); | |
61 | |
62 return ret; | |
63 } | |
64 | |
36 static struct req | 65 static struct req |
37 cmd_job_queue(int argc, char **argv) | 66 cmd_job_queue(int argc, char **argv) |
38 { | 67 { |
68 struct job job = {0}; | |
69 | |
39 if (argc < 2) | 70 if (argc < 2) |
40 usage(); | 71 usage(); |
41 | 72 |
42 return req_job_queue(argv[0], argv[1]); | 73 strlcpy(job.project.name, argv[0], sizeof (job.project.name)); |
74 strlcpy(job.tag, argv[1], sizeof (job.tag)); | |
75 | |
76 return req_job_queue(&job); | |
43 } | 77 } |
44 | 78 |
45 static struct req | 79 static struct req |
46 cmd_job_list(int argc, char **argv) | 80 cmd_job_list(int argc, char **argv) |
47 { | 81 { |
53 usage(); | 87 usage(); |
54 | 88 |
55 if ((req = req_job_list(jobs, &jobsz, argv[0])).status) | 89 if ((req = req_job_list(jobs, &jobsz, argv[0])).status) |
56 return req; | 90 return req; |
57 | 91 |
58 printf("%-16s%-16s%-16s%s\n", "ID", "TAG", "PROJECT", "WORKER"); | 92 printf("%-16s%-16s%s\n", "ID", "TAG", "PROJECT"); |
59 | 93 |
60 for (size_t i = 0; i < jobsz; ++i) { | 94 for (size_t i = 0; i < jobsz; ++i) { |
61 printf("%-16lld%-16s%-16s%s\n", (long long int)jobs[i].job.id, | 95 printf("%-16lld%-16s%s\n", (long long int)jobs[i].job.id, |
62 jobs[i].job.tag, jobs[i].job.project.name, jobs[i].worker.name); | 96 jobs[i].job.tag, jobs[i].job.project.name); |
63 } | 97 } |
64 | 98 |
65 return req; | 99 return req; |
66 } | 100 } |
67 | 101 |
68 static struct req | 102 static struct req |
69 cmd_job_save(int argc, char **argv) | 103 cmd_job_save(int argc, char **argv) |
70 { | 104 { |
105 struct job_result res = {0}; | |
106 | |
71 if (argc < 5) | 107 if (argc < 5) |
72 usage(); | 108 usage(); |
73 | 109 |
74 return req_job_save(argv[0], argv[1], argv[2], argv[3], argv[4]); | 110 res.job.id = strtoll(argv[0], NULL, 10); |
111 res.status = strtoll(argv[2], NULL, 10); | |
112 res.retcode = strtoll(argv[3], NULL, 10); | |
113 res.console = readfile(argv[4]); | |
114 strlcpy(res.worker.name, argv[1], sizeof (res.worker.name)); | |
115 | |
116 return req_job_save(&res); | |
75 } | 117 } |
76 | 118 |
77 static struct req | 119 static struct req |
78 cmd_project_add(int argc, char **argv) | 120 cmd_project_add(int argc, char **argv) |
79 { | 121 { |
109 printf("%-16s%-24s%-20s%s\n", "NAME", "DESCRIPTION", "URL", "SCRIPT"); | 151 printf("%-16s%-24s%-20s%s\n", "NAME", "DESCRIPTION", "URL", "SCRIPT"); |
110 | 152 |
111 for (size_t i = 0; i < pcsz; ++i) | 153 for (size_t i = 0; i < pcsz; ++i) |
112 printf("%-16s%-24s%-20s%s\n", pc[i].name, pc[i].desc, | 154 printf("%-16s%-24s%-20s%s\n", pc[i].name, pc[i].desc, |
113 pc[i].url, pc[i].script); | 155 pc[i].url, pc[i].script); |
156 | |
157 return req; | |
158 } | |
159 | |
160 static struct req | |
161 cmd_script_get(int argc, char **argv) | |
162 { | |
163 char script[SCI_MSG_MAX]; | |
164 struct req req; | |
165 | |
166 if (argc < 1) | |
167 usage(); | |
168 if ((req = req_script_get(argv[0], script, sizeof (script))).status) | |
169 return req; | |
170 | |
171 printf("%s", script); | |
172 | |
173 /* | |
174 * Don't break up the terminal output if the script does not contain a | |
175 * final new line. | |
176 */ | |
177 if (script[strlen(script) - 1] != '\n') | |
178 printf("\n"); | |
114 | 179 |
115 return req; | 180 return req; |
116 } | 181 } |
117 | 182 |
118 static struct req | 183 static struct req |
158 { "job-queue", cmd_job_queue }, | 223 { "job-queue", cmd_job_queue }, |
159 { "job-list", cmd_job_list }, | 224 { "job-list", cmd_job_list }, |
160 { "job-save", cmd_job_save }, | 225 { "job-save", cmd_job_save }, |
161 { "project-add", cmd_project_add }, | 226 { "project-add", cmd_project_add }, |
162 { "project-list", cmd_project_list }, | 227 { "project-list", cmd_project_list }, |
228 { "script-get", cmd_script_get }, | |
163 { "worker-add", cmd_worker_add }, | 229 { "worker-add", cmd_worker_add }, |
164 { "worker-list", cmd_worker_list }, | 230 { "worker-list", cmd_worker_list }, |
165 { NULL, NULL } | 231 { NULL, NULL } |
166 }; | 232 }; |
167 | 233 |