comparison scid/page-workers.c @ 47:e8f24896b484

scid: add /workers page
author David Demelier <markand@malikania.fr>
date Tue, 16 Aug 2022 18:29:08 +0200
parents
children 3cf148705724
comparison
equal deleted inserted replaced
46:16f1c72d1635 47:e8f24896b484
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 }