Class: GraphiteApiMiddleware::Server

Inherits:
EventMachine::Connection
  • Object
show all
Defined in:
lib/graphite-api-middleware.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(buffer, logger) ⇒ Server

Returns a new instance of Server.



28
29
30
31
# File 'lib/graphite-api-middleware.rb', line 28

def initialize buffer, logger
  @buffer = buffer and super
  @logger = logger
end

Instance Attribute Details

#bufferObject (readonly)

Returns the value of attribute buffer.



33
34
35
# File 'lib/graphite-api-middleware.rb', line 33

def buffer
  @buffer
end

#client_idObject (readonly)

Returns the value of attribute client_id.



33
34
35
# File 'lib/graphite-api-middleware.rb', line 33

def client_id
  @client_id
end

Class Method Details

.default_optionsObject



56
57
58
# File 'lib/graphite-api-middleware.rb', line 56

def self.default_options
  GraphiteAPI::Client.default_options.merge interval: 60, pid: '/var/run/graphite-api-middleware.pid'
end

.start(options, logger) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/graphite-api-middleware.rb', line 60

def self.start options, logger
  EventMachine.run do
    GraphiteAPI::Logger.logger = logger
    logger.info "Server running on port #{options[:port]}"

    buffer = GraphiteAPI::Buffer.new options
    group  = GraphiteAPI::Connector::Group.new options

    # Starting server
    [:start_server, :open_datagram_socket].each do |m|
      EventMachine.send(m, '0.0.0.0', options[:port], self, buffer, logger)
    end

    # Send metrics to graphite every X seconds
    Zscheduler.every(options[:interval], :on_shutdown => true) do
      group.publish buffer.pull :string if buffer.new_records?
    end

  end
end

Instance Method Details

#post_initObject



35
36
37
38
# File 'lib/graphite-api-middleware.rb', line 35

def post_init
  @client_id = peername
  @logger.debug [:middleware, :connecting, client_id]
end

#receive_data(data) ⇒ Object



40
41
42
43
# File 'lib/graphite-api-middleware.rb', line 40

def receive_data data
  @logger.debug [:middleware, :message, client_id, data]
  buffer.stream data, client_id
end

#unbindObject



45
46
47
# File 'lib/graphite-api-middleware.rb', line 45

def unbind
  @logger.debug [:middleware, :disconnecting, client_id]
end