class GardenMessenger::Reporter

Public Class Methods

new(monitor_url, token, update_rate, verbose = false) click to toggle source
# File lib/garden_messenger/reporter.rb, line 6
def initialize(monitor_url, token, update_rate, verbose = false)
  @monitor_url = monitor_url
  @token = token
  @update_rate = Integer(update_rate)
  @verbose = verbose

  if @verbose
    puts "Initialized #{self.class.name}:"
    puts "  > monitor_url: #{@monitor_url}"
    puts "  > token: #{@token}"
    puts "  > update_rate: #{@update_rate} (seconds)"
  end
end

Public Instance Methods

report!() { || ... } click to toggle source
# File lib/garden_messenger/reporter.rb, line 20
def report!
  EventMachine.run do
    Signal.trap('INT')  { EventMachine.stop }
    Signal.trap('TERM') { EventMachine.stop }

    client = ActionCableClient.new(
      @monitor_url,
      'MessengerChannel',
      true,
      Authorization: "Token #{@token}"
    )

    # called whenever a welcome message is received from the server
    client.connected do
      if @verbose
        puts 'Connection established with monitor ' \
             "on #{@monitor_url}"
      end
      thread = Thread.new do
        loop do
          data = yield
          puts "Sending data: #{data.to_json}" if @verbose
          client.perform('report', data)

          sleep @update_rate
        end
      end
      thread.abort_on_exception = true
    end

    client.disconnected do
      puts 'Disconnected from monitor, exiting'
      exit 1
    end

    client.errored do |error|
      puts "Error received: #{error}"
    end

    client.received
  end
end