Mercurial > sci
diff sciworkerd/sciworkerd.c @ 20:f98ea578b1ef
misc: revamp database
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 19 Jul 2022 21:52:42 +0200 |
parents | de4bf839b565 |
children | 2cb228f23f53 |
line wrap: on
line diff
--- a/sciworkerd/sciworkerd.c Fri Jul 15 11:11:48 2022 +0200 +++ b/sciworkerd/sciworkerd.c Tue Jul 19 21:52:42 2022 +0200 @@ -78,24 +78,18 @@ } static void -merge(json_t *doc) +merge(const struct job *jobs, size_t jobsz) { - struct job jobs[SCI_JOB_LIST_MAX]; - ssize_t jobsz; size_t total = 0; - if ((jobsz = job_from(jobs, UTIL_SIZE(jobs), doc)) < 0) - log_warn(TAG "error while parsing jobs: %s", strerror(errno)); - else { - for (ssize_t i = 0; i < jobsz; ++i) { - if (!pending(jobs[i].id)) { - queue(&jobs[i]); - total++; - } + for (ssize_t i = 0; i < jobsz; ++i) { + if (!pending(jobs[i].id)) { + queue(&jobs[i]); + total++; } + } - log_info(TAG "added %zu new pending tasks", total); - } + log_info(TAG "added %zu new pending tasks", total); } /* @@ -106,7 +100,9 @@ { static time_t startup; time_t now; - struct apicreq req; + struct apic req; + struct job todo[SCI_JOB_LIST_MAX]; + ssize_t todosz; if (!startup) startup = time(NULL); @@ -114,12 +110,12 @@ if (difftime((now = time(NULL)), startup) >= sciworkerd.fetchinterval) { startup = now; - if (apic_get(&req, "%s/api/v1/%s", sciworkerd.url, sciworkerd.name) < 0) + if ((todosz = apic_job_todo(&req, todo, UTIL_SIZE(todo), worker.id)) < 0) log_warn(TAG "unable to fetch jobs: %s", req.error); - if (req.doc) { - merge(req.doc); - json_decref(req.doc); - } + else + merge(todo, todosz); + + apic_finish(&req); } } @@ -129,20 +125,18 @@ static void fetch_worker(void) { - struct apicreq req; + struct apic req; - if (apic_get(&req, "%s/api/v1/workers/%s", sciworkerd.url, sciworkerd.name) < 0) - log_warn(TAG "unable to fetch worker info: %s", req.error); - if (!req.doc) - log_die(TAG "empty worker response"); - if (worker_from(&worker, 1, req.doc) < 0) - log_die(TAG "unable to parse worker", strerror(errno)); + util_strlcpy(&worker.name, sciworkerd.name); + + if (apic_worker_find(&req, &worker) < 0) + log_die(TAG, "unable to fetch worker info: %s", req.error); log_info("worker id: %d", worker.id); log_info("worker name: %s", worker.name); log_info("worker description: %s", worker.desc); - json_decref(req.doc); + apic_finish(&req); } /* @@ -151,14 +145,18 @@ static int fetch_project(struct project *project, int id) { - struct apicreq req; + struct apic req; + if (apic_project_find_id(&req, project, id) < 0) + return -1; +#if 0 if (apic_get(&req, "%s/api/v1/projects/%d", id) < 0) return log_warn(TAG "unable to fetch project info: %s", req.error), -1; if (!req.doc) return log_warn(TAG "empty project response"), -1; if (project_from(project, 1, req.doc) < 0) return log_warn(TAG "unable to parse project: %s", strerror(errno)), -1; +#endif return 0; } @@ -182,10 +180,11 @@ static int start(struct taskentry *entry) { + struct apic; struct project project; pid_t pid; - if (fetch_project(&project, entry->job.project_id) < 0) + if (apic_project_find_id(&project, entry->job.project_id) < 0) return log_warn(TAG "unable to fetch project, dropping task"), -1; if (task_setup(entry->task, project.script) < 0) return log_warn(TAG "unable to setup script code: %s, dropping task", strerror(errno)), -1;