Class: PrometheusExporter::Client
- Inherits:
-
Object
- Object
- PrometheusExporter::Client
- Defined in:
- lib/prometheus_exporter/client.rb
Defined Under Namespace
Classes: RemoteMetric
Constant Summary collapse
- MAX_SOCKET_AGE =
25
- MAX_QUEUE_SIZE =
10_000
Instance Method Summary collapse
-
#initialize(host:, port:, max_queue_size: nil, thread_sleep: 0.5) ⇒ Client
constructor
A new instance of Client.
- #process_queue ⇒ Object
- #register(type, name, help) ⇒ Object
- #send(obj) ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize(host:, port:, max_queue_size: nil, thread_sleep: 0.5) ⇒ Client
Returns a new instance of Client.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/prometheus_exporter/client.rb', line 31 def initialize(host:, port:, max_queue_size: nil, thread_sleep: 0.5) @metrics = [] @queue = Queue.new @socket = nil @socket_started = nil max_queue_size ||= MAX_QUEUE_SIZE max_queue_size = max_queue_size.to_i if max_queue_size.to_i <= 0 raise ArgumentError, "max_queue_size must be larger than 0" end @max_queue_size = max_queue_size @host = host @port = port @worker_thread = nil @mutex = Mutex.new @thread_sleep = thread_sleep end |
Instance Method Details
#process_queue ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/prometheus_exporter/client.rb', line 69 def process_queue while @queue.length > 0 ensure_socket! begin = @queue.pop @socket.write(.bytesize.to_s(16).upcase) @socket.write("\r\n") @socket.write() @socket.write("\r\n") rescue => e STDERR.puts "Prometheus Exporter is dropping a message: #{e}" @socket = nil raise end end end |
#register(type, name, help) ⇒ Object
53 54 55 56 57 |
# File 'lib/prometheus_exporter/client.rb', line 53 def register(type, name, help) metric = RemoteMetric.new(type: type, name: name, help: help, client: self) @metrics << metric metric end |
#send(obj) ⇒ Object
59 60 61 62 63 64 65 66 67 |
# File 'lib/prometheus_exporter/client.rb', line 59 def send(obj) @queue << obj.to_json if @queue.length > @max_queue_size STDERR.puts "Prometheus Exporter client is dropping message cause queue is full" @queue.pop end ensure_worker_thread! end |
#stop ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/prometheus_exporter/client.rb', line 87 def stop @mutex.synchronize do @worker_thread&.kill while @worker_thread.alive? sleep 0.001 end @worker_thread = nil end close_socket! end |