wackamole 0.0.9 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -1
- data/README.rdoc +17 -17
- data/Rakefile +1 -1
- data/bin/wackamole +5 -3
- data/lib/app.rb +13 -13
- data/lib/controllers/dashboard.rb +7 -2
- data/lib/controllers/features.rb +1 -1
- data/lib/controllers/logs.rb +20 -1
- data/lib/controllers/mission.rb +7 -8
- data/lib/controllers/session.rb +0 -1
- data/lib/controllers/users.rb +5 -1
- data/lib/helpers/dashboard_helper.rb +7 -2
- data/lib/helpers/flash_helper.rb +0 -1
- data/lib/helpers/main_helper.rb +6 -0
- data/lib/helpers/session_helper.rb +9 -6
- data/lib/wackamole.rb +1 -1
- data/lib/wackamole/models/control.rb +58 -31
- data/lib/wackamole/models/feature.rb +1 -1
- data/lib/wackamole/models/log.rb +1 -2
- data/lib/wackamole/models/mission.rb +49 -46
- data/lib/wackamole/models/mole_info.rb +4 -5
- data/lib/wackamole/models/search_filter.rb +2 -2
- data/lib/wackamole/models/user.rb +1 -1
- data/public/stylesheets/wackamole.css +41 -14
- data/spec/config/test.yml +4 -3
- data/spec/data/fixtures.rb +92 -92
- data/spec/spec_helper.rb +2 -1
- data/spec/wackamole/models/control_spec.rb +27 -33
- data/spec/wackamole/models/feature_spec.rb +19 -20
- data/spec/wackamole/models/log_spec.rb +2 -3
- data/spec/wackamole/models/mission_spec.rb +16 -18
- data/spec/wackamole/models/moled_info_spec.rb +9 -10
- data/spec/wackamole/models/search_filter_spec.rb +4 -5
- data/spec/wackamole/models/user_spec.rb +2 -3
- data/views/features/_rows.erb +1 -1
- data/views/layout.erb +18 -26
- data/views/logs/show.erb +6 -4
- data/views/mission/_report.erb +39 -39
- data/views/users/_rows.erb +2 -2
- metadata +11 -11
data/spec/spec_helper.rb
CHANGED
@@ -12,6 +12,7 @@ require File.expand_path( File.join(File.dirname(__FILE__), %w[data fixtures]))
|
|
12
12
|
require File.expand_path( File.join(File.dirname(__FILE__), %w[.. lib wackamole]))
|
13
13
|
|
14
14
|
# BOZO !! To run test you'll need to start a mongo instance
|
15
|
-
#
|
15
|
+
# BOZO !! Rake task pleeease!!
|
16
|
+
# mongod --dbpath /data/wackamole/ --port 27099
|
16
17
|
Spec::Runner.configure do |config|
|
17
18
|
end
|
@@ -7,46 +7,40 @@ describe Wackamole::Control do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should raise an error if not correctly initialized" do
|
10
|
-
lambda{ Wackamole::Control.connection }.should raise_error( /You must call init_config/ )
|
10
|
+
lambda{ Wackamole::Control.connection( "Fred" ) }.should raise_error( /You must call init_config/ )
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should raise an error if invalid config file" do
|
14
14
|
config_file = File.join(File.dirname(__FILE__), %w[.. .. config blee.yml])
|
15
15
|
lambda {
|
16
|
-
Wackamole::Control.init_config( config_file
|
16
|
+
Wackamole::Control.init_config( config_file )
|
17
17
|
}.should raise_error( /Hoy! An error occur loading the config file `#{config_file} -- No such file or directory/ )
|
18
18
|
end
|
19
|
-
|
20
|
-
it "should raise an error if a bogus env is requested" do
|
21
|
-
config_file = File.join(File.dirname(__FILE__), %w[.. .. config test.yml])
|
22
|
-
lambda {
|
23
|
-
Wackamole::Control.init_config( config_file, 'production' )
|
24
|
-
}.should raise_error( /Hoy! An error occur loading the config file `#{config_file} -- Invalid environment `production/ )
|
25
|
-
end
|
26
|
-
|
19
|
+
|
27
20
|
it "should raise an error if invalid config file content" do
|
28
21
|
config_file = File.join(File.dirname(__FILE__), %w[.. .. config bogus_test.yml])
|
29
22
|
lambda {
|
30
|
-
Wackamole::Control.init_config( config_file
|
31
|
-
}.should raise_error( /Hoy! An error occur loading the config file `#{config_file} -- Unable to find
|
23
|
+
Wackamole::Control.init_config( config_file )
|
24
|
+
}.should raise_error( /Hoy! An error occur loading the config file `#{config_file} -- Unable to find zones definition/ )
|
32
25
|
end
|
33
26
|
end
|
34
27
|
|
35
28
|
describe 'connection' do
|
36
29
|
before :all do
|
37
30
|
Wackamole::Control.reset!
|
38
|
-
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml])
|
39
|
-
Wackamole::Control.connection.should_not be_nil
|
31
|
+
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml]) )
|
32
|
+
Wackamole::Control.connection( 'test' ).should_not be_nil
|
40
33
|
end
|
41
34
|
|
42
35
|
describe "#collection" do
|
43
36
|
it "should find a collection correctly" do
|
44
|
-
|
37
|
+
Wackamole::Control.current_db( 'test', 'app1', 'test' )
|
38
|
+
cltn = Wackamole::Control.collection( 'features' )
|
45
39
|
cltn.count.should == 6
|
46
40
|
feature = cltn.find_one()
|
47
41
|
feature['app'].should == "app1"
|
48
42
|
feature['env'].should == "test"
|
49
|
-
feature['did'].should == Time.now.
|
43
|
+
feature['did'].should == Time.now.to_date_id.to_s
|
50
44
|
feature['ctx'].should match( /\// )
|
51
45
|
end
|
52
46
|
end
|
@@ -54,7 +48,7 @@ describe Wackamole::Control do
|
|
54
48
|
describe "mole databases" do
|
55
49
|
it "should correctly identify mole dbs" do
|
56
50
|
# gen_bogus_dbs
|
57
|
-
mole_dbs = Wackamole::Control.mole_databases
|
51
|
+
mole_dbs = Wackamole::Control.mole_databases( 'test' )
|
58
52
|
mole_dbs.should have(2).items
|
59
53
|
end
|
60
54
|
|
@@ -70,29 +64,29 @@ describe Wackamole::Control do
|
|
70
64
|
|
71
65
|
it "should connect to a mole databases correctly" do
|
72
66
|
%w[app1 app2].each do |app|
|
73
|
-
Wackamole::Control.
|
67
|
+
Wackamole::Control.current_db( "test", app, "test", true )
|
74
68
|
feature = Wackamole::Control.collection( 'features' ).find_one()
|
75
69
|
feature['app'].should == app
|
76
70
|
feature['env'].should == "test"
|
77
71
|
end
|
78
72
|
end
|
79
73
|
|
80
|
-
it "should switch mole dbs correctly" do
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should fail to switch if there is no mole db" do
|
90
|
-
lambda{ Wackamole::Control.switch_mole_db!( "blee", "test" ) }.should raise_error( /Invalid mole database mole_blee_test_mdb/ )
|
91
|
-
end
|
74
|
+
# it "should switch mole dbs correctly" do
|
75
|
+
# %w[app1 app2].each do |app|
|
76
|
+
# Wackamole::Control.switch_mole_db!( app, "test" )
|
77
|
+
# feature = Wackamole::Control.collection( 'features' ).find_one()
|
78
|
+
# feature['app'].should == app
|
79
|
+
# feature['env'].should == "test"
|
80
|
+
# end
|
81
|
+
# end
|
92
82
|
|
93
|
-
it "should fail to switch
|
94
|
-
|
95
|
-
end
|
83
|
+
# it "should fail to switch if there is no mole db" do
|
84
|
+
# lambda{ Wackamole::Control.switch_mole_db!( "blee", "test" ) }.should raise_error( /Invalid mole database mole_blee_test_mdb/ )
|
85
|
+
# end
|
86
|
+
#
|
87
|
+
# it "should fail to switch for an invalid mole db" do
|
88
|
+
# lambda{ Wackamole::Control.switch_mole_db!( "zorg", "missing" ) }.should raise_error( /Invalid mole database mole_zorg_missing_mdb/ )
|
89
|
+
# end
|
96
90
|
end
|
97
91
|
end
|
98
92
|
end
|
@@ -3,9 +3,8 @@ require 'chronic'
|
|
3
3
|
|
4
4
|
describe Wackamole::Feature do
|
5
5
|
before( :all ) do
|
6
|
-
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml])
|
7
|
-
Wackamole::Control.
|
8
|
-
Wackamole::Control.db( "mole_app1_test_mdb" )
|
6
|
+
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml]) )
|
7
|
+
Wackamole::Control.current_db( "test", "app1", "test", true )
|
9
8
|
end
|
10
9
|
|
11
10
|
it "retrieve an app info correctly" do
|
@@ -30,23 +29,23 @@ describe Wackamole::Feature do
|
|
30
29
|
@cltn.drop_indexes
|
31
30
|
end
|
32
31
|
|
33
|
-
it "should set up indexes correctly" do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should do nothing if indexes are already present" do
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
32
|
+
# it "should set up indexes correctly" do
|
33
|
+
# indexes = @cltn.index_information
|
34
|
+
# indexes.should have(1).item
|
35
|
+
# count = Wackamole::Feature.ensure_indexes!
|
36
|
+
# count.should == 3
|
37
|
+
# indexes = @cltn.index_information
|
38
|
+
# indexes.should have(3).items
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# it "should do nothing if indexes are already present" do
|
42
|
+
# indexes = @cltn.index_information
|
43
|
+
# indexes.should have(3).items
|
44
|
+
# count = Wackamole::Feature.ensure_indexes!
|
45
|
+
# count.should == 1
|
46
|
+
# indexes = @cltn.index_information
|
47
|
+
# indexes.should have(3).items
|
48
|
+
# end
|
50
49
|
end
|
51
50
|
|
52
51
|
end
|
@@ -3,9 +3,8 @@ require 'chronic'
|
|
3
3
|
|
4
4
|
describe Wackamole::Log do
|
5
5
|
before( :all ) do
|
6
|
-
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml])
|
7
|
-
Wackamole::Control.
|
8
|
-
Wackamole::Control.db( "mole_app1_test_mdb" )
|
6
|
+
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml]) )
|
7
|
+
Wackamole::Control.current_db( "test", "app1", "test", true )
|
9
8
|
end
|
10
9
|
|
11
10
|
it "should paginate logs correctly" do
|
@@ -3,11 +3,10 @@ require 'chronic'
|
|
3
3
|
|
4
4
|
describe Wackamole::Mission do
|
5
5
|
before :all do
|
6
|
-
Wackamole::Control.
|
7
|
-
Wackamole::Control.
|
8
|
-
|
9
|
-
|
10
|
-
@test_time = Chronic.parse( "%d/%2d/%2d 17:00:00" % [now.year,now.month,now.day] )
|
6
|
+
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml]) )
|
7
|
+
Wackamole::Control.current_db( "test", "app1", "test", true )
|
8
|
+
now = Time.now-24*60*60
|
9
|
+
@test_time = Chronic.parse( "%d/%2d/%2d 00:00:01" % [now.year,now.month,now.day] )
|
11
10
|
# @test_time = Chronic.parse( "2010/01/01 01:00:00" ).utc
|
12
11
|
end
|
13
12
|
|
@@ -27,24 +26,23 @@ describe Wackamole::Mission do
|
|
27
26
|
end
|
28
27
|
|
29
28
|
it "should pick up an app pulse correctly" do
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
expected = {'to_date' => [7,5,3], 'today' => [6,4,2] }
|
29
|
+
zones = Wackamole::Mission.pulse( @test_time )
|
30
|
+
zones.should have(1).items
|
31
|
+
apps = zones['test']
|
32
|
+
apps.should have(2).items
|
33
|
+
expected = {'to_date' => [7,5,3], 'today' => [3,2,1] }
|
36
34
|
%w(to_date today).each do |p|
|
37
35
|
%w(app1 app2).each do |app|
|
38
36
|
[0, 1, 2].each do |type|
|
39
|
-
|
37
|
+
zones['test'][app]['test'][p.to_sym][type].should == expected[p][type]
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
43
|
-
%w(app1 app2).each do |app|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
41
|
+
# %w(app1 app2).each do |app|
|
42
|
+
# expected = [3,2,1]
|
43
|
+
# [0, 1, 2].each do |type|
|
44
|
+
# pulse[:last_tick][app]["test"][type].should == expected[type]
|
45
|
+
# end
|
46
|
+
# end
|
49
47
|
end
|
50
48
|
end
|
@@ -3,16 +3,15 @@ require 'chronic'
|
|
3
3
|
|
4
4
|
describe Wackamole::MoledInfo do
|
5
5
|
before( :all ) do
|
6
|
-
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml])
|
7
|
-
Wackamole::Control.
|
8
|
-
|
9
|
-
|
10
|
-
@test_time = Chronic.parse( "%d/%2d/%2d 17:00:00" % [now.year,now.month,now.day] )
|
6
|
+
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml]) )
|
7
|
+
Wackamole::Control.current_db( "test", "app1", "test", true )
|
8
|
+
now = Time.now-24*60*60
|
9
|
+
@test_time = Chronic.parse( "%d/%2d/%2d 18:00:01" % [now.year,now.month,now.day] )
|
11
10
|
end
|
12
11
|
|
13
12
|
it "should gather dashboard info correctly" do
|
14
13
|
info = Wackamole::MoledInfo.collect_dashboard_info( @test_time )
|
15
|
-
|
14
|
+
|
16
15
|
info[:total_users].should == 5
|
17
16
|
info[:user_load].should == 2
|
18
17
|
info[:total_features].should == 6
|
@@ -20,10 +19,10 @@ describe Wackamole::MoledInfo do
|
|
20
19
|
info[:fault_load].should == 1
|
21
20
|
info[:perf_load].should == 2
|
22
21
|
|
23
|
-
info[:user_series].should == series_for( [[
|
24
|
-
info[:feature_series].should == series_for( [[
|
25
|
-
info[:fault_series].should == series_for( [[
|
26
|
-
info[:perf_series].should == series_for( [[
|
22
|
+
info[:user_series].should == series_for( [[18,2]] )
|
23
|
+
info[:feature_series].should == series_for( [[18,2]] )
|
24
|
+
info[:fault_series].should == series_for( [[18,1]] )
|
25
|
+
info[:perf_series].should == series_for( [[18,2]] )
|
27
26
|
end
|
28
27
|
|
29
28
|
def series_for( slots )
|
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
|
3
3
|
describe Wackamole::SearchFilter do
|
4
4
|
before( :each ) do
|
5
5
|
@filter = Wackamole::SearchFilter.new
|
6
|
-
now = Time.now
|
6
|
+
now = Time.now
|
7
7
|
@test_time = Chronic.parse( "%d/%2d/%2d 17:00:00" % [now.year,now.month,now.day] )
|
8
8
|
end
|
9
9
|
|
@@ -67,7 +67,7 @@ describe Wackamole::SearchFilter do
|
|
67
67
|
conds = @filter.to_conds
|
68
68
|
conds.should have(1).item
|
69
69
|
conds.key?( '$where' ).should == true
|
70
|
-
conds['$where'].should == "((this.did == '#{@test_time.to_date_id}' && this.tid >= '
|
70
|
+
conds['$where'].should == "((this.did == '#{@test_time.to_date_id}' && this.tid >= '060001') || ( this.did == '#{(@test_time+24*60*60).to_date_id}' && this.tid <= '055959') )"
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should include browser if specified correctly" do
|
@@ -98,9 +98,8 @@ describe Wackamole::SearchFilter do
|
|
98
98
|
|
99
99
|
describe "search terms" do
|
100
100
|
before( :all ) do
|
101
|
-
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml])
|
102
|
-
Wackamole::Control.
|
103
|
-
Wackamole::Control.db( "mole_app1_test_mdb" )
|
101
|
+
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml]) )
|
102
|
+
Wackamole::Control.current_db( "test", "app1", "test", true )
|
104
103
|
end
|
105
104
|
|
106
105
|
it "should retrieve features correctly" do
|
@@ -3,9 +3,8 @@ require 'chronic'
|
|
3
3
|
|
4
4
|
describe Wackamole::User do
|
5
5
|
before( :all ) do
|
6
|
-
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml])
|
7
|
-
Wackamole::Control.
|
8
|
-
Wackamole::Control.db( "mole_app1_test_mdb" )
|
6
|
+
Wackamole::Control.init_config( File.join(File.dirname(__FILE__), %w[.. .. config test.yml]) )
|
7
|
+
Wackamole::Control.current_db( "test", "app1", "test", true )
|
9
8
|
end
|
10
9
|
|
11
10
|
it "should paginate a user collection correctly" do
|
data/views/features/_rows.erb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
<% count=0;@features.each do |row| %>
|
15
15
|
<% color = count % 2 == 0 ? 'transparent' : 'transparent url(/images/fade.png) repeat-x' %>
|
16
16
|
<tr style="background:<%=color%>">
|
17
|
-
<td
|
17
|
+
<td><%=link_to display_context( row[:name] ), "/logs/feature/#{row[:fid]}", :class => 'nav_link'%></td>
|
18
18
|
<td align="right"><b><%=row[:total]%></b></td>
|
19
19
|
</tr>
|
20
20
|
<% count+=1;end %>
|
data/views/layout.erb
CHANGED
@@ -9,54 +9,46 @@
|
|
9
9
|
<%= javascripts %w[jquery_min jquery_ui_min] %>
|
10
10
|
</head>
|
11
11
|
|
12
|
-
<style>
|
13
|
-
span#version {
|
14
|
-
position: relative;
|
15
|
-
top: -12px;
|
16
|
-
left: 32px;
|
17
|
-
font-weight: bold;
|
18
|
-
color: #316071;
|
19
|
-
}
|
20
|
-
a.logout {
|
21
|
-
font-size: 0.8em;
|
22
|
-
}
|
23
|
-
</style>
|
24
12
|
<body id="body">
|
25
13
|
<div id="overall">
|
26
14
|
<div id="logo">
|
27
15
|
<span id="version"><%=Wackamole.version%></span>
|
28
16
|
<%= link_to image_tag( 'wackamole_logo.png', :border => 0 ), '/mission' %>
|
29
17
|
</div>
|
30
|
-
<div id="
|
18
|
+
<div id="links">
|
31
19
|
<% if console_auth? and !root_path? %>
|
32
20
|
<%= link_to "log out", "/session/delete", :class => "site_link logout" %>
|
33
21
|
<% end %>
|
34
22
|
|
35
|
-
<% if @app_info %>
|
36
|
-
<ul>
|
37
|
-
<li>«<span><%=@app_info[:app_name]%></span>»</li>
|
38
|
-
<li id="env"><%=@app_info[:stage]%></li>
|
39
|
-
<ul>
|
40
|
-
<% end %>
|
41
23
|
<% unless root_path? %>
|
42
24
|
<p><span id="timestamp"><%=partial :'shared/timestamp'%></span></p>
|
43
25
|
<% end %>
|
26
|
+
|
27
|
+
<% if @app_info and authenticated? %>
|
28
|
+
<ul id="app_info">
|
29
|
+
<li>zone<span class="zone"><%=@app_info[:zone]%></span></li>
|
30
|
+
<li><span class="app"><%=@app_info[:app]%></span><span class="stage"><%=@app_info[:stage]%></span></li>
|
31
|
+
</ul>
|
32
|
+
<% end %>
|
44
33
|
</div>
|
45
34
|
<div id="main">
|
46
35
|
<div class="flash"></div>
|
47
36
|
|
48
|
-
<% if @app_info %>
|
37
|
+
<% if @app_info and authenticated? %>
|
49
38
|
<div id='navigation' class='corners'>
|
50
39
|
<% unless Wackamole::Control.single_app? %>
|
51
40
|
<%=link_to "mission control", "/mission", :class => "site_link land" %> •
|
52
41
|
<% end %>
|
53
|
-
<%=link_to "dashboard"
|
54
|
-
|
55
|
-
<%=link_to "
|
56
|
-
|
42
|
+
<%=link_to "dashboard", "/dashboard/#{@app_info[:zone]}/#{@app_info[:app]}/#{@app_info[:stage]}",
|
43
|
+
:class => "site_link dash" %> •
|
44
|
+
<%=link_to "logs", "/logs/1",
|
45
|
+
:class => "site_link logs" %> •
|
46
|
+
<%=link_to "features", "/features/1",
|
47
|
+
:class => "site_link features" %> •
|
48
|
+
<%=link_to "users", "/users/1",
|
49
|
+
:class => "site_link users" %>
|
57
50
|
</div>
|
58
|
-
<% end %>
|
59
|
-
|
51
|
+
<% end %>
|
60
52
|
<%= yield %>
|
61
53
|
</div>
|
62
54
|
|
data/views/logs/show.erb
CHANGED
@@ -13,6 +13,12 @@
|
|
13
13
|
<td><%=@log['pat']%></td>
|
14
14
|
</tr>
|
15
15
|
<% end %>
|
16
|
+
<% if @log['msg'] %>
|
17
|
+
<tr>
|
18
|
+
<td class="label" valign="top">Error</td>
|
19
|
+
<td><%=truncate( @log['msg'], 300 )%></td>
|
20
|
+
</tr>
|
21
|
+
<% end %>
|
16
22
|
<tr>
|
17
23
|
<td class="label">User</td>
|
18
24
|
<td><%=user_name_for( {}, @log['uid'] ) %></td>
|
@@ -55,10 +61,6 @@
|
|
55
61
|
</tr>
|
56
62
|
<% end %>
|
57
63
|
<% if @log['msg'] %>
|
58
|
-
<tr>
|
59
|
-
<td class="label" valign="top">Error</td>
|
60
|
-
<td><%=truncate( @log['msg'], 300 )%></td>
|
61
|
-
</tr>
|
62
64
|
<tr>
|
63
65
|
<td class="label" valign="top">Stack [<%=@log['sta'].size%>]</td>
|
64
66
|
<td><%=partial :'logs/array', :object => @log['sta']%></td>
|
data/views/mission/_report.erb
CHANGED
@@ -1,54 +1,54 @@
|
|
1
|
-
<%
|
2
|
-
<% if applications.empty? == 0 %>
|
1
|
+
<% if @zones.empty? == 0 %>
|
3
2
|
<div class="doh">
|
4
|
-
<p>Unable to
|
5
|
-
<p>Make sure you moled database follows this naming convention</p>
|
6
|
-
<p>mole_{<i>application name in lower case</i>}_{<i>environment</i>}_mdb</p>
|
3
|
+
<p>Unable to locate zone information please double check your zones file in ~/.wackamole/zones.yml/p>
|
7
4
|
</div>
|
8
5
|
<% else %>
|
9
6
|
<table class="logs" id="mission">
|
10
7
|
<thead>
|
11
|
-
<tr>
|
12
|
-
<th width="
|
13
|
-
<th width="10%">
|
8
|
+
<tr>
|
9
|
+
<th width="20%">application</th>
|
10
|
+
<th width="10%">zone</th>
|
11
|
+
<th width="10%">env</th>
|
14
12
|
<th width="20%">to date</th>
|
15
13
|
<th width="20%">today</th>
|
16
14
|
<th width="20%">last tick</th>
|
17
15
|
</tr>
|
18
16
|
</thead>
|
19
17
|
<tbody>
|
20
|
-
<%
|
21
|
-
<%
|
22
|
-
|
23
|
-
<
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
<
|
29
|
-
<
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
<
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
18
|
+
<% @zones.each_pair do |zone, app_info| %>
|
19
|
+
<% app_info.each_pair do |app_name, env_info| %>
|
20
|
+
<% env_info.each_pair do |env_name, totals| %>
|
21
|
+
<tr class="app_info" id="<%=zone%>" >
|
22
|
+
<td valign="top"><%= link_to app_name, "/dashboard/#{zone}/#{app_name}/#{env_name}", :class => 'site_link' %></td>
|
23
|
+
<td valign="top"><%= zone %></td>
|
24
|
+
<td valign="top"><%= env_name %></td>
|
25
|
+
<% %w(to_date today last_tick).each do |period| %>
|
26
|
+
<td>
|
27
|
+
<table border="0" width="100%">
|
28
|
+
<tbody>
|
29
|
+
<% totals[period.to_sym].each_pair do |type, count| %>
|
30
|
+
<tr>
|
31
|
+
<% clazz = ( (count > 0 and %w(last_tick today).include?(period)) ? assign_class( type, count ) : nil) %>
|
32
|
+
<td width="25px">
|
33
|
+
<% if( %w(last_tick today).include?( period ) and count > 0 ) %>
|
34
|
+
<%= link_to Wackamole::Mission.to_type_name(type), "/mission/logs/#{zone}/#{app_name}/#{env_name}/#{type}", :class => "site_link", :id => "#{app_name}_#{env}_#{type}" %>:
|
35
|
+
<% else %>
|
36
|
+
<%=Wackamole::Mission.to_type_name(type)%>:
|
37
|
+
<% end %>
|
38
|
+
</td>
|
39
|
+
<td align='right'>
|
40
|
+
<span class="<%= (clazz and count > 0 ? "#{period}_#{clazz}" : '') %>">
|
41
|
+
<%= format_number(count) %>
|
42
|
+
</span>
|
43
|
+
</td>
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
</tbody>
|
47
|
+
</table>
|
48
|
+
</td>
|
50
49
|
<% end %>
|
51
|
-
|
50
|
+
</tr>
|
51
|
+
<% end %>
|
52
52
|
<% end %>
|
53
53
|
<% end %>
|
54
54
|
</tbody>
|