summaryrefslogtreecommitdiff
path: root/lib/prometheus/pid_provider.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/prometheus/pid_provider.rb')
-rw-r--r--lib/prometheus/pid_provider.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/prometheus/pid_provider.rb b/lib/prometheus/pid_provider.rb
new file mode 100644
index 00000000000..e0f7e7e0a9e
--- /dev/null
+++ b/lib/prometheus/pid_provider.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+module Prometheus
+ module PidProvider
+ extend self
+
+ def worker_id
+ if Sidekiq.server?
+ 'sidekiq'
+ elsif defined?(Unicorn::Worker)
+ unicorn_worker_id
+ elsif defined?(::Puma)
+ puma_worker_id
+ else
+ unknown_process_id
+ end
+ end
+
+ private
+
+ def unicorn_worker_id
+ if matches = process_name.match(/unicorn.*worker\[([0-9]+)\]/)
+ "unicorn_#{matches[1]}"
+ elsif process_name =~ /unicorn/
+ "unicorn_master"
+ else
+ unknown_process_id
+ end
+ end
+
+ def puma_worker_id
+ if matches = process_name.match(/puma.*cluster worker ([0-9]+):/)
+ "puma_#{matches[1]}"
+ elsif process_name =~ /puma/
+ "puma_master"
+ else
+ unknown_process_id
+ end
+ end
+
+ def unknown_process_id
+ "process_#{Process.pid}"
+ end
+
+ def process_name
+ $0
+ end
+ end
+end