wackamole 0.0.9 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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>
|