nutcracker-web 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +4 -13
- data/Rakefile +33 -7
- data/lib/nutcracker/web.rb +6 -6
- data/lib/nutcracker/web/app.rb +10 -8
- data/lib/nutcracker/web/version.rb +1 -1
- data/{assets/stylesheets/bootstrap.css → public/assets/application.css} +1136 -0
- data/public/assets/application.js +263 -0
- metadata +59 -32
- data/assets/javascripts/application.js +0 -10
- data/assets/javascripts/collections/clusters.js.coffee +0 -4
- data/assets/javascripts/collections/nodes.js.coffee +0 -19
- data/assets/javascripts/models/cluster.js.coffee +0 -16
- data/assets/javascripts/models/node.js.coffee +0 -14
- data/assets/javascripts/models/overview.js.coffee +0 -27
- data/assets/javascripts/nutcracker.js.coffee +0 -20
- data/assets/javascripts/routers/nutcracker_router.js.coffee +0 -29
- data/assets/javascripts/utils/region_manager.js.coffee +0 -12
- data/assets/javascripts/utils/underscore_ext.js.coffee +0 -6
- data/assets/javascripts/vendor/backbone.js +0 -1571
- data/assets/javascripts/vendor/bootstrap.js +0 -2276
- data/assets/javascripts/vendor/google_chart.js.coffee +0 -124
- data/assets/javascripts/vendor/humanize.js +0 -459
- data/assets/javascripts/vendor/jquery.js +0 -8842
- data/assets/javascripts/vendor/underscore.js +0 -1227
- data/assets/javascripts/views/cluster.js.coffee +0 -58
- data/assets/javascripts/views/config.js.coffee +0 -6
- data/assets/javascripts/views/footer.js.coffee +0 -8
- data/assets/javascripts/views/navbar.js.coffee +0 -28
- data/assets/javascripts/views/node.js.coffee +0 -54
- data/assets/javascripts/views/overview.js.coffee +0 -6
- data/assets/stylesheets/application.css +0 -24
- data/assets/stylesheets/bootstrap-responsive.css +0 -1109
- data/assets/templates/cluster.jst.eco +0 -87
- data/assets/templates/config.jst.eco +0 -15
- data/assets/templates/footer.jst.eco +0 -1
- data/assets/templates/navbar.jst.eco +0 -55
- data/assets/templates/node.jst.eco +0 -73
- data/assets/templates/overview.jst.eco +0 -32
@@ -1,87 +0,0 @@
|
|
1
|
-
<h3 align=center> <%= @model.get("name") %> </h3>
|
2
|
-
|
3
|
-
<ul class="pager fixed">
|
4
|
-
<%if @prevCluster: %>
|
5
|
-
<li class="previous nosel"><a class="nextPrevButton" href="<%= @prevCluster?.get("routeURL")%>">← Prev</a></li>
|
6
|
-
<% else: %>
|
7
|
-
<li class="previous disabled nosel"><a>← Prev</a></li>
|
8
|
-
<%end%>
|
9
|
-
|
10
|
-
<%if @nextCluster: %>
|
11
|
-
<li class="next nosel"><a class="nextPrevButton" href="<%= @nextCluster?.get("routeURL")%>">Next →</a></li>
|
12
|
-
<% else: %>
|
13
|
-
<li class="next disabled nosel"><a>Next →</a></li>
|
14
|
-
<%end%>
|
15
|
-
</li>
|
16
|
-
</ul>
|
17
|
-
|
18
|
-
|
19
|
-
</br>
|
20
|
-
<table class="table table-striped table-bordered">
|
21
|
-
<tr>
|
22
|
-
<th>Client Connections</th>
|
23
|
-
<th>Client EOF</th>
|
24
|
-
<th>Client Errors</th>
|
25
|
-
<th>Forward Errors</th>
|
26
|
-
<th>Fragments</th>
|
27
|
-
<th>Server Ejects</th>
|
28
|
-
</tr>
|
29
|
-
<tr>
|
30
|
-
<td><%= @model.get('client_connections')%></td>
|
31
|
-
<td><%= @model.get('client_eof')%></td>
|
32
|
-
<td><%= @model.get('client_err')%></td>
|
33
|
-
<td><%= @model.get('forward_error')%></td>
|
34
|
-
<td><%= @model.get('fragments')%></td>
|
35
|
-
<td><%= @model.get('server_ejects')%></td>
|
36
|
-
</tr>
|
37
|
-
|
38
|
-
</table>
|
39
|
-
|
40
|
-
</br>
|
41
|
-
<div class="chartsBox">
|
42
|
-
<div class="row">
|
43
|
-
<div class="span5">
|
44
|
-
<div id="chart1" style="padding-left: 23%"></div>
|
45
|
-
</div>
|
46
|
-
<div class="span5">
|
47
|
-
<div id="chart2" style="padding-left: 40%"></div>
|
48
|
-
</div>
|
49
|
-
</div>
|
50
|
-
</div>
|
51
|
-
|
52
|
-
|
53
|
-
</br>
|
54
|
-
<table class="table table-striped table-bordered">
|
55
|
-
<thead>
|
56
|
-
<tr>
|
57
|
-
<th>Host</th>
|
58
|
-
<th>Used Memory</th>
|
59
|
-
<th>Free Memory</th>
|
60
|
-
<th>Used Memory RSS</th>
|
61
|
-
<th>Max Memory</th>
|
62
|
-
<th>Fragmentation</th>
|
63
|
-
</tr>
|
64
|
-
</thead>
|
65
|
-
<tbody>
|
66
|
-
<% for node in @model.get("nodes").models: %>
|
67
|
-
<tr>
|
68
|
-
<td><a href="<%=node.get("routeURL")%>"><%=node.get("hostname")%></a></td>
|
69
|
-
<td><%=humanize.filesize node.get("usedMemory")%></td>
|
70
|
-
<td><%=humanize.filesize node.get("freeMemory")%></td>
|
71
|
-
<td><%=humanize.filesize node.get("usedMemoryRss")%></td>
|
72
|
-
<td><%=humanize.filesize node.get("maxMemory")%></td>
|
73
|
-
<td><%=node.get("fragmentation")%></td>
|
74
|
-
</tr>
|
75
|
-
<% end %>
|
76
|
-
<tr>
|
77
|
-
<td> </td>
|
78
|
-
<td><%=humanize.filesize _(@model.get("nodes").pluck("usedMemory")).sum()%></td>
|
79
|
-
<td><%=humanize.filesize _(@model.get("nodes").pluck("freeMemory")).sum()%></td>
|
80
|
-
<td><%=humanize.filesize _(@model.get("nodes").pluck("usedMemoryRss")).sum()%></td>
|
81
|
-
<td><%=humanize.filesize _(@model.get("nodes").pluck("maxMemory")).sum()%></td>
|
82
|
-
<td>~<%=humanize.numberFormat(_(@model.get("nodes").pluck("fragmentation")).average(),2)%></td>
|
83
|
-
</tr>
|
84
|
-
</tbody>
|
85
|
-
</table>
|
86
|
-
|
87
|
-
|
@@ -1,15 +0,0 @@
|
|
1
|
-
|
2
|
-
<h3> Clusters </h3>
|
3
|
-
<br/>
|
4
|
-
<% for conf in _(@model.get("config")).map( (v,k)->[k,v]): %>
|
5
|
-
<table class="table table-striped table-bordered">
|
6
|
-
<tr><th>Name</th><td><%-"<a href=#{Nutcracker.Models.Cluster.routeURL conf[0]}>#{conf[0]}</a>"%></td></tr>
|
7
|
-
<tr><th>Servers</th><td><%-conf[1].servers.map((s)->"<a href=#{Nutcracker.Models.Node.routeURL(s)}>#{s}</a>").join("<br/>")%></td></tr>
|
8
|
-
<% for array in _(conf[1]).map((v,k)->[k,v]): %>
|
9
|
-
<%if not /servers/.test array[0]:%>
|
10
|
-
<tr><th><%=array[0]%></th><td><%=array[1]%></td></tr>
|
11
|
-
<% end %>
|
12
|
-
<% end %>
|
13
|
-
</table>
|
14
|
-
</br>
|
15
|
-
<% end %>
|
@@ -1 +0,0 @@
|
|
1
|
-
Last Update <%=humanize.relativeTime(@model.get('timestamp'))%>
|
@@ -1,55 +0,0 @@
|
|
1
|
-
<div class="navbar">
|
2
|
-
<div class="navbar-inner">
|
3
|
-
<div class="container" style="font-size: 17px">
|
4
|
-
<a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-responsive-collapse">
|
5
|
-
<span class="icon-bar"></span>
|
6
|
-
<span class="icon-bar"></span>
|
7
|
-
<span class="icon-bar"></span>
|
8
|
-
</a>
|
9
|
-
<a class="brand" href="#" style="color: #ffffff;font-size: 25px">Nutcracker</a>
|
10
|
-
<div class="nav-collapse collapse navbar-responsive-collapse">
|
11
|
-
<ul class="nav">
|
12
|
-
<li class="divider-vertical"></li>
|
13
|
-
<li id="overview" ><a href="#/">Overview</a></li>
|
14
|
-
<li class="divider-vertical"></li>
|
15
|
-
<li id="config" ><a href="#/config">Config </a></li>
|
16
|
-
<li class="divider-vertical"></li>
|
17
|
-
<li id="clusters" class="dropdown">
|
18
|
-
<a class="dropdown-toggle" id="drop4" style="padding-top: 12px;" role="button" data-toggle="dropdown" href="#">Clusters <b class="caret"></b></a>
|
19
|
-
<ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop4">
|
20
|
-
<li class='divider'></li>
|
21
|
-
<% for cluster in @model.get("clusters").models: %>
|
22
|
-
<li role="presentation" style="font-size: 15px">
|
23
|
-
<a role="menuitem" tabindex="-1" href="<%=cluster.get('routeURL')%>"><%=cluster.get('name')%></a>
|
24
|
-
</li>
|
25
|
-
<li class='divider'></li>
|
26
|
-
<% end %>
|
27
|
-
</ul>
|
28
|
-
</li>
|
29
|
-
|
30
|
-
<li class="divider-vertical"></li>
|
31
|
-
<li id="nodes" class="dropdown">
|
32
|
-
<a class="dropdown-toggle" id="drop5" style="padding-top: 12px;" role="button" data-toggle="dropdown" href="#">Nodes <b class="caret"></b></a>
|
33
|
-
<ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop5">
|
34
|
-
<li class='divider'></li>
|
35
|
-
<% for node in @model.nodes().models: %>
|
36
|
-
<li role="presentation" style="font-size: 15px">
|
37
|
-
<a role="menuitem" tabindex="-1" href="<%=node.get("routeURL")%>"><%=node.get("hostname")%></a>
|
38
|
-
</li>
|
39
|
-
<li class='divider'></li>
|
40
|
-
<% end %>
|
41
|
-
</ul>
|
42
|
-
</li>
|
43
|
-
|
44
|
-
<li class="divider-vertical"></li>
|
45
|
-
</ul>
|
46
|
-
|
47
|
-
<ul class="nav pull-right">
|
48
|
-
<li class="divider-vertical"></li>
|
49
|
-
<li class="no-hl"><a>Version <%=@model.get("version")%></a></li>
|
50
|
-
<li class="divider-vertical"></li>
|
51
|
-
</ul>
|
52
|
-
</div><!-- /.nav-collapse -->
|
53
|
-
</div>
|
54
|
-
</div><!-- /navbar-inner -->
|
55
|
-
</div><!-- /navbar -->
|
@@ -1,73 +0,0 @@
|
|
1
|
-
<h3 align=center><%= @model.get("hostname") %></h3>
|
2
|
-
|
3
|
-
<ul class="pager">
|
4
|
-
<%if @prevNode: %>
|
5
|
-
<li class="previous nosel"><a class="nextPrevButton" href="<%= @prevNode?.get("routeURL")%>">← Prev</a></li>
|
6
|
-
<% else: %>
|
7
|
-
<li class="previous disabled nosel"><a>← Prev</a></li>
|
8
|
-
<%end%>
|
9
|
-
|
10
|
-
<% for cluster in @model.get("clusters"): %>
|
11
|
-
<li class="nosel"><a class="nextPrevButton" href="<%= cluster.get('routeURL')%>"><%=cluster.get('name')%></a></li>
|
12
|
-
<% end %>
|
13
|
-
|
14
|
-
<%if @nextNode: %>
|
15
|
-
<li class="next nosel"><a class="nextPrevButton" href="<%= @nextNode?.get("routeURL")%>">Next →</a></li>
|
16
|
-
<% else: %>
|
17
|
-
<li class="next disabled nosel"><a>Next →</a></li>
|
18
|
-
<%end%>
|
19
|
-
</li>
|
20
|
-
</ul>
|
21
|
-
</br>
|
22
|
-
<div class="chartsBox">
|
23
|
-
<div class="row">
|
24
|
-
<div class="span5">
|
25
|
-
<div id="chart1" style="padding-left: 26%"></div>
|
26
|
-
</div>
|
27
|
-
<div class="span5">
|
28
|
-
<div id="chart2" style="padding-left: 40%"></div>
|
29
|
-
</div>
|
30
|
-
</div>
|
31
|
-
</div>
|
32
|
-
|
33
|
-
<br/>
|
34
|
-
<div class="row-fluid">
|
35
|
-
<div class="span6">
|
36
|
-
<h4> Cluster <-> Node Stats </h4>
|
37
|
-
<table class="table table-striped table-bordered">
|
38
|
-
<tr><th>In-Queue</th><td> <%= @model.get "in_queue" %></td></tr>
|
39
|
-
<tr><th>In-Queue Memory Size</th><td> <%= humanize.filesize(@model.get "in_queue_bytes") %></td></tr>
|
40
|
-
<tr><th>Out-Queue</th><td> <%= @model.get "out_queue" %></td></tr>
|
41
|
-
<tr><th>Out-Queue Memory Size</th><td> <%= humanize.filesize(@model.get "out_queue_bytes") %></td></tr>
|
42
|
-
<tr><th>Requests</th><td> <%= @model.get "requests" %></td></tr>
|
43
|
-
<tr><th>Requests Memory Size</th><td> <%= humanize.filesize(@model.get "request_bytes") %></td></tr>
|
44
|
-
<tr><th>Responses</th><td> <%= @model.get "responses" %></td></tr>
|
45
|
-
<tr><th>Responses Memory Size</th><td> <%= humanize.filesize(@model.get "response_bytes") %></td></tr>
|
46
|
-
<tr><th>Server Connections</th><td> <%= @model.get "server_connections" %></td></tr>
|
47
|
-
<tr><th>Server EOF</th><td> <%= @model.get "server_eof" %></td></tr>
|
48
|
-
<tr><th>Server Error</th><td> <%= @model.get "server_err" %></td></tr>
|
49
|
-
<tr><th>Server Timedout</th><td> <%= @model.get "server_timedout" %></td></tr>
|
50
|
-
</table>
|
51
|
-
</div>
|
52
|
-
|
53
|
-
<div class="span6">
|
54
|
-
<h4>Node Stats</h3>
|
55
|
-
<table class="table table-striped table-bordered">
|
56
|
-
<tr><th>Hits</th><td> <%= humanize.numberFormat @model.get("info").hits, 0 %></td></tr>
|
57
|
-
<tr><th>Misses</th><td> <%= humanize.numberFormat @model.get("info").misses, 0 %></td></tr>
|
58
|
-
<tr><th>Hit Ratio</th><td> <%= humanize.numberFormat @model.get("info").hit_ratio, 2 %></td></tr>
|
59
|
-
<tr><th>Max Memory</th><td> <%= humanize.filesize @model.get("info").max_memory %></td></tr>
|
60
|
-
<tr><th>Used Memory</th><td> <%= humanize.filesize @model.get("info").used_memory %></td></tr>
|
61
|
-
<tr><th>Used Memory RSS</th><td> <%= humanize.filesize @model.get("info").used_memory_rss %></td></tr>
|
62
|
-
<tr><th>Connections</th><td> <%= @model.get("info").connections %></td></tr>
|
63
|
-
<tr><th>Keys</th><td> <%= humanize.numberFormat @model.get("info").keys , 0%></td></tr>
|
64
|
-
<tr><th>Evicted Keys</th><td> <%= humanize.numberFormat @model.get("info").evicted_keys, 0 %></td></tr>
|
65
|
-
<tr><th>Expired Keys</th><td> <%= humanize.numberFormat @model.get("info").expired_keys, 0 %></td></tr>
|
66
|
-
<tr><th>Fragmentation</th><td> <%= humanize.numberFormat @model.get("info").fragmentation, 2 %></td></tr>
|
67
|
-
<tr><th> </th><td> </td></tr>
|
68
|
-
</table>
|
69
|
-
</div>
|
70
|
-
|
71
|
-
</div>
|
72
|
-
|
73
|
-
|
@@ -1,32 +0,0 @@
|
|
1
|
-
<h3> Overview </h3>
|
2
|
-
<br/>
|
3
|
-
<table class="table table-striped table-bordered">
|
4
|
-
<tbody>
|
5
|
-
<tr><th>Hostname</th><td><%=@model.get("source")%></td></tr>
|
6
|
-
<tr><th>Service</th><td>Nutcracker Ver. <%=@model.get("version")%></td></tr>
|
7
|
-
<tr><th>Uptime</th><td><%=humanize.relativeTime(((new Date())-@model.get("uptime")*1000)/1000)%></td></tr>
|
8
|
-
<tr><th>Server Connections</th><td><%=@model.get("serverConnections")%></td></tr>
|
9
|
-
<tr><th>Client Connections</th><td><%=@model.get("clientConnections")%></td></tr>
|
10
|
-
|
11
|
-
<tr>
|
12
|
-
<th>Total Clusters</th>
|
13
|
-
<td>
|
14
|
-
<% for cluster in @model.get("clusters").models: %>
|
15
|
-
<a href="<%=cluster.get("routeURL")%>"><%=cluster.get("name")%></a><br/>
|
16
|
-
<%end%>
|
17
|
-
</td>
|
18
|
-
</tr>
|
19
|
-
|
20
|
-
<tr>
|
21
|
-
<th>Total Nodes</th>
|
22
|
-
<td>
|
23
|
-
<% for node in @model.nodes().models: %>
|
24
|
-
<a href="<%=node.get('routeURL')%>"><%=node.get('hostname')%></a><br/>
|
25
|
-
<%end%>
|
26
|
-
</td>
|
27
|
-
</tr>
|
28
|
-
|
29
|
-
|
30
|
-
</tbody>
|
31
|
-
</table>
|
32
|
-
|