Commit 154f3221 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

switched to rack/websocket - finally :)

parent d1fee2f7
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -18,15 +18,15 @@ Gem::Specification.new do |s|
  s.add_dependency "sinatra", ">= 1.2.6"
  s.add_dependency "redis", ">= 2.2.2"
  s.add_dependency "eventmachine"
  s.add_dependency "em-websocket"
  s.add_dependency "em-hiredis"
  s.add_dependency "websocket-rack", "0.4.0"
  s.add_dependency "em-hiredis", "0.1.1"
  s.add_dependency "json"
  s.add_dependency "i18n"
  s.add_dependency "haml"
  s.add_dependency "rack"
  s.add_dependency "rack-test"
  s.add_dependency "yajl-ruby"
  s.add_dependency "thin"
  s.add_dependency "thin", "~> 1.3.0"
  s.add_dependency "activesupport"

  s.add_development_dependency "delorean"
+3 −0
Original line number Diff line number Diff line
@@ -5,7 +5,10 @@ require "active_support/core_ext"
require 'yajl'
require 'sinatra/base'
require 'haml'
require 'json'
require "thin"
require 'rack/server'
require 'rack/websocket'

require "fnordmetric/ext"
require "fnordmetric/version"
+11 −0
Original line number Diff line number Diff line
@@ -62,3 +62,14 @@ class Array
  end

end

class Thin::Connection

  alias :pre_process_orig :pre_process

  def pre_process
    @request.env['async.connection'] = self
    pre_process_orig
  end

end
 No newline at end of file
+10 −4
Original line number Diff line number Diff line
@@ -4,17 +4,23 @@ class FnordMetric::Reactor
    @namespaces = FnordMetric.namespaces
  end

  def execute(socket, event, messages = [])
  def execute(*args)
    execute_unsafe(*args)
  rescue Exception => e
    FnordMetric.error("reactor crashed: " + e.to_s); []
  end

private

  def execute_unsafe(socket, event, messages = [])
    return false unless event["namespace"]
    return false unless ns = @namespaces[event["namespace"].to_sym]
    messages << discover(ns) if event["type"] == "discover_request"
    messages << widget(ns, event) if event["type"] == "widget_request"
    messages << gauge(ns, event) if event["type"] == "render_request"
    messages.flatten.each{ |m| socket.send(m.to_json) if m }
    messages.flatten.compact
  end

private

  def widget(namespace, event)
    "FnordMetric::#{event["klass"]}".constantize.execute(namespace, event) # FIXPAUL
  end
+12 −7
Original line number Diff line number Diff line
@@ -12,7 +12,17 @@ class FnordMetric::Web

  def initialized   
    server = @opts[:server].downcase
    app = FnordMetric::App.new(@opts)

    websocket = FnordMetric::WebSocket.new
    webapp    = FnordMetric::App.new(@opts)

    dispatch  = Rack::Builder.app do
      use Rack::CommonLogger
      use Rack::ShowExceptions

      map("/stream"){ run websocket }
      map("/"){ run webapp }
    end

    unless ["thin", "hatetepe"].include? server
      raise "Need an EventMachine webserver, but #{server} isn't"
@@ -22,16 +32,11 @@ class FnordMetric::Web
    port = @opts[:port]

    Rack::Server.start(
      :app => app,
      :app => dispatch,
      :server => server,
      :Host => host, 
      :Port => port
    ) && FnordMetric.log("listening on http://#{host}:#{port}")
        
    FnordMetric::WebSocket.new(
      :host => host, 
      :port => (port.to_i+1)
    ) && FnordMetric.log("listening on ws://#{host}:#{port.to_i+1}")
  end

end
 No newline at end of file
Loading