Class: Desiru::Persistence::Models::JobResult
- Defined in:
- lib/desiru/persistence/models/job_result.rb
Overview
Model for storing background job results
Constant Summary collapse
- STATUS_PENDING =
Status constants
'pending'- STATUS_PROCESSING =
'processing'- STATUS_COMPLETED =
'completed'- STATUS_FAILED =
'failed'
Instance Method Summary collapse
- #completed? ⇒ Boolean
- #duration ⇒ Object
- #expired? ⇒ Boolean
- #failed? ⇒ Boolean
-
#inputs_data ⇒ Object
JSON field accessors.
- #mark_as_completed!(result_data, message: nil) ⇒ Object
- #mark_as_failed!(error, backtrace: nil) ⇒ Object
- #mark_as_processing! ⇒ Object
-
#pending? ⇒ Boolean
Instance methods.
- #processing? ⇒ Boolean
- #result_data ⇒ Object
- #update_progress(progress, message: nil) ⇒ Object
-
#validate ⇒ Object
Validations.
Instance Method Details
#completed? ⇒ Boolean
68 69 70 |
# File 'lib/desiru/persistence/models/job_result.rb', line 68 def completed? status == STATUS_COMPLETED end |
#duration ⇒ Object
80 81 82 83 84 |
# File 'lib/desiru/persistence/models/job_result.rb', line 80 def duration return nil unless started_at && finished_at finished_at - started_at end |
#expired? ⇒ Boolean
76 77 78 |
# File 'lib/desiru/persistence/models/job_result.rb', line 76 def expired? expires_at && expires_at < Time.now end |
#failed? ⇒ Boolean
72 73 74 |
# File 'lib/desiru/persistence/models/job_result.rb', line 72 def failed? status == STATUS_FAILED end |
#inputs_data ⇒ Object
JSON field accessors
87 88 89 90 91 92 93 |
# File 'lib/desiru/persistence/models/job_result.rb', line 87 def inputs_data return {} unless inputs JSON.parse(inputs, symbolize_names: true) rescue JSON::ParserError {} end |
#mark_as_completed!(result_data, message: nil) ⇒ Object
111 112 113 114 115 116 117 118 119 |
# File 'lib/desiru/persistence/models/job_result.rb', line 111 def mark_as_completed!(result_data, message: nil) update( status: STATUS_COMPLETED, finished_at: Time.now, progress: 100, result: result_data.to_json, message: ) end |
#mark_as_failed!(error, backtrace: nil) ⇒ Object
121 122 123 124 125 126 127 128 |
# File 'lib/desiru/persistence/models/job_result.rb', line 121 def mark_as_failed!(error, backtrace: nil) update( status: STATUS_FAILED, finished_at: Time.now, error_message: error.to_s, error_backtrace: backtrace&.join("\n") ) end |
#mark_as_processing! ⇒ Object
103 104 105 106 107 108 109 |
# File 'lib/desiru/persistence/models/job_result.rb', line 103 def mark_as_processing! update( status: STATUS_PROCESSING, started_at: Time.now, progress: 0 ) end |
#pending? ⇒ Boolean
Instance methods
60 61 62 |
# File 'lib/desiru/persistence/models/job_result.rb', line 60 def pending? status == STATUS_PENDING end |
#processing? ⇒ Boolean
64 65 66 |
# File 'lib/desiru/persistence/models/job_result.rb', line 64 def processing? status == STATUS_PROCESSING end |
#result_data ⇒ Object
95 96 97 98 99 100 101 |
# File 'lib/desiru/persistence/models/job_result.rb', line 95 def result_data return {} unless result JSON.parse(result, symbolize_names: true) rescue JSON::ParserError {} end |
#update_progress(progress, message: nil) ⇒ Object
130 131 132 133 134 |
# File 'lib/desiru/persistence/models/job_result.rb', line 130 def update_progress(progress, message: nil) updates = { progress: progress } updates[:message] = if update(updates) end |
#validate ⇒ Object
Validations
17 18 19 20 21 22 |
# File 'lib/desiru/persistence/models/job_result.rb', line 17 def validate super validates_presence i[job_id job_class queue status enqueued_at] validates_unique :job_id if db&.table_exists?(:job_results) validates_includes %w[pending processing completed failed], :status end |