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 }