annotate scictl.c @ 3:215c0c3b3609

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