diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scid/page-workers.c	Tue Aug 16 18:29:08 2022 +0200
@@ -0,0 +1,88 @@
+/*
+ * page-workers.c -- page /workers/<name> route
+ *
+ * Copyright (c) 2021-2022 David Demelier <markand@malikania.fr>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "db.h"
+#include "page-workers.h"
+#include "pageutil.h"
+#include "theme.h"
+#include "util.h"
+
+static void
+get_one(struct kreq *r)
+{
+	json_t *worker, *jobs;
+	char *body;
+
+	if (!(worker = db_worker_find(r->path)))
+		pageutil_status(r, KHTTP_404);
+	else {
+		/* Silently ignore jobs if it has failed. */
+		if ((jobs = db_jobresult_list_by_worker(r->path)))
+			json_object_set_new(worker, "jobs", jobs);
+
+		//printf("worker=%s\n", json_dumps(worker, JSON_INDENT(4)));
+		body = theme_render("onPageWorker", worker);
+		pageutil_render(r, KHTTP_200, KMIME_TEXT_HTML, body);
+		free(body);
+	}
+}
+
+static void
+get_all(struct kreq *r)
+{
+	json_t *workers;
+	char *body;
+
+	if (!(workers = db_worker_list()))
+		pageutil_status(r, KHTTP_500);
+	else {
+		body = theme_render("onPageWorkers", util_json_pack("{so}",
+			"workers", workers
+		));
+		pageutil_render(r, KHTTP_200, KMIME_TEXT_HTML, body);
+		free(body);
+	}
+}
+
+static void
+get(struct kreq *r)
+{
+	if (strlen(r->path) > 0)
+		get_one(r);
+	else
+		get_all(r);
+}
+
+void
+page_workers(struct kreq *r)
+{
+	(void)r;
+
+	switch (r->method) {
+	case KMETHOD_GET:
+		get(r);
+		break;
+	default:
+		pageutil_status(r, KHTTP_400);
+		break;
+	}
+}