Mercurial > sci
annotate scictl.c @ 13:67348ec46425
man: add manual pages
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 30 Jun 2021 11:33:54 +0200 |
parents | be3ec0e6bb8f |
children | 3051ef92173a |
rev | line source |
---|---|
0 | 1 #include <err.h> |
2 #include <stdio.h> | |
3 #include <stdlib.h> | |
4 #include <string.h> | |
5 #include <stdnoreturn.h> | |
6 #include <unistd.h> | |
7 | |
8 #include "config.h" | |
9 #include "req.h" | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
10 #include "types.h" |
0 | 11 #include "util.h" |
12 | |
13 noreturn static void | |
14 usage(void) | |
15 { | |
16 fprintf(stderr, "usage: %s [-s sock] command [args...]\n", getprogname()); | |
17 exit(1); | |
18 } | |
19 | |
20 noreturn static void | |
21 help(void) | |
22 { | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
23 fprintf(stderr, "usage: %s job-add project tag\n", getprogname()); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
24 fprintf(stderr, " %s job-todo worker\n", getprogname()); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
25 fprintf(stderr, " %s jobresult-add id worker exitcode console\n", getprogname()); |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
26 fprintf(stderr, " %s project-add name desc url script\n", getprogname()); |
13 | 27 fprintf(stderr, " %s project-info name\n", getprogname()); |
28 fprintf(stderr, " %s project-list\n", getprogname()); | |
9
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
29 fprintf(stderr, " %s project-update name key value\n", getprogname()); |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
30 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
|
31 fprintf(stderr, " %s worker-list\n", getprogname()); |
0 | 32 exit(0); |
33 } | |
34 | |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
35 static char * |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
36 readfile(const char *path) |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
37 { |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
38 FILE *fp, *str; |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
39 char buf[BUFSIZ], *console; |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
40 size_t nr; |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
41 |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
42 if (strcmp(path, "-") == 0) |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
43 fp = stdin; |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
44 else if (!(fp = fopen(path, "r"))) |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
45 err(1, "%s", path); |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
46 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
47 console = util_calloc(1, SCI_MSG_MAX); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
48 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
49 if (!(str = fmemopen(console, SCI_MSG_MAX, "w"))) |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
50 err(1, "fmemopen"); |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
51 |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
52 while ((nr = fread(buf, 1, sizeof (buf), fp)) > 0) |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
53 fwrite(buf, 1, nr, str); |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
54 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
55 if ((ferror(fp) && !feof(fp)) || (ferror(str) && !feof(str))) { |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
56 free(console); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
57 console = NULL; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
58 } |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
59 |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
60 fclose(str); |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
61 fclose(fp); |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
62 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
63 return console; |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
64 } |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
65 |
0 | 66 static struct req |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
67 cmd_job_add(int argc, char **argv) |
0 | 68 { |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
69 struct job job = {0}; |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
70 struct project project = {0}; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
71 struct req rp, rj; |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
72 |
0 | 73 if (argc < 2) |
74 usage(); | |
75 | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
76 if ((rp = req_project_find(&project, argv[0])).status) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
77 return rp; |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
78 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
79 job.project_id = project.id; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
80 job.tag = argv[1]; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
81 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
82 rj = req_job_add(&job); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
83 req_finish(&rp); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
84 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
85 return rj; |
0 | 86 } |
87 | |
88 static struct req | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
89 cmd_job_todo(int argc, char **argv) |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
90 { |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
91 struct project projects[SCI_PROJECT_MAX] = {0}; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
92 struct job jobs[SCI_JOB_LIST_MAX] = {0}; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
93 struct req rp, rj; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
94 size_t projectsz = UTIL_SIZE(projects), jobsz = UTIL_SIZE(jobs); |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
95 |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
96 if (argc < 1) |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
97 usage(); |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
98 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
99 /* First retrieve projects for a better listing. */ |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
100 if ((rp = req_project_list(projects, &projectsz)).status) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
101 return rp; |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
102 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
103 if ((rj = req_job_todo(jobs, &jobsz, argv[0])).status) { |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
104 req_finish(&rp); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
105 return rj; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
106 } |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
107 |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
108 for (size_t i = 0; i < jobsz; ++i) { |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
109 const char *project = "unknown"; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
110 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
111 /* Find project if exists (it should). */ |
12
be3ec0e6bb8f
scid: remove status from jobresult
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
112 for (size_t p = 0; p < projectsz; ++p) { |
be3ec0e6bb8f
scid: remove status from jobresult
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
113 if (projects[p].id == jobs[i].project_id) { |
be3ec0e6bb8f
scid: remove status from jobresult
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
114 project = projects[p].name; |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
115 break; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
116 } |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
117 } |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
118 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
119 printf("%-16s%d\n", "id:", jobs[i].id); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
120 printf("%-16s%s\n", "tag:", jobs[i].tag); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
121 printf("%-16s%s\n", "project:", project); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
122 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
123 if (i + 1 < jobsz) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
124 printf("\n"); |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
125 } |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
126 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
127 req_finish(&rp); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
128 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
129 return rj; |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
130 } |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
131 |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
132 static struct req |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
133 cmd_jobresult_add(int argc, char **argv) |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
134 { |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
135 struct jobresult res = {0}; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
136 struct worker wk = {0}; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
137 struct req rw, rj; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
138 char *log; |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
139 |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
140 if (argc < 5) |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
141 usage(); |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
142 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
143 /* Find worker id. */ |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
144 if ((rw = req_worker_find(&wk, argv[1])).status) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
145 return rw; |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
146 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
147 res.job_id = strtoll(argv[0], NULL, 10); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
148 res.exitcode = strtoll(argv[2], NULL, 10); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
149 res.worker_id = wk.id; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
150 res.log = log = readfile(argv[3]); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
151 rj = req_jobresult_add(&res); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
152 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
153 free(log); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
154 req_finish(&rw); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
155 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
156 return rj; |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
157 } |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
158 |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
159 static struct req |
0 | 160 cmd_project_add(int argc, char **argv) |
161 { | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
162 struct project pc = {0}; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
163 struct req res; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
164 char *script; |
0 | 165 |
166 if (argc < 4) | |
167 usage(); | |
168 | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
169 pc.name = argv[0]; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
170 pc.desc = argv[1]; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
171 pc.url = argv[2]; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
172 pc.script = script = readfile(argv[3]); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
173 res = req_project_add(&pc); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
174 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
175 free(script); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
176 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
177 return res; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
178 } |
0 | 179 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
180 static struct req |
9
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
181 cmd_project_update(int argc, char **argv) |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
182 { |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
183 struct project pc; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
184 struct req rget, rsend; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
185 char *script = NULL; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
186 |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
187 if (argc < 3) |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
188 help(); |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
189 |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
190 if ((rget = req_project_find(&pc, argv[0])).status) |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
191 return rget; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
192 |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
193 if (strcmp(argv[1], "name") == 0) |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
194 pc.name = argv[2]; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
195 else if (strcmp(argv[1], "desc") == 0) |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
196 pc.desc = argv[2]; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
197 else if (strcmp(argv[1], "url") == 0) |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
198 pc.url = argv[2]; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
199 else if (strcmp(argv[1], "script") == 0) |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
200 pc.script = script = readfile(argv[2]); |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
201 |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
202 rsend = req_project_update(&pc); |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
203 |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
204 req_finish(&rget); |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
205 free(script); |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
206 |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
207 return rsend; |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
208 } |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
209 |
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
210 static struct req |
13 | 211 cmd_project_info(int argc, char **argv) |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
212 { |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
213 struct project project = {0}; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
214 struct req req; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
215 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
216 if (argc < 1) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
217 usage(); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
218 if ((req = req_project_find(&project, argv[0])).status) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
219 return req; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
220 |
4
9c4fea43803c
scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
221 printf("%-16s%d\n", "id:", project.id); |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
222 printf("%-16s%s\n", "name:", project.name); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
223 printf("%-16s%s\n", "desc:", project.desc); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
224 printf("%-16s%s\n", "url:", project.url); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
225 printf("\n"); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
226 printf("%s", project.script); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
227 |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
228 return req; |
0 | 229 } |
230 | |
231 static struct req | |
232 cmd_project_list(int argc, char **argv) | |
233 { | |
234 (void)argc; | |
235 (void)argv; | |
236 | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
237 struct project projects[SCI_PROJECT_MAX] = {0}; |
0 | 238 struct req req; |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
239 size_t projectsz = UTIL_SIZE(projects); |
0 | 240 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
241 if ((req = req_project_list(projects, &projectsz)).status) |
0 | 242 return req; |
243 | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
244 for (size_t i = 0; i < projectsz; ++i) { |
4
9c4fea43803c
scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
245 printf("%-16s%d\n", "id:", projects[i].id); |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
246 printf("%-16s%s\n", "name:", projects[i].name); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
247 printf("%-16s%s\n", "desc:", projects[i].desc); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
248 printf("%-16s%s\n", "url:", projects[i].url); |
0 | 249 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
250 if (i + 1 < projectsz) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
251 printf("\n"); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
252 } |
2
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
253 |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
254 return req; |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
255 } |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
256 |
5fa3d2f479b2
sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
257 static struct req |
0 | 258 cmd_worker_add(int argc, char **argv) |
259 { | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
260 struct worker wk = {0}; |
0 | 261 |
262 if (argc < 2) | |
263 usage(); | |
264 | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
265 wk.name = argv[0]; |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
266 wk.desc = argv[1]; |
0 | 267 |
268 return req_worker_add(&wk); | |
269 } | |
270 | |
271 static struct req | |
272 cmd_worker_list(int argc, char **argv) | |
273 { | |
274 (void)argc; | |
275 (void)argv; | |
276 | |
277 struct worker wk[SCI_WORKER_MAX]; | |
278 struct req req; | |
279 size_t wksz = UTIL_SIZE(wk); | |
280 | |
281 if ((req = req_worker_list(wk, &wksz)).status) | |
282 return req; | |
283 | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
284 for (size_t i = 0; i < wksz; ++i) { |
4
9c4fea43803c
scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
285 printf("%-16s%d\n", "id:", wk[i].id); |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
286 printf("%-16s%s\n", "name:", wk[i].name); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
287 printf("%-16s%s\n", "desc:", wk[i].desc); |
0 | 288 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
289 if (i + 1 < wksz) |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
290 printf("\n"); |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
291 } |
0 | 292 |
293 return req; | |
294 } | |
295 | |
296 static struct { | |
297 const char *name; | |
298 struct req (*exec)(int, char **); | |
299 } commands[] = { | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
300 { "job-add", cmd_job_add }, |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
301 { "job-todo", cmd_job_todo }, |
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
302 { "jobresult-add", cmd_jobresult_add }, |
0 | 303 { "project-add", cmd_project_add }, |
13 | 304 { "project-info", cmd_project_info }, |
0 | 305 { "project-list", cmd_project_list }, |
9
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
306 { "project-update", cmd_project_update }, |
0 | 307 { "worker-add", cmd_worker_add }, |
308 { "worker-list", cmd_worker_list }, | |
309 { NULL, NULL } | |
310 }; | |
311 | |
312 int | |
313 main(int argc, char **argv) | |
314 { | |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
315 int ch, cmdfound = 0; |
0 | 316 |
317 setprogname("scictl"); | |
318 | |
319 while ((ch = getopt(argc, argv, "s:")) != -1) { | |
320 switch (ch) { | |
321 case 's': | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
322 req_set_path(optarg); |
0 | 323 break; |
324 default: | |
325 break; | |
326 } | |
327 } | |
328 | |
329 argc -= optind; | |
330 argv += optind; | |
331 | |
332 if (argc <= 0) | |
333 usage(); | |
334 if (strcmp(argv[0], "help") == 0) | |
335 help(); | |
336 | |
337 for (size_t i = 0; commands[i].name; ++i) { | |
338 struct req res; | |
339 | |
340 if (strcmp(commands[i].name, argv[0]) == 0) { | |
341 res = commands[i].exec(--argc, ++argv); | |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
342 cmdfound = 1; |
0 | 343 |
344 if (res.status) | |
9
3ef8128e244f
sci: add project-update command
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
345 warnx("%s", json_string_value(json_object_get(res.msg, "error"))); |
0 | 346 |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
347 req_finish(&res); |
0 | 348 break; |
349 } | |
350 } | |
351 | |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
352 if (!cmdfound) |
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
353 errx(1, "abort: command %s not found", argv[0]); |
0 | 354 } |