Class: RailsNexus::CronJob
- Inherits:
-
BaseRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- BaseRecord
- RailsNexus::CronJob
- Defined in:
- app/models/rails_nexus/cron_job.rb
Constant Summary collapse
- STATUSES =
%w[pending running success failed].freeze
Class Method Summary collapse
-
.start!(name, metadata: {}) ⇒ Object
Start a new cron job run.
-
.success_rate(days: 7) ⇒ Object
Success rate over last N days.
-
.summary ⇒ Object
Stats summary.
Instance Method Summary collapse
-
#fail!(error: nil, duration: nil) ⇒ Object
Mark as failed.
-
#succeed!(output: nil, duration: nil) ⇒ Object
Mark as successful.
Methods inherited from BaseRecord
Class Method Details
.start!(name, metadata: {}) ⇒ Object
Start a new cron job run
21 22 23 24 25 26 27 28 29 |
# File 'app/models/rails_nexus/cron_job.rb', line 21 def self.start!(name, metadata: {}) create!( name: name, status: "running", started_at: Time.current, hostname: Socket.gethostname, metadata: ) end |
.success_rate(days: 7) ⇒ Object
Success rate over last N days
64 65 66 67 68 69 70 |
# File 'app/models/rails_nexus/cron_job.rb', line 64 def self.success_rate(days: 7) recent_jobs = where("created_at >= ?", days.days.ago) total = recent_jobs.count return 0 if total == 0 (recent_jobs.successful.count.to_f / total * 100).round(1) end |
.summary ⇒ Object
Stats summary
52 53 54 55 56 57 58 59 60 61 |
# File 'app/models/rails_nexus/cron_job.rb', line 52 def self.summary { total: count, successful: successful.count, failed: failed.count, running: running.count, last_run: recent.first, failure_rate: count > 0 ? (failed.count.to_f / count * 100).round(1) : 0 } end |
Instance Method Details
#fail!(error: nil, duration: nil) ⇒ Object
Mark as failed
42 43 44 45 46 47 48 49 |
# File 'app/models/rails_nexus/cron_job.rb', line 42 def fail!(error: nil, duration: nil) update!( status: "failed", finished_at: Time.current, error_message: error, duration: duration || ((finished_at || Time.current) - (started_at || created_at)) ) end |
#succeed!(output: nil, duration: nil) ⇒ Object
Mark as successful
32 33 34 35 36 37 38 39 |
# File 'app/models/rails_nexus/cron_job.rb', line 32 def succeed!(output: nil, duration: nil) update!( status: "success", finished_at: Time.current, output: output, duration: duration || ((finished_at || Time.current) - (started_at || created_at)) ) end |