مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-11-30 21:32:30 +00:00
feat: add prometheus metrics to worker
هذا الالتزام موجود في:
@@ -139,7 +139,15 @@ module Worker
|
||||
JOBS.each do |job_class|
|
||||
capture_errors do
|
||||
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?
|
||||
completed_work += 1
|
||||
@@ -222,7 +230,18 @@ module Worker
|
||||
|
||||
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
|
||||
logger.info "scheduling task to next run at #{next_run_after}"
|
||||
@@ -254,12 +273,20 @@ module Worker
|
||||
|
||||
def setup_prometheus
|
||||
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]
|
||||
|
||||
register_prometheus_counter :postal_worker_errors,
|
||||
docstring: "The number of errors encountered while processing jobs",
|
||||
labels: [:error]
|
||||
|
||||
register_prometheus_histogram :postal_worker_task_runtime,
|
||||
docstring: "The time taken to process tasks",
|
||||
labels: [:task]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -7,6 +7,11 @@ module HasPrometheusMetrics
|
||||
registry.register(counter)
|
||||
end
|
||||
|
||||
def register_prometheus_histogram(name, **kwargs)
|
||||
histogram = Prometheus::Client::Histogram.new(name, **kwargs)
|
||||
registry.register(histogram)
|
||||
end
|
||||
|
||||
def increment_prometheus_counter(name, labels: {})
|
||||
counter = registry.get(name)
|
||||
return if counter.nil?
|
||||
@@ -14,6 +19,13 @@ module HasPrometheusMetrics
|
||||
counter.increment(labels: labels)
|
||||
end
|
||||
|
||||
def observe_prometheus_histogram(name, time, labels: {})
|
||||
histogram = registry.get(name)
|
||||
return if histogram.nil?
|
||||
|
||||
histogram.observe(time, labels: labels)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def registry
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم