From 160d3250864a5c7f897a0a2010adc4657a483517 Mon Sep 17 00:00:00 2001 From: Bryan Brancotte <bryan.brancotte@pasteur.fr> Date: Mon, 16 May 2022 13:43:57 +0200 Subject: [PATCH] show how many pipelines/job are queued and running --- client/pages/projects/_id.vue | 15 +++++++++++++++ jass/server.py | 9 +++++++-- jass/tasks.py | 5 +++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/client/pages/projects/_id.vue b/client/pages/projects/_id.vue index 53191e22..37aef005 100644 --- a/client/pages/projects/_id.vue +++ b/client/pages/projects/_id.vue @@ -29,6 +29,13 @@ <strong style="color:white; text-transform:capitalize;">{{progress}} %</strong> </v-progress-linear> </v-col> + <v-col + class="text-subtitle-1 text-center" + cols="12" + v-if="(activeTask == 0) || (pendingTask != 0)" + > + Task: {{activeTask}} running and {{pendingTask}} pending. + </v-col> </v-row> <v-row v-show="isready" align="center"> @@ -297,6 +304,8 @@ export default { isready: false, isready2: false, progress:0, + activeTask: 1, + pendingTask: 0, gencov:null, metadata:{"nb_phenotypes":0,"nb_snps":0}, summary:{"JASSSignif":{"MinUnivNotSignif":0,"MinUnivSignif":0},"JASSNotSignif":{"MinUnivNotSignif":0,"MinUnivSignif":0}}, @@ -562,6 +571,12 @@ methods:{ async getStatus(){ + await this.$axios.$get('/queue_status/').then((function (resultStatus) { + console.log(resultStatus); + this.activeTask = resultStatus.active; + this.pendingTask = resultStatus.reserved; + }).bind(this)); + await this.$axios.$get('/projects/'+this.project.id).then((async function (result) { console.log(result.status.worktable); diff --git a/jass/server.py b/jass/server.py index 9345b391..af47bc84 100644 --- a/jass/server.py +++ b/jass/server.py @@ -6,14 +6,14 @@ from json import JSONDecodeError from pathlib import Path from typing import List -from starlette.responses import RedirectResponse +from starlette.responses import RedirectResponse, JSONResponse from jass import util from jass.config import config from jass.models.phenotype import Phenotype, get_available_phenotypes, PhenotypeIdList from jass.models.inittable import get_inittable_meta from jass.models.project import GlobalProject, load_project as project__load_project -from jass.tasks import create_project, run_project_analysis_if_needed +from jass.tasks import create_project, run_project_analysis_if_needed, get_queue_status from fastapi import FastAPI, HTTPException from fastapi.responses import Response, FileResponse @@ -167,6 +167,11 @@ def get_manhattan(project_id: str, selected_chr: str, selected_region: str): ) +@app.get("/api/queue_status") +def project_detail(): + return JSONResponse(get_queue_status()) + + # @blp_inittable.route("") diff --git a/jass/tasks.py b/jass/tasks.py index 65d7e35a..b9d2b22b 100644 --- a/jass/tasks.py +++ b/jass/tasks.py @@ -79,6 +79,11 @@ def dummy_task(): print("This task to nothing, but help the chain to have a valid status") +def get_queue_status(): + inspect = celery.control.inspect() + return dict((k, len(list(getattr(inspect, k)().values())[0])) for k in ['active', 'reserved']) + + def run_project_analysis_if_needed(project): if project.has_computation_going_on(): return -- GitLab