From 897c50a055a4ab27c6e9a42ee176ce36c420b372 Mon Sep 17 00:00:00 2001
From: Simon Mayer <simon.mayer@onb.ac.at>
Date: Thu, 6 Oct 2022 17:16:20 +0200
Subject: [PATCH] Add completion display for search_to_dataset_worker and
 proper Sidekiq client configuration

---
 app/controllers/dataset_controller.rb           |  6 +++++-
 app/javascript/channels/notification_channel.js |  6 ++++++
 app/workers/search_to_dataset_worker.rb         |  6 ++++++
 config/initializers/sidekiq.rb                  | 12 ++++++++----
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/app/controllers/dataset_controller.rb b/app/controllers/dataset_controller.rb
index e67f613..5360107 100644
--- a/app/controllers/dataset_controller.rb
+++ b/app/controllers/dataset_controller.rb
@@ -166,7 +166,11 @@ class DatasetController < ApplicationController
   def add_all_documents
     SearchToDatasetWorker.perform_async(current_user.id, session[:working_dataset], params[:search_params].to_unsafe_h)
     title = Dataset.find(session[:working_dataset]).title
-    message = "<p>Documents are being added to your dataset. You will be notified when the operation is done.</p>"
+    message = "<p>Documents are being added to your dataset.</p><div class=\"completion-rate mt-2\">
+        <div class=\"progress\" id=\"progress-#{session[:working_dataset]}\">
+            <div class=\"progress-bar progress-bar-striped\" role=\"progressbar\" style=\"width: 0%;\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\">0%</div>
+        </div>
+</div>"
     render partial: "shared/notification", locals: { notif_title: title, notif_content: message.html_safe }
   end
 
diff --git a/app/javascript/channels/notification_channel.js b/app/javascript/channels/notification_channel.js
index c820626..7b32a09 100644
--- a/app/javascript/channels/notification_channel.js
+++ b/app/javascript/channels/notification_channel.js
@@ -41,6 +41,12 @@ consumer.subscriptions.create("NotificationChannel", {
                     progress_bar.attr("aria-valuenow", data.completion)
                     progress_bar.html(`${data.completion}%`)
                 }
+                if(window.location.pathname.endsWith("/search")) {
+                    const progress_bar = $("#progress-".concat(data.dataset_id)).find('.progress-bar')
+                    progress_bar.attr("style", `width: ${data.completion}%;`)
+                    progress_bar.attr("aria-valuenow", data.completion)
+                    progress_bar.html(`${data.completion}%`)
+                }
                 break
             case "experiment_finished":
                 // $("#experiment_status").html(data.message)
diff --git a/app/workers/search_to_dataset_worker.rb b/app/workers/search_to_dataset_worker.rb
index 2315294..f1126cf 100644
--- a/app/workers/search_to_dataset_worker.rb
+++ b/app/workers/search_to_dataset_worker.rb
@@ -18,6 +18,12 @@ class SearchToDatasetWorker
       res = SolrSearcher.query search_params
       numFound = res["response"]["numFound"]
       doc_ids.concat res["response"]["docs"].map { |d| d["id"] }
+      completion = (100 * doc_ids.size / numFound).to_i
+      ActionCable.server.broadcast("notifications.#{user_id}", {
+        type: "completion_rate",
+        dataset_id: dataset_id,
+        completion: completion,
+      })
     end
     existing = dataset.add_documents doc_ids
     nb_docs_added = doc_ids.size - existing.size
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 5b0a95c..cbf6d9b 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -1,5 +1,9 @@
+redis = { url: ENV.fetch("REDIS_URL", "redis://localhost:6379/1") }
+
 Sidekiq.configure_server do |config|
-    config.redis = {
-      url: ENV.fetch("REDIS_URL", "redis://localhost:6379/1")
-    }
-  end
\ No newline at end of file
+  config.redis = redis
+end
+
+Sidekiq.configure_client do |config|
+  config.redis = redis
+end
-- 
GitLab