Class: Desiru::Persistence::Repositories::JobResultRepository
- Inherits:
-
BaseRepository
- Object
- BaseRepository
- Desiru::Persistence::Repositories::JobResultRepository
show all
- Defined in:
- lib/desiru/persistence/repositories/job_result_repository.rb
Overview
Repository for job result persistence
Instance Attribute Summary
#model_class
Instance Method Summary
collapse
-
#cleanup_expired ⇒ Object
-
#create_for_job(job_id, job_class, queue, inputs: nil, expires_at: nil) ⇒ Object
-
#find_by_job_id(job_id) ⇒ Object
-
#initialize ⇒ JobResultRepository
constructor
A new instance of JobResultRepository.
-
#mark_completed(job_id, result, message: nil) ⇒ Object
-
#mark_failed(job_id, error, backtrace: nil, increment_retry: true) ⇒ Object
-
#mark_processing(job_id) ⇒ Object
-
#recent_by_class(job_class, limit: 10) ⇒ Object
-
#statistics(job_class: nil, since: nil) ⇒ Object
-
#update_progress(job_id, progress, message: nil) ⇒ Object
#all, #count, #create, #delete?, #exists?, #find, #find_by, #paginate, #update, #where
Constructor Details
Returns a new instance of JobResultRepository.
10
11
12
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 10
def initialize
super(Models::JobResult)
end
|
Instance Method Details
#cleanup_expired ⇒ Object
71
72
73
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 71
def cleanup_expired
dataset.expired.delete
end
|
#create_for_job(job_id, job_class, queue, inputs: nil, expires_at: nil) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 14
def create_for_job(job_id, job_class, queue, inputs: nil, expires_at: nil)
create(
job_id: job_id,
job_class: job_class,
queue: queue,
status: Models::JobResult::STATUS_PENDING,
inputs: inputs&.to_json,
enqueued_at: Time.now,
expires_at: expires_at
)
end
|
#find_by_job_id(job_id) ⇒ Object
26
27
28
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 26
def find_by_job_id(job_id)
find_by(job_id: job_id)
end
|
#mark_completed(job_id, result, message: nil) ⇒ Object
38
39
40
41
42
43
44
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 38
def mark_completed(job_id, result, message: nil)
job_result = find_by_job_id(job_id)
return nil unless job_result
job_result.mark_as_completed!(result, message: message)
job_result
end
|
#mark_failed(job_id, error, backtrace: nil, increment_retry: true) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 46
def mark_failed(job_id, error, backtrace: nil, increment_retry: true)
job_result = find_by_job_id(job_id)
return nil unless job_result
updates = {
status: Models::JobResult::STATUS_FAILED,
finished_at: Time.now,
error_message: error.to_s,
error_backtrace: backtrace&.join("\n")
}
updates[:retry_count] = job_result.retry_count + 1 if increment_retry
job_result.update(updates)
job_result
end
|
#mark_processing(job_id) ⇒ Object
30
31
32
33
34
35
36
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 30
def mark_processing(job_id)
job_result = find_by_job_id(job_id)
return nil unless job_result
job_result.mark_as_processing!
job_result
end
|
#recent_by_class(job_class, limit: 10) ⇒ Object
75
76
77
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 75
def recent_by_class(job_class, limit: 10)
dataset.by_job_class(job_class).recent(limit).all
end
|
#statistics(job_class: nil, since: nil) ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 79
def statistics(job_class: nil, since: nil)
scope = dataset
scope = scope.by_job_class(job_class) if job_class
scope = scope.where { created_at >= since } if since
{
total: scope.count,
pending: scope.pending.count,
processing: scope.processing.count,
completed: scope.completed.count,
failed: scope.failed.count,
average_duration: calculate_average_duration(scope)
}
end
|
#update_progress(job_id, progress, message: nil) ⇒ Object
63
64
65
66
67
68
69
|
# File 'lib/desiru/persistence/repositories/job_result_repository.rb', line 63
def update_progress(job_id, progress, message: nil)
job_result = find_by_job_id(job_id)
return nil unless job_result
job_result.update_progress(progress, message: message)
job_result
end
|