File tree Expand file tree Collapse file tree 8 files changed +276
-63
lines changed Expand file tree Collapse file tree 8 files changed +276
-63
lines changed Original file line number Diff line number Diff line change 1
1
require 'erb'
2
2
3
3
require 'sinatra/base'
4
+ require 'mustache/sinatra'
4
5
5
6
require 'resque'
6
7
require 'resque/version'
7
8
8
9
require 'resque/server/helpers'
10
+ require 'resque/server/views/layout'
9
11
10
12
module Resque
11
13
class Server < Sinatra ::Base
14
+ register Mustache ::Sinatra
12
15
helpers Helpers
13
16
14
17
dir = File . dirname ( File . expand_path ( __FILE__ ) )
@@ -17,8 +20,20 @@ class Server < Sinatra::Base
17
20
set :public , "#{ dir } /server/public"
18
21
set :static , true
19
22
23
+ set :mustache , {
24
+ :namespace => Resque ,
25
+ :templates => "#{ dir } /server/templates" ,
26
+ :views => "#{ dir } /server/views"
27
+ }
28
+
20
29
def show ( page , layout = true )
21
- erb page . to_sym , { :layout => layout } , :resque => Resque
30
+ templates = settings . mustache [ :templates ]
31
+
32
+ if File . exists? "#{ templates } /#{ page } .mustache"
33
+ mustache page . to_sym
34
+ else
35
+ erb page . to_sym , { :layout => layout } , :resque => Resque
36
+ end
22
37
rescue Errno ::ECONNREFUSED
23
38
erb :error , { :layout => false } ,
24
39
:error => "Can't connect to Redis! (#{ Resque . redis . server } )"
Original file line number Diff line number Diff line change
1
+ <table class =' stats' >
2
+ { {# stats } }
3
+ <tr >
4
+ <th >
5
+ { { key } }
6
+ </th >
7
+ <td >
8
+ { { value } }
9
+ </td >
10
+ </tr >
11
+ { {/ stats } }
12
+ </table >
Original file line number Diff line number Diff line change
1
+ <!DOCTYPE html>
2
+ <html lang =" en" >
3
+ <head >
4
+ <meta charset =" utf-8" />
5
+ <title >Resque.</title >
6
+ { {{reset_css} }}
7
+ { {{style_css} }}
8
+ { {{jquery_js} }}
9
+ { {{relatize_js} }}
10
+ { {{ranger_js} }}
11
+ </head >
12
+ <body >
13
+ <div class =" header" >
14
+ <ul class =' nav' >
15
+ { {#tabs} }
16
+ { {{tab} }}
17
+ { {/tabs} }
18
+ </ul >
19
+ { {#custom_namespace?} }
20
+ <abbr class =" namespace" title =" Resque's Redis Namespace" >
21
+ { {namespace} }
22
+ </abbr >
23
+ { {/custom_namespace?} }
24
+ </div >
25
+
26
+ { {#any_subtabs?} }
27
+ <ul class =' subnav' >
28
+ { {#keyed_subtabs} }
29
+ <li { { { class} } } >
30
+ <a href =" { { current_section} } /{ { subtab} } " >
31
+ <span >{ {subtab} }</span >
32
+ </a >
33
+ </li >
34
+ { {/keyed_subtabs} }
35
+ </ul >
36
+ { {/any_subtabs?} }
37
+
38
+ <div id =" main" >
39
+ { {{yield} }}
40
+ </div >
41
+
42
+ <div id =" footer" >
43
+ <p >Powered by <a href =" http://github.com/defunkt/resque" >Resque</a >
44
+ v{ {version} }<%=%></p >
45
+ <p >Connected to Redis namespace { {namespace} } on { {redis_server} }</p >
46
+ </div >
47
+
48
+ </body >
49
+ </html >
Original file line number Diff line number Diff line change
1
+ <% elsif params[:id] == 'keys' %>
2
+
3
+ <h1 > Keys owned by <%= resque %> </ h1 >
4
+ < p class ='sub '> (All keys are actually prefixed with "resque:")</ p >
5
+ < table class ='stats '>
6
+ < tr >
7
+ < th > key</ th >
8
+ < th > type</ th >
9
+ < th > size</ th >
10
+ </ tr >
11
+ <% for key in resque . keys . sort %>
12
+ < tr >
13
+ < th >
14
+ < a href ="<%= u "/stats/keys/#{ key } " %> "> <%= key %> </ a >
15
+ </ th >
16
+ < td > <%= resque . redis . type key %> </ td >
17
+ < td > <%= redis_get_size key %> </ td >
18
+ </ tr >
19
+ <% end %>
20
+ </ table >
21
+
22
+ <% else %>
23
+
24
+ <% end %>
Original file line number Diff line number Diff line change
1
+ { {# resque_page? } }
2
+ <h1 >{ { resque } }</h1 >
3
+ { {> _stats_table } }
4
+ { {/ resque_page? } }
5
+
6
+ { {# redis_page? } }
7
+ <h1 >{ { redis_server } }</h1 >
8
+ { {> _stats_table } }
9
+ { {/ redis_page? } }
10
+
11
+ { {# keys_page? } }
12
+ <h1 >Keys owned by { { resque } }</h1 >
13
+ <p class =' sub' >(All keys are actually prefixed with "resque:")</p >
14
+ <table class =' stats' >
15
+ <tr >
16
+ <th >key</th >
17
+ <th >type</th >
18
+ <th >size</th >
19
+ </tr >
20
+ { {# keys } }
21
+ <tr >
22
+ <th >
23
+ <a href =" { { href } } " >{ { name } }</a >
24
+ </th >
25
+ <td >{ { type } }</td >
26
+ <td >{ { size } }</td >
27
+ </tr >
28
+ { {/ keys } }
29
+ </table >
30
+
31
+ { {/ keys_page? } }
32
+
33
+ { {# key_page? } }
34
+ { {> key_string_or_sets } }
35
+ { {/ key_page? } }
36
+
Original file line number Diff line number Diff line change
1
+ module Resque
2
+ module Views
3
+ class Layout < Mustache
4
+ include Server ::Helpers
5
+ undef_method :partial
6
+
7
+ attr_reader :params , :request
8
+
9
+ def tabs
10
+ super . map do |tab_name |
11
+ { :tab => tab ( tab_name ) }
12
+ end
13
+ end
14
+
15
+ def custom_namespace?
16
+ namespace != :resque
17
+ end
18
+
19
+ def namespace
20
+ Resque . redis . namespace
21
+ end
22
+
23
+ def version
24
+ Resque ::Version
25
+ end
26
+
27
+ def redis_server
28
+ Resque . redis . server
29
+ end
30
+
31
+ def resque
32
+ Resque
33
+ end
34
+
35
+ def any_subtabs?
36
+ keyed_subtabs . any?
37
+ end
38
+
39
+ def keyed_subtabs
40
+ Array ( subtabs ) . map do |subtab |
41
+ { :subtab => subtab , :class => class_for_subtab ( subtab ) }
42
+ end
43
+ end
44
+
45
+ def class_for_subtab ( subtab )
46
+ class_if_current "#{ current_section } /#{ subtab } "
47
+ end
48
+
49
+ def reset_css
50
+ css :reset
51
+ end
52
+
53
+ def style_css
54
+ css :style
55
+ end
56
+
57
+ def jquery_js
58
+ js "jquery-1.3.2.min"
59
+ end
60
+
61
+ def relatize_js
62
+ js "jquery.relatize_date"
63
+ end
64
+
65
+ def ranger_js
66
+ js :ranger
67
+ end
68
+
69
+ def css ( name )
70
+ '<link href="' + u ( name ) +
71
+ '.css" media="screen" rel="stylesheet" type="text/css">'
72
+ end
73
+
74
+ def js ( name )
75
+ '<script src="' + u ( name ) + '.js" type="text/javascript"></script>'
76
+ end
77
+ end
78
+ end
79
+ end
Load Diff This file was deleted.
Original file line number Diff line number Diff line change
1
+ module Resque
2
+ module Views
3
+ class Stats < Layout
4
+ def subtabs
5
+ %w( resque redis keys )
6
+ end
7
+
8
+ def redis_server
9
+ Resque . redis . server
10
+ end
11
+
12
+ def key_page?
13
+ params [ :id ] == "key"
14
+ end
15
+
16
+ def key_string_or_sets
17
+ Resque . redis . type ( params [ :key ] ) == "string" ? :key_string : :key_sets
18
+ end
19
+
20
+ def keys_page?
21
+ params [ :id ] == "keys"
22
+ end
23
+
24
+ def keys
25
+ Resque . keys . sort . map do |key |
26
+ hash = { }
27
+ hash [ :name ] = key
28
+ hash [ :href ] = u ( "/stats/keys/#{ key } " )
29
+ hash [ :type ] = resque . redis . type ( key )
30
+ hash [ :size ] = redis_get_size ( key )
31
+ hash
32
+ end
33
+ end
34
+
35
+ def resque_page?
36
+ ResqueInfo . new if params [ :id ] == "resque"
37
+ end
38
+
39
+ def redis_page?
40
+ RedisInfo . new if params [ :id ] == "redis"
41
+ end
42
+
43
+ class ResqueInfo
44
+ def stats
45
+ Resque . info . to_a . sort_by { |i | i [ 0 ] . to_s } . map do |key , value |
46
+ { :key => key , :value => value }
47
+ end
48
+ end
49
+ end
50
+
51
+ class RedisInfo
52
+ def stats
53
+ Resque . redis . info . to_a . sort_by { |i | i [ 0 ] . to_s } . map do |key , value |
54
+ { :key => key , :value => value }
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
You can’t perform that action at this time.
0 commit comments