47
|
1 /* |
|
2 * page-workers.c -- page /workers/<name> route |
|
3 * |
|
4 * Copyright (c) 2021-2022 David Demelier <markand@malikania.fr> |
|
5 * |
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
|
7 * purpose with or without fee is hereby granted, provided that the above |
|
8 * copyright notice and this permission notice appear in all copies. |
|
9 * |
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
17 */ |
|
18 |
|
19 #include <assert.h> |
|
20 #include <stdlib.h> |
|
21 #include <string.h> |
|
22 |
|
23 #include "db.h" |
|
24 #include "page-workers.h" |
|
25 #include "pageutil.h" |
|
26 #include "theme.h" |
|
27 #include "util.h" |
|
28 |
|
29 static void |
|
30 get_one(struct kreq *r) |
|
31 { |
|
32 json_t *worker, *jobs; |
|
33 char *body; |
|
34 |
|
35 if (!(worker = db_worker_find(r->path))) |
|
36 pageutil_status(r, KHTTP_404); |
|
37 else { |
|
38 /* Silently ignore jobs if it has failed. */ |
|
39 if ((jobs = db_jobresult_list_by_worker(r->path))) |
|
40 json_object_set_new(worker, "jobs", jobs); |
|
41 |
|
42 //printf("worker=%s\n", json_dumps(worker, JSON_INDENT(4))); |
|
43 body = theme_render("onPageWorker", worker); |
|
44 pageutil_render(r, KHTTP_200, KMIME_TEXT_HTML, body); |
|
45 free(body); |
|
46 } |
|
47 } |
|
48 |
|
49 static void |
|
50 get_all(struct kreq *r) |
|
51 { |
|
52 json_t *workers; |
|
53 char *body; |
|
54 |
|
55 if (!(workers = db_worker_list())) |
|
56 pageutil_status(r, KHTTP_500); |
|
57 else { |
|
58 body = theme_render("onPageWorkers", util_json_pack("{so}", |
|
59 "workers", workers |
|
60 )); |
|
61 pageutil_render(r, KHTTP_200, KMIME_TEXT_HTML, body); |
|
62 free(body); |
|
63 } |
|
64 } |
|
65 |
|
66 static void |
|
67 get(struct kreq *r) |
|
68 { |
|
69 if (strlen(r->path) > 0) |
|
70 get_one(r); |
|
71 else |
|
72 get_all(r); |
|
73 } |
|
74 |
|
75 void |
|
76 page_workers(struct kreq *r) |
|
77 { |
|
78 (void)r; |
|
79 |
|
80 switch (r->method) { |
|
81 case KMETHOD_GET: |
|
82 get(r); |
|
83 break; |
|
84 default: |
|
85 pageutil_status(r, KHTTP_400); |
|
86 break; |
|
87 } |
|
88 } |