مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2026-01-16 21:23:37 +00:00
feat: add prometheus metrics to worker
هذا الالتزام موجود في:
@@ -139,7 +139,15 @@ module Worker
|
|||||||
JOBS.each do |job_class|
|
JOBS.each do |job_class|
|
||||||
capture_errors do
|
capture_errors do
|
||||||
job = job_class.new(logger: logger)
|
job = job_class.new(logger: logger)
|
||||||
job.call
|
|
||||||
|
time = Benchmark.realtime { job.call }
|
||||||
|
|
||||||
|
observe_prometheus_histogram :postal_worker_job_runtime,
|
||||||
|
time,
|
||||||
|
labels: {
|
||||||
|
thread: thread,
|
||||||
|
job: job_class.to_s.split("::").last
|
||||||
|
}
|
||||||
|
|
||||||
if job.work_completed?
|
if job.work_completed?
|
||||||
completed_work += 1
|
completed_work += 1
|
||||||
@@ -222,7 +230,18 @@ module Worker
|
|||||||
|
|
||||||
logger.info "running task"
|
logger.info "running task"
|
||||||
|
|
||||||
capture_errors { task.new(logger: logger).call }
|
time = 0
|
||||||
|
capture_errors do
|
||||||
|
time = Benchmark.realtime do
|
||||||
|
task.new(logger: logger).call
|
||||||
|
end
|
||||||
|
|
||||||
|
observe_prometheus_histogram :postal_worker_task_runtime,
|
||||||
|
time,
|
||||||
|
labels: {
|
||||||
|
task: task.to_s.split("::").last
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
next_run_after = task.next_run_after
|
next_run_after = task.next_run_after
|
||||||
logger.info "scheduling task to next run at #{next_run_after}"
|
logger.info "scheduling task to next run at #{next_run_after}"
|
||||||
@@ -254,12 +273,20 @@ module Worker
|
|||||||
|
|
||||||
def setup_prometheus
|
def setup_prometheus
|
||||||
register_prometheus_counter :postal_worker_job_executions,
|
register_prometheus_counter :postal_worker_job_executions,
|
||||||
docstring: "The number of jobs worked by a worker",
|
docstring: "The number of jobs worked by a worker where work was completed",
|
||||||
|
labels: [:thread, :job]
|
||||||
|
|
||||||
|
register_prometheus_histogram :postal_worker_job_runtime,
|
||||||
|
docstring: "The time taken to process jobs",
|
||||||
labels: [:thread, :job]
|
labels: [:thread, :job]
|
||||||
|
|
||||||
register_prometheus_counter :postal_worker_errors,
|
register_prometheus_counter :postal_worker_errors,
|
||||||
docstring: "The number of errors encountered while processing jobs",
|
docstring: "The number of errors encountered while processing jobs",
|
||||||
labels: [:error]
|
labels: [:error]
|
||||||
|
|
||||||
|
register_prometheus_histogram :postal_worker_task_runtime,
|
||||||
|
docstring: "The time taken to process tasks",
|
||||||
|
labels: [:task]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ module HasPrometheusMetrics
|
|||||||
registry.register(counter)
|
registry.register(counter)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def register_prometheus_histogram(name, **kwargs)
|
||||||
|
histogram = Prometheus::Client::Histogram.new(name, **kwargs)
|
||||||
|
registry.register(histogram)
|
||||||
|
end
|
||||||
|
|
||||||
def increment_prometheus_counter(name, labels: {})
|
def increment_prometheus_counter(name, labels: {})
|
||||||
counter = registry.get(name)
|
counter = registry.get(name)
|
||||||
return if counter.nil?
|
return if counter.nil?
|
||||||
@@ -14,6 +19,13 @@ module HasPrometheusMetrics
|
|||||||
counter.increment(labels: labels)
|
counter.increment(labels: labels)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def observe_prometheus_histogram(name, time, labels: {})
|
||||||
|
histogram = registry.get(name)
|
||||||
|
return if histogram.nil?
|
||||||
|
|
||||||
|
histogram.observe(time, labels: labels)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def registry
|
def registry
|
||||||
|
|||||||
المرجع في مشكلة جديدة
حظر مستخدم