annotate scictl.c @ 18:600204c31bf0

misc: refactor
author David Demelier <markand@malikania.fr>
date Tue, 12 Jul 2022 20:20:51 +0200
parents 3051ef92173a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <err.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <stdio.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <stdlib.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <string.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <stdnoreturn.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <unistd.h>
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include "config.h"
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include "util.h"
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 noreturn static void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 usage(void)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 fprintf(stderr, "usage: %s [-s sock] command [args...]\n", getprogname());
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 exit(1);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 noreturn static void
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 help(void)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
67348ec46425 man: add manual pages
David Demelier <markand@malikania.fr>
parents: 12
diff changeset
45 fprintf(stderr, " %s project-info name\n", getprogname());
67348ec46425 man: add manual pages
David Demelier <markand@malikania.fr>
parents: 12
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 exit(0);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
84 static size_t
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
85 extract(char *s, size_t w, size_t n, void *data)
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
86 {
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
87 return fwrite(s, w, n, data);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
88 }
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
89
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
90 static json_t *
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
91 parse(const char *data)
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
92 {
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
93 json_t *doc;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
94 json_error_t err;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
95
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
96 if (!(json_loads(doc, 0, &err)))
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
97 die("abort: unable to parse JSON: %s\n", err.text);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
98
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
99 return doc;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
100 }
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
101
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
102 static json_t *
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
103 get(const char *url)
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
104 {
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
105 CURL *curl;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
106 CURLcode code;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
107 FILE *fp;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
108 char buf[HTTP_BUF_MAX];
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
109 long ret;
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
110
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
111 if (!(fp = fmemopen(buf, sizeof (buf), "w")))
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
112 die("abort: %s", strerror(errno));
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
113
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
114 curl = curl_easy_init();
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
115 curl_easy_setopt(curl, CURLOPT_URL, url);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
116 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, extract);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
117 curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
118 curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3L);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
119 code = curl_easy_perform(curl);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
120
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
121 if (code != CURLE_OK)
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
122 die("abort: %s", curl_easy_strerror(code));
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
123
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
124 curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &ret);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
125
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
126 if (ret != 200)
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
127 die("abort: HTTP %ld\n", ret);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
128
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
129 curl_easy_cleanup(curl);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
130 fclose(fp);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
131
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
132 return parse(buf);
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
133 }
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
134
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 static struct req
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
136 cmd_job_add(int argc, char **argv)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 {
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
138 struct job job = {0};
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
139 struct project project = {0};
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
140
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 if (argc < 2)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
143
18
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
144 project.name = argv[0];
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
145
600204c31bf0 misc: refactor
David Demelier <markand@malikania.fr>
parents: 16
diff changeset
146 if (_project_find(&project, argv[0])).status)
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
147 return rp;
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
148
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
149 job.project_id = project.id;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
150 job.tag = argv[1];
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
151
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
152 rj = req_job_add(&job);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
153 req_finish(&rp);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
154
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
155 return rj;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
157
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 static struct req
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
159 cmd_job_todo(int argc, char **argv)
1
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 struct project projects[SCI_PROJECT_MAX] = {0};
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
162 struct job jobs[SCI_JOB_LIST_MAX] = {0};
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
163 struct req rp, rj;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
164 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
165
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
166 if (argc < 1)
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
167 usage();
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
168
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
169 /* First retrieve projects for a better listing. */
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
170 if ((rp = req_project_list(projects, &projectsz)).status)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
171 return rp;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
172
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
173 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
174 req_finish(&rp);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
175 return rj;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
176 }
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
177
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
178 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
179 const char *project = "unknown";
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
180
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
181 /* Find project if exists (it should). */
12
be3ec0e6bb8f scid: remove status from jobresult
David Demelier <markand@malikania.fr>
parents: 9
diff changeset
182 for (size_t p = 0; p < projectsz; ++p) {
be3ec0e6bb8f scid: remove status from jobresult
David Demelier <markand@malikania.fr>
parents: 9
diff changeset
183 if (projects[p].id == jobs[i].project_id) {
be3ec0e6bb8f scid: remove status from jobresult
David Demelier <markand@malikania.fr>
parents: 9
diff changeset
184 project = projects[p].name;
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
185 break;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
186 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
187 }
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
188
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
189 printf("%-16s%d\n", "id:", jobs[i].id);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
190 printf("%-16s%s\n", "tag:", jobs[i].tag);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
191 printf("%-16s%s\n", "project:", project);
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 if (i + 1 < jobsz)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
194 printf("\n");
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
195 }
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
196
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
197 req_finish(&rp);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
198
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
199 return rj;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
200 }
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
201
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
202 static struct req
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
203 cmd_jobresult_add(int argc, char **argv)
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
204 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
205 struct jobresult res = {0};
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
206 struct worker wk = {0};
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
207 struct req rw, rj;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
208 char *log;
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
209
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
210 if (argc < 5)
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
211 usage();
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
212
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
213 /* Find worker id. */
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
214 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
215 return rw;
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
216
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
217 res.job_id = strtoll(argv[0], NULL, 10);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
218 res.exitcode = strtoll(argv[2], NULL, 10);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
219 res.worker_id = wk.id;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
220 res.log = log = readfile(argv[3]);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
221 rj = req_jobresult_add(&res);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
222
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
223 free(log);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
224 req_finish(&rw);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
225
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
226 return rj;
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
227 }
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
228
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
229 static struct req
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 cmd_project_add(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
232 struct project pc = {0};
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
233 struct req res;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
234 char *script;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
235
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 if (argc < 4)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
238
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
239 pc.name = argv[0];
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
240 pc.desc = argv[1];
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
241 pc.url = argv[2];
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
242 pc.script = script = readfile(argv[3]);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
243 res = req_project_add(&pc);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
244
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
245 free(script);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
246
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
247 return res;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
248 }
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
249
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
250 static struct req
9
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
251 cmd_project_update(int argc, char **argv)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
252 {
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
253 struct project pc;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
254 struct req rget, rsend;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
255 char *script = NULL;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
256
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
257 if (argc < 3)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
258 help();
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
259
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
260 if ((rget = req_project_find(&pc, argv[0])).status)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
261 return rget;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
262
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
263 if (strcmp(argv[1], "name") == 0)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
264 pc.name = argv[2];
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
265 else if (strcmp(argv[1], "desc") == 0)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
266 pc.desc = argv[2];
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
267 else if (strcmp(argv[1], "url") == 0)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
268 pc.url = argv[2];
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
269 else if (strcmp(argv[1], "script") == 0)
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
270 pc.script = script = readfile(argv[2]);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
271
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
272 rsend = req_project_update(&pc);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
273
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
274 req_finish(&rget);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
275 free(script);
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
276
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
277 return rsend;
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
278 }
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
279
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
280 static struct req
13
67348ec46425 man: add manual pages
David Demelier <markand@malikania.fr>
parents: 12
diff changeset
281 cmd_project_info(int argc, char **argv)
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
282 {
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
283 struct project project = {0};
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
284 struct req req;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
285
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
286 if (argc < 1)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
287 usage();
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
288 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
289 return req;
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
290
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
291 printf("%-16s%d\n", "id:", project.id);
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
292 printf("%-16s%s\n", "name:", project.name);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
293 printf("%-16s%s\n", "desc:", project.desc);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
294 printf("%-16s%s\n", "url:", project.url);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
295 printf("\n");
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
296 printf("%s", project.script);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
297
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
298 return req;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
300
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 static struct req
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 cmd_project_list(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 (void)argc;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 (void)argv;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
306
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
307 struct project projects[SCI_PROJECT_MAX] = {0};
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 struct req req;
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
309 size_t projectsz = UTIL_SIZE(projects);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
310
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
311 if ((req = req_project_list(projects, &projectsz)).status)
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 return req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
313
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
314 for (size_t i = 0; i < projectsz; ++i) {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
315 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
316 printf("%-16s%s\n", "name:", projects[i].name);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
317 printf("%-16s%s\n", "desc:", projects[i].desc);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
318 printf("%-16s%s\n", "url:", projects[i].url);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
319
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
320 if (i + 1 < projectsz)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
321 printf("\n");
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
322 }
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
323
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
324 return req;
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
325 }
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
326
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents: 1
diff changeset
327 static struct req
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 cmd_worker_add(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
330 struct worker wk = {0};
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
331
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 if (argc < 2)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
333 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
334
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
335 wk.name = argv[0];
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
336 wk.desc = argv[1];
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
337
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 return req_worker_add(&wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
340
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 static struct req
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 cmd_worker_list(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 (void)argc;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 (void)argv;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
346
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 struct worker wk[SCI_WORKER_MAX];
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 struct req req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 size_t wksz = UTIL_SIZE(wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
350
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 if ((req = req_worker_list(wk, &wksz)).status)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 return req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
353
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
354 for (size_t i = 0; i < wksz; ++i) {
4
9c4fea43803c scid: some refactoring in db
David Demelier <markand@malikania.fr>
parents: 3
diff changeset
355 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
356 printf("%-16s%s\n", "name:", wk[i].name);
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
357 printf("%-16s%s\n", "desc:", wk[i].desc);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
358
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
359 if (i + 1 < wksz)
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
360 printf("\n");
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
361 }
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
362
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
363 return req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
364 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
365
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
366 static struct {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 const char *name;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
368 struct req (*exec)(int, char **);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
369 } commands[] = {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
370 { "job-add", cmd_job_add },
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
371 { "job-todo", cmd_job_todo },
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
372 { "jobresult-add", cmd_jobresult_add },
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 { "project-add", cmd_project_add },
13
67348ec46425 man: add manual pages
David Demelier <markand@malikania.fr>
parents: 12
diff changeset
374 { "project-info", cmd_project_info },
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
375 { "project-list", cmd_project_list },
9
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
376 { "project-update", cmd_project_update },
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
377 { "worker-add", cmd_worker_add },
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
378 { "worker-list", cmd_worker_list },
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
379 { NULL, NULL }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
380 };
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
381
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
382 int
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 main(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
384 {
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
385 int ch, cmdfound = 0;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
386
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
387 setprogname("scictl");
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
388
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
389 while ((ch = getopt(argc, argv, "s:")) != -1) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 switch (ch) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 case 's':
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
392 req_set_path(optarg);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
393 break;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
394 default:
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
395 break;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
396 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
397 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
398
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
399 argc -= optind;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
400 argv += optind;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
401
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
402 if (argc <= 0)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
403 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
404 if (strcmp(argv[0], "help") == 0)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
405 help();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
406
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
407 for (size_t i = 0; commands[i].name; ++i) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
408 struct req res;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
409
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 if (strcmp(commands[i].name, argv[0]) == 0) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
411 res = commands[i].exec(--argc, ++argv);
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
412 cmdfound = 1;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
413
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 if (res.status)
9
3ef8128e244f sci: add project-update command
David Demelier <markand@malikania.fr>
parents: 4
diff changeset
415 warnx("%s", json_string_value(json_object_get(res.msg, "error")));
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
416
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
417 req_finish(&res);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
418 break;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
419 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
420 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
421
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
422 if (!cmdfound)
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
423 errx(1, "abort: command %s not found", argv[0]);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
424 }