Module: BrainzLab::Nerve
- Defined in:
- lib/brainzlab/nerve.rb,
lib/brainzlab/nerve/client.rb,
lib/brainzlab/nerve/provisioner.rb
Defined Under Namespace
Classes: Client, Provisioner
Class Method Summary collapse
- .client ⇒ Object
-
.delete(job_id) ⇒ Object
Delete a job.
-
.ensure_provisioned! ⇒ Object
INTERNAL ===.
-
.jobs(queue: nil, status: nil, limit: 100) ⇒ Object
List recent jobs.
- .provisioner ⇒ Object
-
.queue(name) ⇒ Object
Get queue details.
-
.queues ⇒ Object
List all queues.
-
.report_failure(job_class:, job_id:, queue:, error:, started_at: nil, **attributes) ⇒ Object
Report a failed job.
-
.report_metrics(queue:, size:, latency_ms: nil, workers: nil) ⇒ Object
Report queue metrics (for custom job backends).
-
.report_started(job_class:, job_id:, queue:, **attributes) ⇒ Object
Report a job that’s currently running.
-
.report_success(job_class:, job_id:, queue:, started_at:, ended_at: Time.now, **attributes) ⇒ Object
Report a completed job.
- .reset! ⇒ Object
-
.retry(job_id) ⇒ Object
Retry a failed job.
-
.stats(queue: nil, job_class: nil, period: '1h') ⇒ Object
Get job statistics.
-
.track(job_class:, job_id:, queue: 'default', **attributes) ⇒ Object
Track a job execution (block helper).
Class Method Details
.client ⇒ Object
202 203 204 |
# File 'lib/brainzlab/nerve.rb', line 202 def client @client ||= Client.new(BrainzLab.configuration) end |
.delete(job_id) ⇒ Object
Delete a job
133 134 135 136 137 138 139 140 |
# File 'lib/brainzlab/nerve.rb', line 133 def delete(job_id) return false unless enabled? ensure_provisioned! return false unless BrainzLab.configuration.nerve_valid? client.delete_job(job_id) end |
.ensure_provisioned! ⇒ Object
INTERNAL ===
191 192 193 194 195 196 |
# File 'lib/brainzlab/nerve.rb', line 191 def ensure_provisioned! return if @provisioned @provisioned = true provisioner.ensure_project! end |
.jobs(queue: nil, status: nil, limit: 100) ⇒ Object
List recent jobs
93 94 95 96 97 98 99 100 |
# File 'lib/brainzlab/nerve.rb', line 93 def jobs(queue: nil, status: nil, limit: 100) return [] unless enabled? ensure_provisioned! return [] unless BrainzLab.configuration.nerve_valid? client.list_jobs(queue: queue, status: status, limit: limit) end |
.provisioner ⇒ Object
198 199 200 |
# File 'lib/brainzlab/nerve.rb', line 198 def provisioner @provisioner ||= Provisioner.new(BrainzLab.configuration) end |
.queue(name) ⇒ Object
Get queue details
113 114 115 116 117 118 119 120 |
# File 'lib/brainzlab/nerve.rb', line 113 def queue(name) return nil unless enabled? ensure_provisioned! return nil unless BrainzLab.configuration.nerve_valid? client.get_queue(name) end |
.queues ⇒ Object
List all queues
103 104 105 106 107 108 109 110 |
# File 'lib/brainzlab/nerve.rb', line 103 def queues return [] unless enabled? ensure_provisioned! return [] unless BrainzLab.configuration.nerve_valid? client.list_queues end |
.report_failure(job_class:, job_id:, queue:, error:, started_at: nil, **attributes) ⇒ Object
Report a failed job
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/brainzlab/nerve.rb', line 43 def report_failure(job_class:, job_id:, queue:, error:, started_at: nil, **attributes) return false unless enabled? ensure_provisioned! return false unless BrainzLab.configuration.nerve_valid? client.report_failure( job_class: job_class, job_id: job_id, queue: queue, error_class: error.class.name, error_message: error., backtrace: error.backtrace, started_at: started_at, **attributes ) end |
.report_metrics(queue:, size:, latency_ms: nil, workers: nil) ⇒ Object
Report queue metrics (for custom job backends)
143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/brainzlab/nerve.rb', line 143 def report_metrics(queue:, size:, latency_ms: nil, workers: nil) return false unless enabled? ensure_provisioned! return false unless BrainzLab.configuration.nerve_valid? client.report_metrics( queue: queue, size: size, latency_ms: latency_ms, workers: workers ) end |
.report_started(job_class:, job_id:, queue:, **attributes) ⇒ Object
Report a job that’s currently running
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/brainzlab/nerve.rb', line 62 def report_started(job_class:, job_id:, queue:, **attributes) return false unless enabled? ensure_provisioned! return false unless BrainzLab.configuration.nerve_valid? client.report_job( job_class: job_class, job_id: job_id, queue: queue, status: 'running', started_at: Time.now, ended_at: Time.now, **attributes ) end |
.report_success(job_class:, job_id:, queue:, started_at:, ended_at: Time.now, **attributes) ⇒ Object
Report a completed job
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/brainzlab/nerve.rb', line 25 def report_success(job_class:, job_id:, queue:, started_at:, ended_at: Time.now, **attributes) return false unless enabled? ensure_provisioned! return false unless BrainzLab.configuration.nerve_valid? client.report_job( job_class: job_class, job_id: job_id, queue: queue, status: 'completed', started_at: started_at, ended_at: ended_at, **attributes ) end |
.reset! ⇒ Object
206 207 208 209 210 |
# File 'lib/brainzlab/nerve.rb', line 206 def reset! @client = nil @provisioner = nil @provisioned = false end |
.retry(job_id) ⇒ Object
Retry a failed job
123 124 125 126 127 128 129 130 |
# File 'lib/brainzlab/nerve.rb', line 123 def retry(job_id) return false unless enabled? ensure_provisioned! return false unless BrainzLab.configuration.nerve_valid? client.retry_job(job_id) end |
.stats(queue: nil, job_class: nil, period: '1h') ⇒ Object
Get job statistics
83 84 85 86 87 88 89 90 |
# File 'lib/brainzlab/nerve.rb', line 83 def stats(queue: nil, job_class: nil, period: '1h') return nil unless enabled? ensure_provisioned! return nil unless BrainzLab.configuration.nerve_valid? client.stats(queue: queue, job_class: job_class, period: period) end |
.track(job_class:, job_id:, queue: 'default', **attributes) ⇒ Object
Track a job execution (block helper)
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/brainzlab/nerve.rb', line 163 def track(job_class:, job_id:, queue: 'default', **attributes) started_at = Time.now begin result = yield report_success( job_class: job_class, job_id: job_id, queue: queue, started_at: started_at, **attributes ) result rescue StandardError => e report_failure( job_class: job_class, job_id: job_id, queue: queue, error: e, started_at: started_at, **attributes ) raise end end |