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
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
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 if (argc < 2)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 cmd_project_add(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
183
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 if (argc < 4)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
67348ec46425 man: add manual pages
David Demelier <markand@malikania.fr>
parents: 12
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
248
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 static struct req
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 cmd_project_list(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 (void)argc;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 (void)argv;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 return req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 cmd_worker_add(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 {
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
278 struct worker wk = {0};
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
279
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 if (argc < 2)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
285
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 return req_worker_add(&wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
288
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 static struct req
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 cmd_worker_list(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 (void)argc;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 (void)argv;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
294
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 struct worker wk[SCI_WORKER_MAX];
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 struct req req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 size_t wksz = UTIL_SIZE(wk);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
298
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 if ((req = req_worker_list(wk, &wksz)).status)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 return req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
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 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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
310
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 return req;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
313
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 static struct {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 const char *name;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 struct req (*exec)(int, char **);
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 { "project-add", cmd_project_add },
13
67348ec46425 man: add manual pages
David Demelier <markand@malikania.fr>
parents: 12
diff changeset
322 { "project-info", cmd_project_info },
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 { "worker-add", cmd_worker_add },
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 { "worker-list", cmd_worker_list },
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 { NULL, NULL }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 };
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
329
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
330 int
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
331 main(int argc, char **argv)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 {
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
333 int ch, cmdfound = 0;
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
334
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 setprogname("scictl");
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
336
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
337 while ((ch = getopt(argc, argv, "s:")) != -1) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 switch (ch) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 break;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 default:
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 break;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 }
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 argc -= optind;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 argv += optind;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
349
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 if (argc <= 0)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 usage();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 if (strcmp(argv[0], "help") == 0)
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 help();
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
354
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 for (size_t i = 0; commands[i].name; ++i) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 struct req res;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
357
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
358 if (strcmp(commands[i].name, argv[0]) == 0) {
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
361
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
364
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
365 req_finish(&res);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
366 break;
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
368 }
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
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
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
372 }