module Aggro

Private: Define methods to protect handlers from code reloading.

Public: Module for namespacing and configuration methods.

Constants

ClientNode
Event
EventArgument
EventStream
MESSAGE_TYPES
QueryError
VERSION

Attributes

data_dir[W]
logger[W]
port[W]
publisher_port[W]
transport[W]

Public Instance Methods

channels() click to toggle source
# File lib/aggro.rb, line 127
def channels
  if cluster_config.server_node?
    @channels ||= begin
      Aggro.store.registry.reduce({}) do |channels, (id, type)|
        channels.merge id => Channel.new(id, type)
      end
    end
  else
    @channels ||= {}
  end
end
class_attributes() click to toggle source
# File lib/aggro.rb, line 17
def class_attributes
  @class_attributes ||= Hash.new { |hash, key| hash[key] = {} }
end
cluster_config() click to toggle source
# File lib/aggro.rb, line 139
def cluster_config
  @cluster_config ||= ClusterConfig.new cluster_config_path
end
cluster_config_path() click to toggle source
# File lib/aggro.rb, line 143
def cluster_config_path
  [data_dir, 'cluster.yml'].join('/')
end
command_handlers() click to toggle source
# File lib/aggro.rb, line 21
def command_handlers
  @command_handlers ||= Hash.new { |hash, key| hash[key] = {} }
end
data_dir() click to toggle source
# File lib/aggro.rb, line 147
def data_dir
  @data_dir ||= begin
    ENV.fetch('AGGRO_DIR') { './tmp/aggro' }.tap do |dir|
      FileUtils.mkdir_p dir
    end
  end
end
event_bus() click to toggle source
# File lib/aggro.rb, line 155
def event_bus
  @event_bus ||= EventBus.new
end
local_node() click to toggle source
# File lib/aggro.rb, line 159
def local_node
  if cluster_config.server_node?
    @local_node ||= LocalNode.new(cluster_config.node_name)
  else
    @local_node ||= ClientNode.new(SecureRandom.uuid)
  end
end
logger() click to toggle source
# File lib/aggro.rb, line 167
def logger
  @logger ||= -> (_level, _progname, _message = nil, &_block) {}
end
node_list() click to toggle source
# File lib/aggro.rb, line 171
def node_list
  @node_list ||= begin
    NodeList.new.tap do |node_list|
      nodes = cluster_config.nodes
      nodes.each { |name, server| node_list.add Node.new(name, server) }
      node_list.add local_node if cluster_config.server_node?
    end
  end
end
port() click to toggle source
# File lib/aggro.rb, line 181
def port
  @port ||= ENV.fetch('PORT') { 5000 }.to_i
end
publisher_port() click to toggle source
# File lib/aggro.rb, line 185
def publisher_port
  @publisher_port ||= ENV.fetch('PUBLISHER_PORT') { 6000 }.to_i
end
query_handlers() click to toggle source
# File lib/aggro.rb, line 25
def query_handlers
  @query_handlers ||= Hash.new { |hash, key| hash[key] = {} }
end
reset() click to toggle source
# File lib/aggro.rb, line 189
def reset
  @cluster_config = nil
  @event_bus.shutdown if @event_bus
  @event_bus = nil
  @local_node = nil
  reset_clients && @node_list = nil
  @port = nil
  @publisher_port = nil
  @server.stop if @server
  @server = nil
  @store = nil
end
reset_clients() click to toggle source
# File lib/aggro.rb, line 202
def reset_clients
  return unless @node_list

  @node_list.nodes
    .select { |node| node.is_a? Node }
    .map(&:client)
    .each(&:disconnect!)
end
server() click to toggle source
# File lib/aggro.rb, line 211
def server
  return unless cluster_config.server_node?

  @server ||= Server.new(local_node.endpoint, local_node.publisher_endpoint)
end
step_handlers() click to toggle source
# File lib/aggro.rb, line 29
def step_handlers
  @step_handlers ||= Hash.new { |hash, key| hash[key] = {} }
end
store() click to toggle source
# File lib/aggro.rb, line 217
def store
  @store ||= FileStore.new(data_dir)
end
transport() click to toggle source
# File lib/aggro.rb, line 221
def transport
  @transport ||= ZeroMQTransport
end