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