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