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