diff --git a/app/controllers/dataset_controller.rb b/app/controllers/dataset_controller.rb index e67f6139822b56464d5e476082f25396e5e72802..53601074b18330fbf89bdc166f0a21f4ab0089ec 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 c820626d082438fe0d42f7be779401e376d1e6f5..7b32a094d08d496133393e1f3ffd66c1196de22e 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 231529423a761d68d8681ab4de63fc1c32fdf028..f1126cf4f2d99b4fa82f5ca7174fb4d3979a89d6 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 5b0a95c2a3e43ddc27eb164e4f172b29ea2c4881..cbf6d9b61551deed23948796812ebbeee1ae1688 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