Mercurial > sci
comparison 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 |
comparison
equal
deleted
inserted
replaced
0:f1de39079243 | 1:5afdb14df924 |
---|---|
6 #include <stdnoreturn.h> | 6 #include <stdnoreturn.h> |
7 #include <unistd.h> | 7 #include <unistd.h> |
8 | 8 |
9 #include "config.h" | 9 #include "config.h" |
10 #include "project.h" | 10 #include "project.h" |
11 #include "job.h" | |
11 #include "req.h" | 12 #include "req.h" |
12 #include "util.h" | 13 #include "util.h" |
13 #include "worker.h" | 14 #include "worker.h" |
14 | 15 |
15 noreturn static void | 16 noreturn static void |
20 } | 21 } |
21 | 22 |
22 noreturn static void | 23 noreturn static void |
23 help(void) | 24 help(void) |
24 { | 25 { |
25 fprintf(stderr, "usage: job-queue project tag\n"); | 26 fprintf(stderr, "usage: %s job-queue project tag\n", getprogname()); |
26 fprintf(stderr, " project-add name desc url script\n"); | 27 fprintf(stderr, " %s job-list project\n", getprogname()); |
27 fprintf(stderr, " project-list\n"); | 28 fprintf(stderr, " %s job-save id worker status retcode console\n", getprogname()); |
28 fprintf(stderr, " worker-add name desc\n"); | 29 fprintf(stderr, " %s project-add name desc url script\n", getprogname()); |
29 fprintf(stderr, " worker-list\n"); | 30 fprintf(stderr, " %s project-list\n", getprogname()); |
31 fprintf(stderr, " %s worker-add name desc\n", getprogname()); | |
32 fprintf(stderr, " %s worker-list\n", getprogname()); | |
30 exit(0); | 33 exit(0); |
31 } | 34 } |
32 | 35 |
33 static struct req | 36 static struct req |
34 cmd_job_queue(int argc, char **argv) | 37 cmd_job_queue(int argc, char **argv) |
35 { | 38 { |
36 if (argc < 2) | 39 if (argc < 2) |
37 usage(); | 40 usage(); |
38 | 41 |
39 return req_job_queue(argv[0], argv[1]); | 42 return req_job_queue(argv[0], argv[1]); |
43 } | |
44 | |
45 static struct req | |
46 cmd_job_list(int argc, char **argv) | |
47 { | |
48 struct job_result jobs[SCI_JOB_LIST_MAX]; | |
49 size_t jobsz = UTIL_SIZE(jobs); | |
50 struct req req; | |
51 | |
52 if (argc < 1) | |
53 usage(); | |
54 | |
55 if ((req = req_job_list(jobs, &jobsz, argv[0])).status) | |
56 return req; | |
57 | |
58 printf("%-16s%-16s%-16s%s\n", "ID", "TAG", "PROJECT", "WORKER"); | |
59 | |
60 for (size_t i = 0; i < jobsz; ++i) { | |
61 printf("%-16lld%-16s%-16s%s\n", (long long int)jobs[i].job.id, | |
62 jobs[i].job.tag, jobs[i].job.project.name, jobs[i].worker.name); | |
63 } | |
64 | |
65 return req; | |
66 } | |
67 | |
68 static struct req | |
69 cmd_job_save(int argc, char **argv) | |
70 { | |
71 if (argc < 5) | |
72 usage(); | |
73 | |
74 return req_job_save(argv[0], argv[1], argv[2], argv[3], argv[4]); | |
40 } | 75 } |
41 | 76 |
42 static struct req | 77 static struct req |
43 cmd_project_add(int argc, char **argv) | 78 cmd_project_add(int argc, char **argv) |
44 { | 79 { |
69 memset(pc, 0, sizeof (pc)); | 104 memset(pc, 0, sizeof (pc)); |
70 | 105 |
71 if ((req = req_project_list(pc, &pcsz)).status) | 106 if ((req = req_project_list(pc, &pcsz)).status) |
72 return req; | 107 return req; |
73 | 108 |
74 for (size_t i = 0; i < pcsz; ++i) { | 109 printf("%-16s%-24s%-20s%s\n", "NAME", "DESCRIPTION", "URL", "SCRIPT"); |
75 printf("%-16s%s\n", "name:", pc[i].name); | 110 |
76 printf("%-16s%s\n", "description:", pc[i].desc); | 111 for (size_t i = 0; i < pcsz; ++i) |
77 printf("%-16s%s\n", "url:", pc[i].url); | 112 printf("%-16s%-24s%-20s%s\n", pc[i].name, pc[i].desc, |
78 printf("%-16s%s\n", "script:", pc[i].script); | 113 pc[i].url, pc[i].script); |
79 | |
80 if (i + 1 < pcsz) | |
81 printf("\n"); | |
82 } | |
83 | 114 |
84 return req; | 115 return req; |
85 } | 116 } |
86 | 117 |
87 static struct req | 118 static struct req |
110 size_t wksz = UTIL_SIZE(wk); | 141 size_t wksz = UTIL_SIZE(wk); |
111 | 142 |
112 if ((req = req_worker_list(wk, &wksz)).status) | 143 if ((req = req_worker_list(wk, &wksz)).status) |
113 return req; | 144 return req; |
114 | 145 |
115 for (size_t i = 0; i < wksz; ++i) { | 146 printf("%-16s%s\n", "NAME", "DESCRIPTION"); |
116 printf("%-16s%s\n", "name:", wk[i].name); | 147 |
117 printf("%-16s%s\n", "description:", wk[i].desc); | 148 for (size_t i = 0; i < wksz; ++i) |
118 | 149 printf("%-16s%s\n", wk[i].name, wk[i].desc); |
119 if (i + 1 < wksz) | |
120 printf("\n"); | |
121 } | |
122 | 150 |
123 return req; | 151 return req; |
124 } | 152 } |
125 | 153 |
126 static struct { | 154 static struct { |
127 const char *name; | 155 const char *name; |
128 struct req (*exec)(int, char **); | 156 struct req (*exec)(int, char **); |
129 } commands[] = { | 157 } commands[] = { |
130 { "job-queue", cmd_job_queue }, | 158 { "job-queue", cmd_job_queue }, |
159 { "job-list", cmd_job_list }, | |
160 { "job-save", cmd_job_save }, | |
131 { "project-add", cmd_project_add }, | 161 { "project-add", cmd_project_add }, |
132 { "project-list", cmd_project_list }, | 162 { "project-list", cmd_project_list }, |
133 { "worker-add", cmd_worker_add }, | 163 { "worker-add", cmd_worker_add }, |
134 { "worker-list", cmd_worker_list }, | 164 { "worker-list", cmd_worker_list }, |
135 { NULL, NULL } | 165 { NULL, NULL } |
137 | 167 |
138 int | 168 int |
139 main(int argc, char **argv) | 169 main(int argc, char **argv) |
140 { | 170 { |
141 const char *sock = VARDIR "/run/sci.sock"; | 171 const char *sock = VARDIR "/run/sci.sock"; |
142 int ch; | 172 int ch, cmdfound = 0; |
143 | 173 |
144 setprogname("scictl"); | 174 setprogname("scictl"); |
145 | 175 |
146 while ((ch = getopt(argc, argv, "s:")) != -1) { | 176 while ((ch = getopt(argc, argv, "s:")) != -1) { |
147 switch (ch) { | 177 switch (ch) { |
166 for (size_t i = 0; commands[i].name; ++i) { | 196 for (size_t i = 0; commands[i].name; ++i) { |
167 struct req res; | 197 struct req res; |
168 | 198 |
169 if (strcmp(commands[i].name, argv[0]) == 0) { | 199 if (strcmp(commands[i].name, argv[0]) == 0) { |
170 res = commands[i].exec(--argc, ++argv); | 200 res = commands[i].exec(--argc, ++argv); |
201 cmdfound = 1; | |
171 | 202 |
172 if (res.status) | 203 if (res.status) |
173 warnx("%s", res.msg); | 204 warnx("%s", res.msg); |
174 | 205 |
175 break; | 206 break; |
176 } | 207 } |
177 } | 208 } |
178 | 209 |
210 if (!cmdfound) | |
211 errx(1, "abort: command %s not found", argv[0]); | |
212 | |
179 req_finish(); | 213 req_finish(); |
180 } | 214 } |