Module: Sidekiq::Undertaker::WebExtension::APIHelpers
- Defined in:
- lib/sidekiq/undertaker/web_extension/api_helpers.rb
Overview
rubocop:disable Metrics/ModuleLength
Constant Summary collapse
- EXPORT_CHUNK_SIZE =
2000
Instance Method Summary collapse
- #bad_request ⇒ Object
- #handle_selected_jobs(jobs) ⇒ Object
- #parsed_params ⇒ Object
- #post_import_jobs ⇒ Object
- #post_undertaker ⇒ Object
- #post_undertaker_job_class_error_class_error_msg_bucket_name_delete ⇒ Object
- #post_undertaker_job_class_error_class_error_msg_bucket_name_export ⇒ Object
- #post_undertaker_job_class_error_class_error_msg_bucket_name_retry ⇒ Object
- #prepare_data(data, chunk_size) ⇒ Object
- #redirect_path(request) ⇒ Object
- #render_result(template) ⇒ Object
- #send_data(data, content_type = "text/plain", file_name = "attachment.txt") ⇒ Object
- #show_filter ⇒ Object
- #show_filter_by_job_class_bucket_name ⇒ Object
- #show_filter_by_job_class_error_class_bucket_name ⇒ Object
- #show_undertaker_by_job_class_error_class_error_msg_bucket_name ⇒ Object
- #store_request_params ⇒ Object
- #view_path ⇒ Object
Instance Method Details
#bad_request ⇒ Object
195 196 197 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 195 def bad_request [400, { "Content-Type" => "text/plain" }, ["Bad Request"]] end |
#handle_selected_jobs(jobs) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 86 def handle_selected_jobs(jobs) return send_data(*prepare_data(jobs.map(&:item), EXPORT_CHUNK_SIZE)) if parsed_params["export"] if parsed_params["retry"] jobs.each(&:retry) elsif parsed_params["delete"] jobs.each(&:delete) end redirect redirect_path(request) end |
#parsed_params ⇒ Object
152 153 154 155 156 157 158 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 152 def parsed_params @parsed_params ||= if params["error_msg"] && params["error_msg"] != "all" params.merge("error_msg" => Base64.urlsafe_decode64(params["error_msg"])) else params end end |
#post_import_jobs ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 126 def post_import_jobs file = parsed_params["upload_file"] raise ::ArgumentError.new("The file is not a json") if file.nil? || file[:type] != "application/json" data = parsed_params["upload_file"][:tempfile].read dead_set = Sidekiq::DeadSet.new JSON.parse(data).each do |job| dead_set.kill(Sidekiq.dump_json(job)) end redirect redirect_path(request) rescue StandardError bad_request end |
#post_undertaker ⇒ Object
76 77 78 79 80 81 82 83 84 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 76 def post_undertaker raise ::ArgumentError.new("Key missing") unless parsed_params["key"] jobs = parsed_params["key"].map { |k| Sidekiq::DeadSet.new.fetch(*parse_params(k)).first }.compact handle_selected_jobs jobs rescue ::ArgumentError bad_request end |
#post_undertaker_job_class_error_class_error_msg_bucket_name_delete ⇒ Object
98 99 100 101 102 103 104 105 106 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 98 def post_undertaker_job_class_error_class_error_msg_bucket_name_delete store_request_params @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params) @dead_jobs.each do |dead_job| dead_job.job.delete end redirect redirect_path(request) end |
#post_undertaker_job_class_error_class_error_msg_bucket_name_export ⇒ Object
119 120 121 122 123 124 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 119 def post_undertaker_job_class_error_class_error_msg_bucket_name_export store_request_params @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params) send_data(*prepare_data(@dead_jobs.map { |j| j.job.item }, EXPORT_CHUNK_SIZE)) end |
#post_undertaker_job_class_error_class_error_msg_bucket_name_retry ⇒ Object
108 109 110 111 112 113 114 115 116 117 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 108 def post_undertaker_job_class_error_class_error_msg_bucket_name_retry store_request_params @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params) @dead_jobs.each do |dead_job| dead_job.job.retry end redirect redirect_path(request) end |
#prepare_data(data, chunk_size) ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 169 def prepare_data(data, chunk_size) filename = Time.now.strftime("%Y-%m-%d_%H-%M").to_s return [data.to_json, "application/json", "#{filename}.json"] if data.length <= chunk_size filename = "#{@req_job_class}_#{filename}" zip = Zip::OutputStream.write_buffer do |file| data.each_slice(chunk_size).with_index do |chunk, index| file.put_next_entry("#{filename}_part-#{index + 1}.json") file.write chunk.to_json end end [zip.string, "application/zip", "#{filename}.zip"] end |
#redirect_path(request) ⇒ Object
164 165 166 167 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 164 def redirect_path(request) path = request.referer ? URI.parse(request.referer).path : request.path path.gsub("/delete", "").gsub("/retry", "").gsub("/export", "") end |
#render_result(template) ⇒ Object
141 142 143 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 141 def render_result(template) render(:erb, File.read(File.join(view_path, template))) end |
#send_data(data, content_type = "text/plain", file_name = "attachment.txt") ⇒ Object
184 185 186 187 188 189 190 191 192 193 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 184 def send_data(data, content_type = "text/plain", file_name = "attachment.txt") [ 200, { "Content-Type" => content_type, "Content-Disposition" => "attachment; filename=\"#{file_name}\"" }, [data] ] end |
#show_filter ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 16 def show_filter store_request_params @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params) @distribution = Sidekiq::Undertaker::JobDistributor.new(@dead_jobs).group_by_job_class @total_dead = @dead_jobs.size render_result("filter.erb") end |
#show_filter_by_job_class_bucket_name ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 26 def show_filter_by_job_class_bucket_name store_request_params @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params) @distribution = Sidekiq::Undertaker::JobDistributor.new(@dead_jobs).group_by_error_class @total_dead = @dead_jobs.size render_result("filter_job_class.erb") end |
#show_filter_by_job_class_error_class_bucket_name ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 36 def show_filter_by_job_class_error_class_bucket_name store_request_params @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params) @distribution = Sidekiq::Undertaker::JobDistributor.new(@dead_jobs).group_by_error_msg @total_dead = @dead_jobs.size render_result("filter_job_class_error_class.erb") end |
#show_undertaker_by_job_class_error_class_error_msg_bucket_name ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 46 def show_undertaker_by_job_class_error_class_error_msg_bucket_name store_request_params @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params) # Display dead jobs as list @dead_jobs = @dead_jobs.map(&:job) @undertaker_path = "undertaker/morgue/#{@req_job_class}/#{@req_error_class}/#{@req_bucket_name}" # Pagination @total_dead = @dead_jobs.size @current_page = (parsed_params[:page] || 1).to_i @count = 50 # per page @dead_jobs = @dead_jobs[((@current_page - 1) * @count), @count] # HINT: For making the pagination from sidekiq work, @total_size needs to be set # https://github.com/mperham/sidekiq/blob/master/web/views/_paging.erb#L1 @total_size = @total_dead # Remove unrelated arguments to allow _paginate url to be clean # Hack to continue to reuse sidekiq's _pagination template params.delete("job_class") params.delete("bucket_name") params.delete("error_class") params.delete("error_msg") render_result("morgue.erb") end |
#store_request_params ⇒ Object
145 146 147 148 149 150 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 145 def store_request_params @req_job_class = parsed_params["job_class"] @req_bucket_name = parsed_params["bucket_name"] @req_error_class = parsed_params["error_class"] @req_error_msg = parsed_params["error_msg"] end |
#view_path ⇒ Object
160 161 162 |
# File 'lib/sidekiq/undertaker/web_extension/api_helpers.rb', line 160 def view_path File.join(File.(__dir__), "../../../../web/views") end |