mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-13 00:24:42 +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
|
redirect_to addons_path
|
||||||
end
|
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
|
def create_fluics
|
||||||
# Placeholder for FLUICS printer management
|
# Placeholder for FLUICS printer management
|
||||||
|
|
||||||
|
@ -72,6 +82,10 @@ class LabelPrintersController < ApplicationController
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def print_job_params
|
||||||
|
params.require(:label_template_id, :label_template_locals)
|
||||||
|
end
|
||||||
|
|
||||||
def find_label_printer
|
def find_label_printer
|
||||||
@label_printer = LabelPrinter.find(params[:id])
|
@label_printer = LabelPrinter.find(params[:id])
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,4 +6,14 @@ class ApplicationJob < ActiveJob::Base
|
||||||
|
|
||||||
# Most jobs are safe to ignore if the underlying records are no longer available
|
# Most jobs are safe to ignore if the underlying records are no longer available
|
||||||
discard_on ActiveJob::DeserializationError
|
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
|
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
|
module Fluics
|
||||||
class ApiClient
|
class ApiClient
|
||||||
class NotFoundError < StandardError; end
|
class NotFoundError < StandardError; end
|
||||||
|
|
||||||
class ServerError < StandardError; end
|
class ServerError < StandardError; end
|
||||||
|
|
||||||
class BadRequestError < StandardError; end
|
class BadRequestError < StandardError; end
|
||||||
|
|
||||||
include HTTParty
|
include HTTParty
|
||||||
|
|
|
@ -24,9 +24,7 @@ module DelayedWorkerConfig
|
||||||
# or left in the database with "failed_at" set dempends on the
|
# or left in the database with "failed_at" set dempends on the
|
||||||
# DESTROY_FAILED_JOBS value
|
# DESTROY_FAILED_JOBS value
|
||||||
def max_attempts
|
def max_attempts
|
||||||
value = ENV['DELAYED_WORKER_MAX_ATTEMPTS'].to_i
|
1
|
||||||
return 6 if value.zero?
|
|
||||||
value
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# The default DELAYED_WORKER_MAX_RUN_TIME is 30.minutes.
|
# The default DELAYED_WORKER_MAX_RUN_TIME is 30.minutes.
|
||||||
|
|
|
@ -21,6 +21,8 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
resources :activities, only: [:index]
|
resources :activities, only: [:index]
|
||||||
|
|
||||||
|
get '/jobs/:id/status', to: 'active_jobs#status'
|
||||||
|
|
||||||
get 'forbidden', to: 'application#forbidden', as: 'forbidden'
|
get 'forbidden', to: 'application#forbidden', as: 'forbidden'
|
||||||
get 'not_found', to: 'application#not_found', as: 'not_found'
|
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
|
resources :label_printers, except: :show, path: 'users/settings/account/addons/label_printers' do
|
||||||
post :create_fluics, on: :collection
|
post :create_fluics, on: :collection
|
||||||
|
post :print, on: :member
|
||||||
end
|
end
|
||||||
|
|
||||||
get 'users/settings/account/connected_accounts',
|
get 'users/settings/account/connected_accounts',
|
||||||
|
|
Loading…
Add table
Reference in a new issue