Skip to content

Commit

Permalink
gem init drop
Browse files Browse the repository at this point in the history
  • Loading branch information
derailed committed Jan 20, 2010
1 parent 3994f04 commit 2c2aaed
Show file tree
Hide file tree
Showing 71 changed files with 13,091 additions and 0 deletions.
77 changes: 77 additions & 0 deletions bin/wackamole
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/usr/bin/env ruby
require 'rubygems'
require 'main'

URI_MATCH = /(mongo|memcache):\/\/(.+?)\:(\d+)\/(\w+)\/{0,1}(\w*)/

Main {
option( 'pool=[pool]', 'p' ) {
validate { |pool| pool =~ URI_MATCH }
description "specify session server uri. Must be of the form {[mongo|memcache]}://{host}:{port}/{[database_name|namespace]}[/{collection_name}]"
}
environment( 'RACK_ENV' ) {
default 'production'
}

@@options = {}

# Enter main loop
def run
require File.expand_path( File.join(File.dirname(__FILE__), %w[.. lib wackamole]))

@@options = parse_args( params[:pool].value )
ENV['RACK_ENV'] = params['RACK_ENV'].value

Thread.new do
puts "-"*100
puts "Initializing Wackamole -- Version #{Wackamole::VERSION}"
puts "-"*100
puts "\n"*2
puts ">>> Waiting for Franky to warm up..."
puts "\n"*2
sleep( sleep_time )
puts "\n"*2
puts ">>> Opening console..."
puts "\n"*2
open( "http://localhost:#{default_port}/mission" )
end

# Clearing args for franky!
ARGV.clear
require 'sinatra'
require File.join(File.dirname(__FILE__), %w[.. lib app.rb])
Sinatra::Application.run! :port => default_port, :environment => 'production'
end

# default wackamole port
def default_port() 7777; end

# sleepy time...
def sleep_time() 3; end

# open console...
def open(path)
case RUBY_PLATFORM
when /darwin/
system 'open', path
when /mswin(?!ce)|mingw|cygwin|bccwin/
system 'start', path
else
system 'firefox', path
end
end

# parse uri into sub components
def parse_args( server_uri )
return unless server_uri
tokens = server_uri.match( URI_MATCH ).captures
opts = { :protocol => tokens.first, :host => tokens[1], :port => tokens[2] }
if opts[:protocol] == "mongo"
opts[:db_name] = tokens[3]
opts[:cltn_name] = tokens[4]
else
opts[:namespace] = tokens[3]
end
opts
end
}
63 changes: 63 additions & 0 deletions lib/app.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
require 'rubygems'
require 'sinatra'
require 'forwardable'
require 'mongo'
gem 'agnostic-will_paginate'
require 'will_paginate'
require 'mongo_rack'
require 'rackamole'
require File.expand_path( File.join( File.dirname(__FILE__), 'wackamole.rb' ) )

set :public, File.join( File.dirname(__FILE__), %w[.. public] )
set :views , File.join( File.dirname(__FILE__), %w[.. views] )

def default_config
File.join( ENV['HOME'], %w[.wackamole wackamole.yml] )
end

# -----------------------------------------------------------------------------
# Configurations

configure :production do
set :logging, false
end

configure do
set :sessions, false

Wackamole.load_all_libs_relative_to(__FILE__, 'helpers' )
Wackamole.load_all_libs_relative_to(__FILE__, 'controllers' )

#Pick up command line args if any?
if defined? @@options and @@options
if @@options[:protocol] == 'mongo'
use Rack::Session::Mongo,
:server => "%s:%d/%s/%s" % [@@options[:host], @@options[:port], @@options[:db_name], @@options[:cltn_name]]
else
use Rack::Session::Memcache,
:memcache_server => "%s:%d" % [@@options[:host], @@options[:port]],
:namespace => @@options[:namespace]
end
else
# Default is a mongo session store
use Rack::Session::Mongo, :server => "%s:%d/%s/%s" % ['localhost', '27017', 'wackamole_ses', 'sessions']
end
set :con, Wackamole::Control.init_config( default_config, Sinatra::Application.environment.to_s )
end

# -----------------------------------------------------------------------------
# Before filters
before do
unless request.path =~ /\.[css gif png js]/
@filter = session[:filter]
unless @filter
@filter = Wackamole::SearchFilter.new
session[:filter] = @filter
end
@updated_on = Time.now
@refresh_rate = 15

@app_info = session[:app_info]
Wackamole::Control.switch_mole_db!( @app_info[:app_name].downcase, @app_info[:stage] ) if @app_info
end
end
30 changes: 30 additions & 0 deletions lib/controllers/dashboard.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
require 'chronic'
require 'json'

module Dashboard

# ---------------------------------------------------------------------------
# Show application dashboard
get '/dashboard/:app_name/:stage' do
Wackamole::Control.switch_mole_db!( params[:app_name].downcase, params[:stage] )

ensure_indexes!
load_app_details

# Reset app info
load_app_info

# Reset filters
@filter.reset!

erb :'dashboard/index'
end

# ---------------------------------------------------------------------------
# Refresh dashboard
get '/dashboard/refresh' do
load_app_details
erb :'dashboard/refresh_js', :layout => false
end

end
41 changes: 41 additions & 0 deletions lib/controllers/features.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
module Features

# ---------------------------------------------------------------------------
# paginate top features
get "/features/:page" do
page = params[:page] ? params[:page].to_i : 1

@features = Wackamole::Feature.paginate_tops( @filter.to_conds, page )
@search_path = "/features/search"
@filter_path = "/features/filter"

if request.xhr?
erb :'features/index.js', :layout => false
else
erb :'features/index'
end
end

# ---------------------------------------------------------------------------
# Search - must specify a context ie ses: fred
post "/features/search" do
begin
@filter.search_terms = params[:search_filter][:search_terms]
@features = Wackamole::Feature.paginate_tops( @filter.to_conds )
rescue => boom
logger.error boom
flash[:error] = boom
@features = [].paginate
end

erb :"features/filter.js", :layout => false
end

# ---------------------------------------------------------------------------
# Filter
post "/features/filter" do
@filter.from_options( params[:filter] )
@features = Wackamole::Feature.paginate_tops( @filter.to_conds )
erb :"features/filter.js", :layout => false
end
end
49 changes: 49 additions & 0 deletions lib/controllers/logs.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
module Logs

# ---------------------------------------------------------------------------
get "/logs/:page" do
page = params[:page] ? params[:page].to_i : 1

@logs = Wackamole::Log.paginate( @filter.to_conds, page)
@search_path = "/logs/search"
@filter_path = "/logs/filter"

if request.xhr?
erb :'logs/index.js', :layout => false
else
erb :'logs/index'
end
end

# ---------------------------------------------------------------------------
# Search logs - must specify a context ie ses: fred
post "/logs/search" do
begin
@filter.search_terms = params[:search_filter][:search_terms]
@logs = Wackamole::Log.paginate( @filter.to_conds )
rescue => boom
puts boom
flash_it!( :error, boom )
@logs = [].paginate
end

erb :"logs/filter.js", :layout => false
end

# ---------------------------------------------------------------------------
# Fecth info about a particular log
get "/logs/:id/show" do
@log = Wackamole::Log.find_one( Mongo::ObjectID.from_string( params[:id] ) )
erb :"logs/show", :layout => false
end

# ---------------------------------------------------------------------------
# Filter logs
post "/logs/filter" do
@filter = Wackamole::SearchFilter.new
@filter.from_options( params[:filter] )
session[:filter] = @filter
@logs = Wackamole::Log.paginate( @filter.to_conds )
erb :"logs/filter.js", :layout => false
end
end
27 changes: 27 additions & 0 deletions lib/controllers/mission.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require 'chronic'

module Mission

# ---------------------------------------------------------------------------
get '/mission' do
# reset app info
session[:app_info] = @app_info = nil

load_report
erb :'mission/index'
end

# ---------------------------------------------------------------------------
get '/mission/refresh' do
load_report
erb :'/mission/refresh_js', :layout => false
end

# ---------------------------------------------------------------------------
get '/mission/fixed/:app/:env/:type' do
Wackamole::Mission.reset!( params[:app], params[:env], params[:type] )
load_report
erb :'/mission/refresh_js', :layout => false
end

end
41 changes: 41 additions & 0 deletions lib/controllers/users.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
module Users

# ---------------------------------------------------------------------------
# Paginate top users
get "/users/:page" do
page = params[:page] ? params[:page].to_i : 1

@users = Wackamole::User.paginate_tops( @filter.to_conds, page )
@search_path = "/users/search"
@filter_path = "/users/filter"

if request.xhr?
erb :'users/index.js', :layout => false
else
erb :'users/index'
end
end

# ---------------------------------------------------------------------------
# search users
post "/users/search" do
begin
@filter.search_terms = params[:search_filter][:search_terms]
@users = Wackamole::User.paginate_tops( @filter.to_conds )
rescue => boom
logger.error boom
flash[:error] = boom
@users = [].paginate
end

erb :"users/filter.js", :layout => false
end

# ---------------------------------------------------------------------------
# Filter
post "/users/filter" do
@filter.from_options( params[:filter] )
@users = Wackamole::User.paginate_tops( @filter.to_conds )
erb :"users/filter.js", :layout => false
end
end
32 changes: 32 additions & 0 deletions lib/helpers/dashboard_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
module DashboardHelper

helpers do

# -------------------------------------------------------------------------
# Make sure all indexes are set
def ensure_indexes!
Wackamole::Log.ensure_indexes!
Wackamole::User.ensure_indexes!
Wackamole::Feature.ensure_indexes!
end

# -------------------------------------------------------------------------
# Retrieve moled app info...
def load_app_info
@app_info = Wackamole::Feature.get_app_info
session[:app_info] = @app_info
end

# -------------------------------------------------------------------------
# Loads the application details
def load_app_details
@info = Wackamole::MoledInfo.collect_dashboard_info( @updated_on.clone.utc )
end

# -------------------------------------------------------------------------
# Check for zeroed out series...
def zeroed_series?( series )
series.inject(0) { |res, s| res + s } == 0
end
end
end
13 changes: 13 additions & 0 deletions lib/helpers/features_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module FeaturesHelper

helpers do
# ---------------------------------------------------------------------------
# Find feature context for log entry
def display_context( feature )
if feature['ctl']
return "#{feature['ctl']}##{feature['act']}"
end
feature['ctx']
end
end
end
Loading

0 comments on commit 2c2aaed

Please sign in to comment.