Class: Hyrax::Operation
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Hyrax::Operation
- Defined in:
- app/models/hyrax/operation.rb
Overview
The database storage of inter-related jobs and their states.
Direct Known Subclasses
Constant Summary collapse
- PENDING =
'pending'
- PERFORMING =
'performing'
- FAILURE =
'failure'
- SUCCESS =
'success'
Instance Method Summary collapse
-
#fail!(message = nil) ⇒ Object
Mark this operation as a FAILURE.
-
#pending_job(job) ⇒ Object
Sets the operation status to PENDING.
-
#performing! ⇒ Object
Sets the operation status to PERFORMING.
-
#rollup_messages ⇒ Object
Roll up messages for an operation and all of its children.
-
#rollup_status ⇒ Object
If this is a batch job (has children), check to see if all the children are complete.
-
#success! ⇒ Object
Mark this operation as a SUCCESS.
Instance Method Details
#fail!(message = nil) ⇒ Object
Where are these callbacks defined? Document this
This will run any registered :failure callbacks
Mark this operation as a FAILURE. If this is a child operation, roll up to the parent any failures.
77 78 79 80 81 82 |
# File 'app/models/hyrax/operation.rb', line 77 def fail!( = nil) run_callbacks :failure do update(status: FAILURE, message: ) parent&.rollup_status end end |
#pending_job(job) ⇒ Object
Sets the operation status to PENDING
93 94 95 |
# File 'app/models/hyrax/operation.rb', line 93 def pending_job(job) update(job_class: job.class.to_s, job_id: job.job_id, status: Hyrax::Operation::PENDING) end |
#performing! ⇒ Object
Sets the operation status to PERFORMING
86 87 88 |
# File 'app/models/hyrax/operation.rb', line 86 def performing! update(status: PERFORMING) end |
#rollup_messages ⇒ Object
Roll up messages for an operation and all of its children
46 47 48 49 50 51 52 53 |
# File 'app/models/hyrax/operation.rb', line 46 def [].tap do || << if .present? children&.pluck(:message)&.uniq&.each do || << if .present? end end end |
#rollup_status ⇒ Object
If this is a batch job (has children), check to see if all the children are complete
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/models/hyrax/operation.rb', line 29 def rollup_status with_lock do # We don't need all of the status of the children, just need to see # if there is at least one PENDING, PERFORMING, or FAILURE. # however, we can't use distinct with order by (from acts_as_nested_set) # with postgres or you get the following error: # ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list stats = children.pluck(:status).uniq # Don't mark as pass or fail until all jobs are complete return if stats.include?(PENDING) || stats.include?(PERFORMING) return fail! if stats.include?(FAILURE) success! end end |
#success! ⇒ Object
Where are these callbacks defined? Document this
This will run any registered :success callbacks
Mark this operation as a SUCCESS. If this is a child operation, roll up to the parent any failures.
62 63 64 65 66 67 |
# File 'app/models/hyrax/operation.rb', line 62 def success! run_callbacks :success do update(status: SUCCESS) parent&.rollup_status end end |