Class: Mayu::Metrics::Reporter::Client

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/mayu/metrics/reporter.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(peer) ⇒ Client



75
76
77
78
# File 'lib/mayu/metrics/reporter.rb', line 75

def initialize(peer)
  wrapper = Wrapper.new
  @packer = T.let(wrapper.packer(peer), MessagePack::Packer)
end

Class Method Details

.connect(collector_endpoint, &block) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/mayu/metrics/reporter.rb', line 37

def self.connect(collector_endpoint, &block)
  Console.logger.info(
    self,
    "Connecting to #{File.expand_path(collector_endpoint.path)}"
  )

  collector_endpoint.connect { |peer| yield new(peer) }
end

.connect_and_sync(collector_endpoint:, data_store:, interval: 1, task: Async::Task.current) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/mayu/metrics/reporter.rb', line 54

def self.connect_and_sync(
  collector_endpoint:,
  data_store:,
  interval: 1,
  task: Async::Task.current
)
  task.async do
    connect(collector_endpoint) do |client|
      loop do
        client.sync(data_store)
        sleep(interval)
      end
    end
  rescue Errno::EPIPE
    Console.logger.error(self, "Broken pipe")
  rescue Errno::ECONNREFUSED
    Console.logger.error(self, "Connection refused")
  end
end

Instance Method Details

#sync(data_store, task: Async::Task.current) ⇒ Object



81
82
83
# File 'lib/mayu/metrics/reporter.rb', line 81

def sync(data_store, task: Async::Task.current)
  send(:store, data_store.store)
end