Abstract Analyzer

This is a Rack based analyzer. The idea is to use different methods and libraries to track requests on Rack app and report those back in some simple views.

I’m starting with a Fiveruns Dash analyzer that reports to a MongoDB instance. Reporting actually be it’s own small Rack app and for the time being, will mostly text based.

Requirements

I hope to trim this down, but for now…

gems:

  • mongodb-mongo

  • fiveruns-dash-ruby

  • usher

  • ruport

In addition for the tests to pass, you need mongod running on localhost:27017

Implementation

You can use the DashAnalyzer with any rack app you’d like. Check the tests for an example.

Rails

If Rails is your bag, I’ve included a middleware implementation of the DashAnalyzer. Implementing is pretty easy.

First, require the gem in RAILS_ROOT/config/environment.rb:

Rails::Initializer.run do |config|
  # .....
  config.gem 'abstract_analyzer', :version => '>0.1.0'
  # .....
end

Second, in RAILS_ROOT/config/initializers/middlewares.rb

# Setup the Analyzer DB
abstract_analyzer_db = Mongo::Connection.new('localhost', 27017).db('aa-rails-dash-analyzer-db')
AbstractAnalyzer.const_set("DB", abstract_analyzer_db)

# Setup the Analyzer LOGGER
abstract_logger = Logger.new("#{RAILS_ROOT}/log/abstract_analyzer_logger.log")
AbstractAnalyzer.const_set("LOGGER", abstract_logger)

# Use the Analyzer and View middlewares
ActionController::Dispatcher.middleware.use AbstractAnalyzer::Middleware::Rails::Dash::Analyzer
ActionController::Dispatcher.middleware.use AbstractAnalyzer::Middleware::Rails::Dash::View

Third, make sure you actually have a mongo db running on localhost:27017 or change the connection accordingly ;)

Todo

  • Basic html views

  • Implementing reports for Non-time based metrics

  • Non-Rails middlewares?

  • Non-Dash implementations?

Props

  • Carl Lerche and Yehuda Katz for their Extending Rails training at the Lone Star Ruby Conference that planted this seed

  • The company formally known as Fiveruns for open sourcing their reporter gems

  • Adam Keys for explaining how the Dash gems work

  • The guys a SqueeJee for saying MongoDB enough times to make me try it in something

License

See LICENSE