-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
71 changed files
with
13,091 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Oops, something went wrong.