1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2025-11-30 21:32:30 +00:00

feat: add prometheus metrics to worker

هذا الالتزام موجود في:
Adam Cooke
2024-02-24 11:19:48 +00:00
الأصل 0fcf778a51
التزام bea7450d8f
2 ملفات معدلة مع 42 إضافات و3 حذوفات

عرض الملف

@@ -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