mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-10 09:23:58 +08:00
Added print job queue system, job status endpoint [SCI-5903]
This commit is contained in:
parent
46a9388d8d
commit
e57132dbd0
7 changed files with 53 additions and 3 deletions
7
app/controllers/active_jobs_controller.rb
Normal file
7
app/controllers/active_jobs_controller.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ActiveJobsController < ApplicationController
|
||||
def status
|
||||
render json: { status: ApplicationJob.status(params[:id]) }
|
||||
end
|
||||
end
|
|
@ -47,6 +47,16 @@ class LabelPrintersController < ApplicationController
|
|||
redirect_to addons_path
|
||||
end
|
||||
|
||||
def print
|
||||
print_job = LabelPrinters::PrintJob.perform_later(
|
||||
LabelPrinter.find(params[:id]),
|
||||
LabelTemplate.find(print_job_params[:label_template_id])
|
||||
.render(print_job_params[:locals])
|
||||
)
|
||||
|
||||
render json: { job_id: print_job.job_id }
|
||||
end
|
||||
|
||||
def create_fluics
|
||||
# Placeholder for FLUICS printer management
|
||||
|
||||
|
@ -72,6 +82,10 @@ class LabelPrintersController < ApplicationController
|
|||
)
|
||||
end
|
||||
|
||||
def print_job_params
|
||||
params.require(:label_template_id, :label_template_locals)
|
||||
end
|
||||
|
||||
def find_label_printer
|
||||
@label_printer = LabelPrinter.find(params[:id])
|
||||
end
|
||||
|
|
|
@ -6,4 +6,14 @@ class ApplicationJob < ActiveJob::Base
|
|||
|
||||
# Most jobs are safe to ignore if the underlying records are no longer available
|
||||
discard_on ActiveJob::DeserializationError
|
||||
|
||||
def self.status(job_id)
|
||||
delayed_job = Delayed::Job.where('handler LIKE ?', "%job_id: #{job_id}%").last
|
||||
|
||||
return :done unless delayed_job
|
||||
return :failed if delayed_job.failed_at
|
||||
return :running if delayed_job.locked_at
|
||||
|
||||
:pending
|
||||
end
|
||||
end
|
||||
|
|
16
app/jobs/label_printers/print_job.rb
Normal file
16
app/jobs/label_printers/print_job.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module LabelPrinters
|
||||
class PrintJob < ApplicationJob
|
||||
queue_as :high_priority
|
||||
|
||||
def perform(label_printer, payload)
|
||||
case label_printer.type_of
|
||||
when 'fluics'
|
||||
LabelPrinters::Fluics::ApiClient.new(
|
||||
label_printer.fluics_api_key
|
||||
).print(label_printer.fluics_lid, payload)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -4,7 +4,9 @@ module LabelPrinters
|
|||
module Fluics
|
||||
class ApiClient
|
||||
class NotFoundError < StandardError; end
|
||||
|
||||
class ServerError < StandardError; end
|
||||
|
||||
class BadRequestError < StandardError; end
|
||||
|
||||
include HTTParty
|
||||
|
|
|
@ -24,9 +24,7 @@ module DelayedWorkerConfig
|
|||
# or left in the database with "failed_at" set dempends on the
|
||||
# DESTROY_FAILED_JOBS value
|
||||
def max_attempts
|
||||
value = ENV['DELAYED_WORKER_MAX_ATTEMPTS'].to_i
|
||||
return 6 if value.zero?
|
||||
value
|
||||
1
|
||||
end
|
||||
|
||||
# The default DELAYED_WORKER_MAX_RUN_TIME is 30.minutes.
|
||||
|
|
|
@ -21,6 +21,8 @@ Rails.application.routes.draw do
|
|||
|
||||
resources :activities, only: [:index]
|
||||
|
||||
get '/jobs/:id/status', to: 'active_jobs#status'
|
||||
|
||||
get 'forbidden', to: 'application#forbidden', as: 'forbidden'
|
||||
get 'not_found', to: 'application#not_found', as: 'not_found'
|
||||
|
||||
|
@ -44,6 +46,7 @@ Rails.application.routes.draw do
|
|||
|
||||
resources :label_printers, except: :show, path: 'users/settings/account/addons/label_printers' do
|
||||
post :create_fluics, on: :collection
|
||||
post :print, on: :member
|
||||
end
|
||||
|
||||
get 'users/settings/account/connected_accounts',
|
||||
|
|
Loading…
Reference in a new issue