scales-monitor 0.0.1.beta.2 → 0.0.4
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/lib/scales-monitor/app/app/assets/javascripts/app/controllers/log.jst.coffee +3 -1
- data/lib/scales-monitor/app/app/assets/javascripts/app/controllers/resources.js.coffee +17 -6
- data/lib/scales-monitor/app/app/assets/javascripts/app/views/resources.jst.eco +3 -1
- data/lib/scales-monitor/app/public/assets/application.js +23 -9
- data/lib/scales-monitor/version.rb +1 -1
- data/lib/scales-monitor/web_socket.rb +5 -26
- data/spec/web_socket_spec.rb +2 -14
- metadata +17 -17
@@ -7,6 +7,7 @@ class App.Log extends Spine.Controller
|
|
7
7
|
super
|
8
8
|
@render()
|
9
9
|
@bindEvents()
|
10
|
+
@changed = false
|
10
11
|
setInterval =>
|
11
12
|
@eventsDiv.animate({ scrollTop: @eventsDiv[0].scrollHeight }, 500)
|
12
13
|
, 1000
|
@@ -55,4 +56,5 @@ class App.Log extends Spine.Controller
|
|
55
56
|
else
|
56
57
|
out += "<br/> -> #{item} = #{data}"
|
57
58
|
|
58
|
-
@eventsDiv.append out
|
59
|
+
@eventsDiv.append out
|
60
|
+
@changed = true
|
@@ -8,10 +8,20 @@ class App.Resources extends Spine.Controller
|
|
8
8
|
constructor: ->
|
9
9
|
super
|
10
10
|
[@resources, @partials, @servers] = [{}, {}, {}]
|
11
|
+
[@resourcesChanged, @partialsChanged] = [false, false]
|
11
12
|
@colors = {}
|
12
13
|
@bindColors()
|
13
14
|
@render()
|
14
15
|
@bindEvents()
|
16
|
+
setInterval =>
|
17
|
+
if @resourcesChanged
|
18
|
+
@resourcesChanged = false
|
19
|
+
@renderResources(@resources, @resourcesDiv)
|
20
|
+
|
21
|
+
if @partialsChanged
|
22
|
+
@partialsChanged = false
|
23
|
+
@renderResources(@partials, @partialsDiv)
|
24
|
+
, 200
|
15
25
|
|
16
26
|
activate: ->
|
17
27
|
@el.addClass("active")
|
@@ -40,27 +50,27 @@ class App.Resources extends Spine.Controller
|
|
40
50
|
|
41
51
|
Spine.bind 'push_resource', (resource) =>
|
42
52
|
@resources[resource.path] = resource
|
43
|
-
@
|
53
|
+
@resourcesChanged = true
|
44
54
|
|
45
55
|
Spine.bind 'destroy_resource', (resource) =>
|
46
56
|
delete @resources[resource.path]
|
47
|
-
@
|
57
|
+
@resourcesChanged = true
|
48
58
|
|
49
59
|
Spine.bind 'push_partial', (partial) =>
|
50
60
|
@partials[partial.path] = partial
|
51
|
-
@
|
61
|
+
@partialsChanged = true
|
52
62
|
|
53
63
|
Spine.bind 'destroy_partial', (partial) =>
|
54
64
|
delete @partials[partial.path]
|
55
|
-
@
|
65
|
+
@partialsChanged = true
|
56
66
|
|
57
67
|
Spine.bind 'server_started', (server) =>
|
58
68
|
@servers[server.id] = server
|
59
|
-
@
|
69
|
+
@resourcesChanged = true
|
60
70
|
|
61
71
|
Spine.bind 'server_stopped', (server) =>
|
62
72
|
delete @servers[server.id]
|
63
|
-
@
|
73
|
+
@resourcesChanged = true
|
64
74
|
|
65
75
|
render: ->
|
66
76
|
@html JST['app/views/resources'](@)
|
@@ -91,6 +101,7 @@ class App.Resources extends Spine.Controller
|
|
91
101
|
div.html out
|
92
102
|
div.tooltip({ selector: "a" })
|
93
103
|
@renderContentTypes()
|
104
|
+
|
94
105
|
|
95
106
|
processContentTypes: ->
|
96
107
|
formats = {}
|
@@ -23,7 +23,9 @@
|
|
23
23
|
|
24
24
|
<div class="span4">
|
25
25
|
<div class="page-header"><h1>Content Types</h1></div>
|
26
|
-
<div id="content_types"
|
26
|
+
<div id="content_types">
|
27
|
+
<div class="well dark-grey pagination-centered"><h2 class="white">0</h2></div>
|
28
|
+
</div>
|
27
29
|
</div>
|
28
30
|
|
29
31
|
</div>
|
@@ -4469,6 +4469,7 @@ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
|
4469
4469
|
Log.__super__.constructor.apply(this, arguments);
|
4470
4470
|
this.render();
|
4471
4471
|
this.bindEvents();
|
4472
|
+
this.changed = false;
|
4472
4473
|
setInterval(function() {
|
4473
4474
|
return _this.eventsDiv.animate({
|
4474
4475
|
scrollTop: _this.eventsDiv[0].scrollHeight
|
@@ -4549,7 +4550,8 @@ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
|
4549
4550
|
out += "<br/> -> " + item + " = " + data;
|
4550
4551
|
}
|
4551
4552
|
}
|
4552
|
-
|
4553
|
+
this.eventsDiv.append(out);
|
4554
|
+
return this.changed = true;
|
4553
4555
|
};
|
4554
4556
|
|
4555
4557
|
return Log;
|
@@ -4746,13 +4748,25 @@ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
|
4746
4748
|
};
|
4747
4749
|
|
4748
4750
|
function Resources() {
|
4749
|
-
var _ref
|
4751
|
+
var _ref, _ref1,
|
4752
|
+
_this = this;
|
4750
4753
|
Resources.__super__.constructor.apply(this, arguments);
|
4751
4754
|
_ref = [{}, {}, {}], this.resources = _ref[0], this.partials = _ref[1], this.servers = _ref[2];
|
4755
|
+
_ref1 = [false, false], this.resourcesChanged = _ref1[0], this.partialsChanged = _ref1[1];
|
4752
4756
|
this.colors = {};
|
4753
4757
|
this.bindColors();
|
4754
4758
|
this.render();
|
4755
4759
|
this.bindEvents();
|
4760
|
+
setInterval(function() {
|
4761
|
+
if (_this.resourcesChanged) {
|
4762
|
+
_this.resourcesChanged = false;
|
4763
|
+
_this.renderResources(_this.resources, _this.resourcesDiv);
|
4764
|
+
}
|
4765
|
+
if (_this.partialsChanged) {
|
4766
|
+
_this.partialsChanged = false;
|
4767
|
+
return _this.renderResources(_this.partials, _this.partialsDiv);
|
4768
|
+
}
|
4769
|
+
}, 200);
|
4756
4770
|
}
|
4757
4771
|
|
4758
4772
|
Resources.prototype.activate = function() {
|
@@ -4786,27 +4800,27 @@ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
|
4786
4800
|
var _this = this;
|
4787
4801
|
Spine.bind('push_resource', function(resource) {
|
4788
4802
|
_this.resources[resource.path] = resource;
|
4789
|
-
return _this.
|
4803
|
+
return _this.resourcesChanged = true;
|
4790
4804
|
});
|
4791
4805
|
Spine.bind('destroy_resource', function(resource) {
|
4792
4806
|
delete _this.resources[resource.path];
|
4793
|
-
return _this.
|
4807
|
+
return _this.resourcesChanged = true;
|
4794
4808
|
});
|
4795
4809
|
Spine.bind('push_partial', function(partial) {
|
4796
4810
|
_this.partials[partial.path] = partial;
|
4797
|
-
return _this.
|
4811
|
+
return _this.partialsChanged = true;
|
4798
4812
|
});
|
4799
4813
|
Spine.bind('destroy_partial', function(partial) {
|
4800
4814
|
delete _this.partials[partial.path];
|
4801
|
-
return _this.
|
4815
|
+
return _this.partialsChanged = true;
|
4802
4816
|
});
|
4803
4817
|
Spine.bind('server_started', function(server) {
|
4804
4818
|
_this.servers[server.id] = server;
|
4805
|
-
return _this.
|
4819
|
+
return _this.resourcesChanged = true;
|
4806
4820
|
});
|
4807
4821
|
return Spine.bind('server_stopped', function(server) {
|
4808
4822
|
delete _this.servers[server.id];
|
4809
|
-
return _this.
|
4823
|
+
return _this.resourcesChanged = true;
|
4810
4824
|
});
|
4811
4825
|
};
|
4812
4826
|
|
@@ -5486,7 +5500,7 @@ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
|
5486
5500
|
(function() {
|
5487
5501
|
(function() {
|
5488
5502
|
|
5489
|
-
__out.push('<header class="jumbotron subhead">\n <h1>Resources</h1>\n <p class="lead">Overview of all Resources, the Partials and Content Types</p>\n</header>\n\n<section>\n\n<div class="row">\n \n <div class="span4">\n <div class="page-header"><h1>Resources</h1></div>\n <div id="resources">\n <div class="well dark-grey pagination-centered"><h2 class="white">0</h2></div>\n </div>\n </div>\n \n <div class="span4">\n <div class="page-header"><h1>Partials</h1></div>\n <div id="partials">\n <div class="well dark-grey pagination-centered"><h2 class="white">0</h2></div>\n </div>\n </div>\n \n <div class="span4">\n <div class="page-header"><h1>Content Types</h1></div>\n <div id="content_types"></div>\n </div>\n \n</div>\n\n</section>\n');
|
5503
|
+
__out.push('<header class="jumbotron subhead">\n <h1>Resources</h1>\n <p class="lead">Overview of all Resources, the Partials and Content Types</p>\n</header>\n\n<section>\n\n<div class="row">\n \n <div class="span4">\n <div class="page-header"><h1>Resources</h1></div>\n <div id="resources">\n <div class="well dark-grey pagination-centered"><h2 class="white">0</h2></div>\n </div>\n </div>\n \n <div class="span4">\n <div class="page-header"><h1>Partials</h1></div>\n <div id="partials">\n <div class="well dark-grey pagination-centered"><h2 class="white">0</h2></div>\n </div>\n </div>\n \n <div class="span4">\n <div class="page-header"><h1>Content Types</h1></div>\n <div id="content_types">\n <div class="well dark-grey pagination-centered"><h2 class="white">0</h2></div>\n </div>\n </div>\n \n</div>\n\n</section>\n');
|
5490
5504
|
|
5491
5505
|
}).call(this);
|
5492
5506
|
|
@@ -6,7 +6,7 @@ module Scales
|
|
6
6
|
|
7
7
|
def on_open(env)
|
8
8
|
send_initial_statuses(env)
|
9
|
-
setup_subscription
|
9
|
+
setup_subscription!
|
10
10
|
add_to_subscribers(env)
|
11
11
|
end
|
12
12
|
|
@@ -15,7 +15,6 @@ module Scales
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def on_message(env, msg)
|
18
|
-
env.stream_send(msg)
|
19
18
|
end
|
20
19
|
|
21
20
|
def on_close(env)
|
@@ -34,7 +33,7 @@ module Scales
|
|
34
33
|
|
35
34
|
private
|
36
35
|
|
37
|
-
def setup_subscription
|
36
|
+
def setup_subscription!
|
38
37
|
return if @subscribed
|
39
38
|
@subscribers = []
|
40
39
|
|
@@ -43,6 +42,7 @@ module Scales
|
|
43
42
|
events.on(:message) do |channel, message|
|
44
43
|
@subscribers.each { |subscriber| subscriber.stream_send(message) }
|
45
44
|
end
|
45
|
+
|
46
46
|
@subscribed = true
|
47
47
|
end
|
48
48
|
|
@@ -60,7 +60,6 @@ module Scales
|
|
60
60
|
worker_statuses.each{ |worker| env.stream_send(worker) }
|
61
61
|
|
62
62
|
request_queue.each{ |request| env.stream_send(request) }
|
63
|
-
response_queue.each{ |request| env.stream_send(response) }
|
64
63
|
|
65
64
|
push_resources.each{ |resource| env.stream_send(resource) }
|
66
65
|
push_partials.each{ |partial| env.stream_send(partial) }
|
@@ -95,11 +94,11 @@ module Scales
|
|
95
94
|
end
|
96
95
|
|
97
96
|
def request_queue
|
98
|
-
requests = Storage::Async.connection.llen(
|
97
|
+
requests = Storage::Async.connection.llen(Scales::Storage::REQUEST_QUEUE)
|
99
98
|
return [] if requests == 0
|
100
99
|
|
101
100
|
data = []
|
102
|
-
Storage::Async.connection.lrange(
|
101
|
+
Storage::Async.connection.lrange(Scales::Storage::REQUEST_QUEUE, 0, requests).each do |request|
|
103
102
|
job = JSON.parse(request)
|
104
103
|
data << {
|
105
104
|
:id => job['scales.id'],
|
@@ -112,26 +111,6 @@ module Scales
|
|
112
111
|
data
|
113
112
|
end
|
114
113
|
|
115
|
-
def response_queue
|
116
|
-
responses = Storage::Async.connection.keys("scales_response_*")
|
117
|
-
return [] if responses.empty?
|
118
|
-
|
119
|
-
data = []
|
120
|
-
responses.each do |response_key|
|
121
|
-
response = Storage::Async.connection.lindex(response_key, 0)
|
122
|
-
response = JSON.parse(response)
|
123
|
-
data << {
|
124
|
-
:id => response[1]['scales.id'],
|
125
|
-
:worker_id => nil,
|
126
|
-
:type => "worker_put_response_in_queue",
|
127
|
-
:path => response[1]['PATH_INFO'],
|
128
|
-
:method => response[1]['REQUEST_METHOD'],
|
129
|
-
:status => response[0]
|
130
|
-
}.to_json
|
131
|
-
end
|
132
|
-
data
|
133
|
-
end
|
134
|
-
|
135
114
|
def push_resources
|
136
115
|
resources = Storage::Async.connection.keys("scales_resource_/*")
|
137
116
|
return [] if resources.empty?
|
data/spec/web_socket_spec.rb
CHANGED
@@ -51,8 +51,8 @@ describe Scales::Monitor::WebSocket do
|
|
51
51
|
it "sends requests" do
|
52
52
|
with_api(described_class, {:verbose => true, :log_stdout => true}) do |server|
|
53
53
|
json = "{\"scales.id\":\"4f57fcec795b6a6158796a1958e781f0\",\"SERVER_NAME\":\"0.0.0.0\",\"SERVER_PORT\":\"3005\",\"REQUEST_METHOD\":\"POST\",\"QUERY_STRING\":\"\",\"PATH_INFO\":\"/tracks\",\"HTTP_HOST\":\"0.0.0.0:3005\",\"HTTP_USER_AGENT\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.19 (KHTML, like Gecko) Version/6.0 Safari/536.19\",\"HTTP_ACCEPT\":\"text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8\",\"HTTP_ORIGIN\":\"http://0.0.0.0:3005\",\"HTTP_REFERER\":\"http://0.0.0.0:3005/tracks/new\",\"HTTP_ACCEPT_LANGUAGE\":\"en-us\",\"HTTP_ACCEPT_ENCODING\":\"gzip, deflate\",\"HTTP_CONNECTION\":\"keep-alive\",\"HTTP_VERSION\":\"1.1\",\"rack.version\":[1,0],\"rack.url_scheme\":null,\"rack.input\":\"utf8=%E2%9C%93&authenticity_token=gniWYAZpl67rSI0VYfrpoBXJ3Ipv9ZEv9VY9FSbyoDM%3D&track%5Bname%5D=Next+one&track%5Bartist%5D=Okay+here&commit=Create+Track\"}"
|
54
|
-
Scales::Storage::Async.connection.lpush(
|
55
|
-
Scales::Storage::Async.connection.lpush(
|
54
|
+
Scales::Storage::Async.connection.lpush(Scales::Storage::REQUEST_QUEUE, json)
|
55
|
+
Scales::Storage::Async.connection.lpush(Scales::Storage::REQUEST_QUEUE, json)
|
56
56
|
|
57
57
|
requests = described_class.new.instance_eval{ request_queue }
|
58
58
|
requests.should have_at_least(2).requests
|
@@ -60,18 +60,6 @@ describe Scales::Monitor::WebSocket do
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
it "sends responds" do
|
64
|
-
with_api(described_class, {:verbose => true, :log_stdout => true}) do |server|
|
65
|
-
json = "[302,{\"Location\":\"http://0.0.0.0:3005/tracks/170\",\"Content-Type\":\"text/html; charset=utf-8\",\"Set-Cookie\":\"_app_session=BAh7B0kiCmZsYXNoBjoGRUZvOiVBY3Rpb25EaXNwYXRjaDo6Rmxhc2g6OkZsYXNoSGFzaAk6CkB1c2VkbzoIU2V0BjoKQGhhc2h7ADoMQGNsb3NlZEY6DUBmbGFzaGVzewY6C25vdGljZUkiJFRyYWNrIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC4GOwBGOglAbm93MEkiD3Nlc3Npb25faWQGOwBGSSIlZDkxNDA4OTFmMWVhZTJlNGU2MmM3MmRkOTA4NDZjODUGOwBU--fd4912d39bd51eedcd5bf0519a939e5b38317b34; path=/; HttpOnly\",\"scales.id\":\"155a255dd3604fa2e39469e30aef3206\"},\"<html><body>You are being <a href=\\\"http://0.0.0.0:3005/tracks/170\\\">redirected</a>.</body></html>\"]"
|
66
|
-
Scales::Storage::Async.connection.lpush("scales_response_155a255dd3604fa2e39469e30aef3206", json)
|
67
|
-
Scales::Storage::Async.connection.lpush("scales_response_155a255dd3604fa2e39469e30aef3207", json)
|
68
|
-
|
69
|
-
responses = described_class.new.instance_eval{ response_queue }
|
70
|
-
responses.should have_at_least(2).responses
|
71
|
-
EM.stop
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
63
|
it "sends push resources" do
|
76
64
|
with_api(described_class, {:verbose => true, :log_stdout => true}) do |server|
|
77
65
|
Scales::Storage::Async.flushall!
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scales-monitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Thomas Fankhauser
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70344757710880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.2.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70344757710880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70344757710380 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,32 +32,32 @@ dependencies:
|
|
32
32
|
version: '2.11'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70344757710380
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: scales-core
|
38
|
-
requirement: &
|
38
|
+
requirement: &70344757709940 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - =
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.0.
|
43
|
+
version: 0.0.4
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70344757709940
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: scales-server
|
49
|
-
requirement: &
|
49
|
+
requirement: &70344757709460 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - =
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.0.
|
54
|
+
version: 0.0.4
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70344757709460
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: goliath
|
60
|
-
requirement: &
|
60
|
+
requirement: &70344757709000 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 1.0.0.beta.1
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70344757709000
|
69
69
|
description: Super Scale Caching Framework - Monitor Server
|
70
70
|
email:
|
71
71
|
- tommylefunk@googlemail.com
|
@@ -157,9 +157,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
157
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
158
|
none: false
|
159
159
|
requirements:
|
160
|
-
- - ! '
|
160
|
+
- - ! '>='
|
161
161
|
- !ruby/object:Gem::Version
|
162
|
-
version:
|
162
|
+
version: '0'
|
163
163
|
requirements: []
|
164
164
|
rubyforge_project:
|
165
165
|
rubygems_version: 1.8.11
|