Mercurial > sci
annotate libsci/apic.h @ 85:cf49ab595e2e default tip @
sciworkerd: avoid spawning several tasks
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 09 Mar 2023 10:43:48 +0100 |
parents | 71cd8447e3a4 |
children |
rev | line source |
---|---|
33
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
1 /* |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
2 * apic.h -- synchronous HTTP request |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
3 * |
80
71cd8447e3a4
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
50
diff
changeset
|
4 * Copyright (c) 2021-2023 David Demelier <markand@malikania.fr> |
33
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
5 * |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
9 * |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
17 */ |
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
18 |
19 | 19 #ifndef SCI_APIC_H |
20 #define SCI_APIC_H | |
21 | |
34 | 22 /** |
23 * \file apic.h | |
24 * \brief Synchronous HTTP request. | |
25 * | |
26 * This module provides function to retrieve and send data to scid using HTTP | |
27 * requests. | |
28 */ | |
29 | |
19 | 30 #include <jansson.h> |
31 | |
34 | 32 /** |
33 * \brief Maximum error message. | |
34 */ | |
19 | 35 #define APIC_ERR_MAX 128 |
34 | 36 /** |
37 * \brief Maximum URL length. | |
38 */ | |
39 #define APIC_URL_MAX 512 | |
50
b474f0985e39
scictl: add API key support
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
40 /** |
b474f0985e39
scictl: add API key support
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
41 * \brief Maximum URL length. |
b474f0985e39
scictl: add API key support
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
42 */ |
b474f0985e39
scictl: add API key support
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
43 #define APIC_KEY_MAX (40 + 1) |
19 | 44 |
34 | 45 /** |
46 * \brief Request context. | |
47 * | |
48 * This structure contains the error message and the HTTP return status, | |
49 * nothing has to be free'd. | |
50 */ | |
20 | 51 struct apic { |
34 | 52 char error[APIC_ERR_MAX]; /*!< Error message (empty unless). */ |
53 long status; /*!< HTTP return code. */ | |
19 | 54 }; |
55 | |
34 | 56 /** |
57 * \brief Client configuration. | |
58 */ | |
20 | 59 extern struct apiconf { |
34 | 60 char baseurl[APIC_URL_MAX]; /*!< Base API URL for requets. */ |
50
b474f0985e39
scictl: add API key support
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
61 char key[APIC_KEY_MAX]; /*!< Maximum length for API key. */ |
33
1d0ddf9e6efd
misc: general documentation
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
62 } apiconf /*! Global variable. */; |
20 | 63 |
34 | 64 /** |
65 * Perform a GET request. | |
66 * | |
67 * The URL format will be appended to the base URL using printf(3) format | |
68 * style. | |
69 * | |
70 * \pre req != NULL | |
71 * \pre fmt != NULL | |
72 * \param req the request output | |
73 * \param fmt the format string for URL page | |
74 * \return the JSON document received from the server or NULL on failure | |
75 */ | |
27
dae2de19ca5d
misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents:
23
diff
changeset
|
76 json_t * |
34 | 77 apic_get(struct apic *req, const char *fmt, ...); |
20 | 78 |
34 | 79 /** |
80 * Perform a POST request. | |
81 * | |
82 * The URL format will be appended to the base URL using printf(3) format | |
83 * style. | |
84 * | |
85 * \pre req != NULL | |
86 * \pre fmt != NULL | |
87 * \param req the request output | |
88 * \param body the optional document body | |
89 * \param fmt the format string for URL page | |
90 * \return the JSON document received from the server or NULL on failure | |
91 */ | |
27
dae2de19ca5d
misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents:
23
diff
changeset
|
92 json_t * |
34 | 93 apic_post(struct apic *req, const json_t *body, const char *fmt, ...); |
20 | 94 |
34 | 95 /** |
96 * Add a new job. | |
97 * | |
98 * \pre req != NULL | |
99 * \pre job != NULL | |
100 * \param req the request output | |
101 * \param job the job model | |
102 * \return 0 on success or -1 on error | |
103 */ | |
20 | 104 int |
34 | 105 apic_job_add(struct apic *req, json_t *job); |
20 | 106 |
34 | 107 /** |
108 * Get a list of job to perform for this worker. | |
109 * | |
110 * \pre req != NULL | |
111 * \pre worker != NULL | |
112 * \param req the request output | |
113 * \param worker the worker name | |
114 * \return the JSON document received from the server or NULL on failure | |
115 */ | |
27
dae2de19ca5d
misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents:
23
diff
changeset
|
116 json_t * |
34 | 117 apic_job_todo(struct apic *req, const char *worker); |
19 | 118 |
34 | 119 /** |
120 * Add a new job result. | |
121 * | |
122 * \pre req != NULL | |
123 * \pre jobresult != NULL | |
124 * \param req the request output | |
125 * \param jobresult the jobresult model | |
126 * \return 0 on success or -1 on error | |
127 */ | |
20 | 128 int |
34 | 129 apic_jobresult_add(struct apic *req, json_t *jobresult); |
20 | 130 |
34 | 131 /** |
132 * Add or update a project. | |
133 * | |
134 * \pre req != NULL | |
135 * \pre project != NULL | |
136 * \param req the request output | |
137 * \param project the project model | |
138 * \return 0 on success or -1 on error | |
139 */ | |
140 int | |
141 apic_project_save(struct apic *req, json_t *project); | |
142 | |
143 /** | |
144 * Get a list of projects. | |
145 * | |
146 * \pre req != NULL | |
147 * \param req the request output | |
148 * \return the JSON document received from the server or NULL on failure | |
149 */ | |
27
dae2de19ca5d
misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents:
23
diff
changeset
|
150 json_t * |
34 | 151 apic_project_list(struct apic *req); |
20 | 152 |
34 | 153 /** |
154 * Get a project by name. | |
155 * | |
156 * \pre req != NULL | |
157 * \pre name != NULL | |
158 * \param name the project name | |
159 * \param req the request output | |
160 * \return the JSON document received from the server or NULL on failure | |
161 */ | |
27
dae2de19ca5d
misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents:
23
diff
changeset
|
162 json_t * |
34 | 163 apic_project_find(struct apic *req, const char *name); |
164 | |
165 /** | |
166 * Add or update a worker. | |
167 * | |
168 * \pre req != NULL | |
169 * \pre worker != NULL | |
170 * \param req the request output | |
171 * \param worker the worker model | |
172 * \return 0 on success or -1 on error | |
173 */ | |
174 int | |
175 apic_worker_save(struct apic *req, json_t *worker); | |
20 | 176 |
34 | 177 /** |
178 * Get a list of workers. | |
179 * | |
180 * \pre req != NULL | |
181 * \param req the request output | |
182 * \return the JSON document received from the server or NULL on failure | |
183 */ | |
27
dae2de19ca5d
misc: switch to JSON everywhere
David Demelier <markand@malikania.fr>
parents:
23
diff
changeset
|
184 json_t * |
34 | 185 apic_worker_list(struct apic *req); |
186 | |
187 /** | |
188 * Get a worker by name. | |
189 * | |
190 * \pre req != NULL | |
191 * \pre name != NULL | |
192 * \param name the worker name | |
193 * \param req the request output | |
194 * \return the JSON document received from the server or NULL on failure | |
195 */ | |
196 json_t * | |
197 apic_worker_find(struct apic *req, const char *name); | |
19 | 198 |
199 #endif /* !SCI_APIC_H */ |