noah 0.2.1-jruby → 0.3-jruby
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +10 -4
- data/bin/noah-watcher.rb +11 -8
- data/lib/noah.rb +8 -1
- data/lib/noah/agent.rb +30 -5
- data/lib/noah/agents/base_agent.rb +30 -6
- data/lib/noah/agents/dummy_agent.rb +6 -13
- data/lib/noah/agents/http_agent.rb +13 -20
- data/lib/noah/application_routes.rb +6 -6
- data/lib/noah/configuration_routes.rb +6 -6
- data/lib/noah/helpers.rb +1 -0
- data/lib/noah/host_routes.rb +6 -6
- data/lib/noah/log.rb +6 -0
- data/lib/noah/models.rb +50 -2
- data/lib/noah/models/ephemerals.rb +2 -0
- data/lib/noah/models/link.rb +45 -0
- data/lib/noah/models/link_member.rb +18 -0
- data/lib/noah/models/tags.rb +14 -0
- data/lib/noah/models/watchers.rb +1 -3
- data/lib/noah/service_routes.rb +6 -6
- data/lib/noah/validations.rb +1 -0
- data/lib/noah/validations/ephemeral_validations.rb +20 -0
- data/lib/noah/version.rb +1 -1
- data/lib/noah/watcher_routes.rb +4 -4
- data/noah.gemspec +1 -1
- data/spec/ephemeral_spec.rb +13 -0
- data/spec/noahapp_application_spec.rb +10 -10
- data/spec/noahapp_configuration_spec.rb +12 -12
- data/spec/noahapp_ephemeral_spec.rb +15 -0
- data/spec/noahapp_host_spec.rb +10 -10
- data/spec/noahapp_service_spec.rb +12 -12
- data/spec/noahapp_watcher_spec.rb +20 -20
- data/spec/spec_helper.rb +5 -0
- data/views/index.haml +15 -15
- metadata +306 -316
data/spec/noahapp_host_spec.rb
CHANGED
@@ -5,13 +5,13 @@ describe "Using the Host API", :reset_redis => false, :populate_sample_data => t
|
|
5
5
|
|
6
6
|
describe "GET" do
|
7
7
|
it "all hosts should work" do
|
8
|
-
get '/
|
8
|
+
get '/hosts'
|
9
9
|
last_response.should be_ok
|
10
10
|
last_response.should return_json
|
11
11
|
end
|
12
12
|
|
13
13
|
it "existing host should work" do
|
14
|
-
get '/
|
14
|
+
get '/hosts/localhost'
|
15
15
|
last_response.should be_ok
|
16
16
|
response = last_response.should return_json
|
17
17
|
|
@@ -29,7 +29,7 @@ describe "Using the Host API", :reset_redis => false, :populate_sample_data => t
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "named service for host should work" do
|
32
|
-
get '/
|
32
|
+
get '/hosts/localhost/noah'
|
33
33
|
last_response.should be_ok
|
34
34
|
response = last_response.should return_json
|
35
35
|
|
@@ -42,7 +42,7 @@ describe "Using the Host API", :reset_redis => false, :populate_sample_data => t
|
|
42
42
|
describe "PUT" do
|
43
43
|
it "new host should work" do
|
44
44
|
host_data = {:name => "host99.domain.com", :status => "down"}.to_json
|
45
|
-
put '/
|
45
|
+
put '/hosts/host99.domain.com', host_data, "CONTENT_TYPE" => "application/json"
|
46
46
|
last_response.should be_ok
|
47
47
|
response = last_response.should return_json
|
48
48
|
|
@@ -56,7 +56,7 @@ describe "Using the Host API", :reset_redis => false, :populate_sample_data => t
|
|
56
56
|
it "existing host should work" do
|
57
57
|
sleep 3
|
58
58
|
host_data = {:name => "host99.domain.com", :status => "pending"}.to_json
|
59
|
-
put '/
|
59
|
+
put '/hosts/host99.domain.com', host_data, "CONTENT_TYPE" => "application/json"
|
60
60
|
last_response.should be_ok
|
61
61
|
response = last_response.should return_json
|
62
62
|
|
@@ -65,19 +65,19 @@ describe "Using the Host API", :reset_redis => false, :populate_sample_data => t
|
|
65
65
|
|
66
66
|
it "host missing name parameter should not work" do
|
67
67
|
host_data = {:status => "pending"}.to_json
|
68
|
-
put '/
|
68
|
+
put '/hosts/host100.domain.com', host_data, "CONTENT_TYPE" => "application/json"
|
69
69
|
last_response.should be_invalid
|
70
70
|
end
|
71
71
|
|
72
72
|
it "host missing status parameter should not work" do
|
73
73
|
host_data = {:name => "host100.domain.com"}.to_json
|
74
|
-
put '/
|
74
|
+
put '/hosts/host100.domain.com', host_data, "CONTENT_TYPE" => "application/json"
|
75
75
|
last_response.should be_invalid
|
76
76
|
end
|
77
77
|
|
78
78
|
it "host with invalid status parameter should not work" do
|
79
79
|
host_data = {:name => "host100.domain.com", :status => "fscked"}.to_json
|
80
|
-
put '/
|
80
|
+
put '/hosts/host100.domain.com', host_data, "CONTENT_TYPE" => "application/json"
|
81
81
|
last_response.should_not be_ok
|
82
82
|
response = last_response.should return_json
|
83
83
|
|
@@ -96,7 +96,7 @@ describe "Using the Host API", :reset_redis => false, :populate_sample_data => t
|
|
96
96
|
end
|
97
97
|
it "existing host should work" do
|
98
98
|
svc_size = @h.services.size
|
99
|
-
delete "/
|
99
|
+
delete "/hosts/#{@h.name}"
|
100
100
|
last_response.should be_ok
|
101
101
|
response = last_response.should return_json
|
102
102
|
|
@@ -107,7 +107,7 @@ describe "Using the Host API", :reset_redis => false, :populate_sample_data => t
|
|
107
107
|
end
|
108
108
|
|
109
109
|
it "invalid host should not work" do
|
110
|
-
delete "/
|
110
|
+
delete "/hosts/#{@h.name}"
|
111
111
|
last_response.should be_missing
|
112
112
|
end
|
113
113
|
end
|
@@ -13,13 +13,13 @@ describe "Using the Service API", :reset_redis => false, :populate_sample_data =
|
|
13
13
|
|
14
14
|
describe "GET" do
|
15
15
|
it "all services should work" do
|
16
|
-
get '/
|
16
|
+
get '/services'
|
17
17
|
last_response.should be_ok
|
18
18
|
response = last_response.should return_json
|
19
19
|
response.is_a?(Array).should == true
|
20
20
|
end
|
21
21
|
it "all named services should work" do
|
22
|
-
get "/
|
22
|
+
get "/services/#{@sample_service[:name]}"
|
23
23
|
last_response.should be_ok
|
24
24
|
response = last_response.should return_json
|
25
25
|
response.is_a?(Array).should == true
|
@@ -30,7 +30,7 @@ describe "Using the Service API", :reset_redis => false, :populate_sample_data =
|
|
30
30
|
s["host"].should == @h.name
|
31
31
|
end
|
32
32
|
it "named service for host should work" do
|
33
|
-
get "/
|
33
|
+
get "/services/#{@sample_service[:name]}/#{@sample_host[:name]}"
|
34
34
|
last_response.should be_ok
|
35
35
|
response = last_response.should return_json
|
36
36
|
response["id"].should == @s.id
|
@@ -39,7 +39,7 @@ describe "Using the Service API", :reset_redis => false, :populate_sample_data =
|
|
39
39
|
response["host"].should == @h.name
|
40
40
|
end
|
41
41
|
it "missing service for host should not work" do
|
42
|
-
get '/
|
42
|
+
get '/services/foobar/baz'
|
43
43
|
last_response.should be_missing
|
44
44
|
end
|
45
45
|
end
|
@@ -49,7 +49,7 @@ describe "Using the Service API", :reset_redis => false, :populate_sample_data =
|
|
49
49
|
@payload = {:name => 'another_rspec_service', :status => 'up', :host => @h.name}
|
50
50
|
end
|
51
51
|
it "new service should work" do
|
52
|
-
put "/
|
52
|
+
put "/services/#{@payload[:name]}/", @payload.to_json, "CONTENT_TYPE" => "application/json"
|
53
53
|
last_response.should be_ok
|
54
54
|
response = last_response.should return_json
|
55
55
|
response["result"].should == "success"
|
@@ -61,26 +61,26 @@ describe "Using the Service API", :reset_redis => false, :populate_sample_data =
|
|
61
61
|
Noah::Service.find(:name => @payload[:name]).first.is_new?.should == true
|
62
62
|
end
|
63
63
|
it "new service without host should not work" do
|
64
|
-
put "/
|
64
|
+
put "/services/foobar", {:name => "foobar", :status => "up"}.to_json, "CONTENT_TYPE" => "application/json"
|
65
65
|
last_response.should be_invalid
|
66
66
|
end
|
67
67
|
it "new service with invalid status should not work" do
|
68
|
-
put "/
|
68
|
+
put "/services/foobar", {:name => "foobar", :status => "fsck", :host => @h.name}.to_json, "CONTENT_TYPE" => "application/json"
|
69
69
|
last_response.should_not be_ok
|
70
70
|
response = last_response.should return_json
|
71
71
|
response["error_message"].should == "Status must be up, down or pending"
|
72
72
|
end
|
73
73
|
it "new service with missing name should not work" do
|
74
|
-
put "/
|
74
|
+
put "/services/foobar", {:status => "fsck", :host => @h.name}.to_json, "CONTENT_TYPE" => "application/json"
|
75
75
|
last_response.should be_invalid
|
76
76
|
end
|
77
77
|
it "new service with missing status should not work" do
|
78
|
-
put "/
|
78
|
+
put "/services/foobar", {:name => "foobar", :host => @h.name}.to_json, "CONTENT_TYPE" => "application/json"
|
79
79
|
last_response.should be_invalid
|
80
80
|
end
|
81
81
|
it "existing service should work" do
|
82
82
|
sleep 3
|
83
|
-
put "/
|
83
|
+
put "/services/#{@payload[:name]}", {:name => @payload[:name], :status => "down", :host => @payload[:host]}.to_json, "CONTENT_TYPE" => "application/json"
|
84
84
|
last_response.should be_ok
|
85
85
|
response = last_response.should return_json
|
86
86
|
response["result"].should == "success"
|
@@ -101,7 +101,7 @@ describe "Using the Service API", :reset_redis => false, :populate_sample_data =
|
|
101
101
|
@s = @h.services.first
|
102
102
|
end
|
103
103
|
it "existing host should work" do
|
104
|
-
delete "/
|
104
|
+
delete "/services/#{@s.name}/#{@h.name}"
|
105
105
|
last_response.should be_ok
|
106
106
|
response = last_response.should return_json
|
107
107
|
|
@@ -112,7 +112,7 @@ describe "Using the Service API", :reset_redis => false, :populate_sample_data =
|
|
112
112
|
response["service"].should == @s.name
|
113
113
|
end
|
114
114
|
it "invalid host should not work" do
|
115
|
-
delete "/
|
115
|
+
delete "/services/#{@s.name}/#{@h.name}"
|
116
116
|
last_response.should be_missing
|
117
117
|
end
|
118
118
|
end
|
@@ -22,7 +22,7 @@ describe "Using the Watcher API", :reset_redis => true do
|
|
22
22
|
|
23
23
|
describe "GET" do
|
24
24
|
it "all watches should work" do
|
25
|
-
get '/
|
25
|
+
get '/watches'
|
26
26
|
last_response.should be_ok
|
27
27
|
response = last_response.should return_json
|
28
28
|
response.is_a?(Array).should == true
|
@@ -30,8 +30,8 @@ describe "Using the Watcher API", :reset_redis => true do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "named watch should work" do
|
33
|
-
w = Noah::Watcher.create(:pattern => '//noah/application/myapp', :endpoint => 'http://localhost/
|
34
|
-
get "/
|
33
|
+
w = Noah::Watcher.create(:pattern => '//noah/application/myapp', :endpoint => 'http://localhost/watchersebhook')
|
34
|
+
get "/watches/#{w.name}"
|
35
35
|
last_response.should be_ok
|
36
36
|
response = last_response.should return_json
|
37
37
|
response['pattern'].should == w.pattern
|
@@ -39,15 +39,15 @@ describe "Using the Watcher API", :reset_redis => true do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "invalid watch should not work" do
|
42
|
-
get '/
|
42
|
+
get '/watches/asdfasdfasdfasdfasdfsdf'
|
43
43
|
last_response.should be_missing
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
describe "PUT" do
|
48
48
|
it "new watch should work" do
|
49
|
-
data = {:pattern => "//noah/application", :endpoint => "http://myendpoint/
|
50
|
-
put '/
|
49
|
+
data = {:pattern => "//noah/application", :endpoint => "http://myendpoint/watchersebhook"}
|
50
|
+
put '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
51
51
|
last_response.should be_ok
|
52
52
|
response = last_response.should return_json
|
53
53
|
response['pattern'].should == data[:pattern]
|
@@ -58,30 +58,30 @@ describe "Using the Watcher API", :reset_redis => true do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "new watch without pattern should not work" do
|
61
|
-
data = {:endpoint => "http://myendpoint/
|
62
|
-
put '/
|
61
|
+
data = {:endpoint => "http://myendpoint/watchersebhook"}
|
62
|
+
put '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
63
63
|
last_response.should be_invalid
|
64
64
|
end
|
65
65
|
|
66
66
|
it "new watch without endpoint should not work" do
|
67
67
|
data = {:pattern => "//noah/application"}
|
68
|
-
put '/
|
68
|
+
put '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
69
69
|
last_response.should be_invalid
|
70
70
|
end
|
71
71
|
|
72
72
|
it "new watch that supercedes existing should not work" do
|
73
|
-
Noah::Watcher.create(:endpoint => 'http://myendpoint/
|
74
|
-
data = {:endpoint => "http://myendpoint/
|
75
|
-
put '/
|
73
|
+
Noah::Watcher.create(:endpoint => 'http://myendpoint/watchersebhook', :pattern => '//noah/application/foo')
|
74
|
+
data = {:endpoint => "http://myendpoint/watchersebhook", :pattern => '//noah/application'}
|
75
|
+
put '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
76
76
|
last_response.should_not be_ok
|
77
77
|
response = last_response.should return_json
|
78
78
|
response['error_message'].should == 'Pattern would overwrite existing'
|
79
79
|
end
|
80
80
|
|
81
81
|
it "new watch that subsets an existing should not work" do
|
82
|
-
Noah::Watcher.create(:endpoint => 'http://myendpoint/
|
83
|
-
data = {:endpoint => "http://myendpoint/
|
84
|
-
put '/
|
82
|
+
Noah::Watcher.create(:endpoint => 'http://myendpoint/watchersebhook', :pattern => '//noah/application')
|
83
|
+
data = {:endpoint => "http://myendpoint/watchersebhook", :pattern => '//noah/application/foo'}
|
84
|
+
put '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
85
85
|
last_response.should_not be_ok
|
86
86
|
response = last_response.should return_json
|
87
87
|
response['error_message'].should == 'Pattern is already provided'
|
@@ -90,9 +90,9 @@ describe "Using the Watcher API", :reset_redis => true do
|
|
90
90
|
|
91
91
|
describe "DELETE" do
|
92
92
|
it "delete an existing watch should work" do
|
93
|
-
data = {:endpoint => "http://myendpoint/
|
93
|
+
data = {:endpoint => "http://myendpoint/watchersebhookd", :pattern => '//noah/application/d'}
|
94
94
|
w = Noah::Watcher.create(data)
|
95
|
-
delete '/
|
95
|
+
delete '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
96
96
|
last_response.should be_ok
|
97
97
|
response = last_response.should return_json
|
98
98
|
response['pattern'].should == data[:pattern]
|
@@ -103,19 +103,19 @@ describe "Using the Watcher API", :reset_redis => true do
|
|
103
103
|
|
104
104
|
it "delete an invalid watch should not work" do
|
105
105
|
data = {:endpoint => 'missing', :pattern => '//noah/application/dag'}
|
106
|
-
delete '/
|
106
|
+
delete '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
107
107
|
last_response.should be_missing
|
108
108
|
end
|
109
109
|
|
110
110
|
it "delete without pattern should not work" do
|
111
111
|
data = {:endpoint => "invalid"}
|
112
|
-
delete '/
|
112
|
+
delete '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
113
113
|
last_response.should be_invalid
|
114
114
|
end
|
115
115
|
|
116
116
|
it "delete without endpoint should not work" do
|
117
117
|
data = {:pattern => "//noah/invalid"}
|
118
|
-
delete '/
|
118
|
+
delete '/watches', data.to_json, "CONTENT_TYPE" => "application/json"
|
119
119
|
last_response.should be_invalid
|
120
120
|
end
|
121
121
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -14,6 +14,11 @@ RSpec.configure do |config|
|
|
14
14
|
config.after(:all, :populate_sample_data => true) {Ohm::redis.flushdb }
|
15
15
|
config.before(:all, :populate_sample_data => true) do
|
16
16
|
Ohm::redis.flushdb
|
17
|
+
Noah::Watcher.create :endpoint => "dummy://applications", :pattern => "//noah/applications"
|
18
|
+
Noah::Watcher.create :endpoint => "dummy://configurations", :pattern => "//noah/configurations"
|
19
|
+
Noah::Watcher.create :endpoint => "dummy://hosts", :pattern => "//noah/hosts"
|
20
|
+
Noah::Watcher.create :endpoint => "dummy://services", :pattern => "//noah/services"
|
21
|
+
Noah::Watcher.create :endpoint => "dummy://ephemerals", :pattern => "//noah/ephemerals"
|
17
22
|
h = Noah::Host.create(:name => 'localhost', :status => "up")
|
18
23
|
if h.save
|
19
24
|
%w[redis noah].each do |service|
|
data/views/index.haml
CHANGED
@@ -14,42 +14,42 @@
|
|
14
14
|
%h2 Hosts
|
15
15
|
%ul
|
16
16
|
%li
|
17
|
-
%a{:href => "
|
17
|
+
%a{:href => "hosts/"} All registered Hosts
|
18
18
|
%li
|
19
|
-
%a{:href => "
|
19
|
+
%a{:href => "hosts/localhost"} localhost (this server)
|
20
20
|
%li
|
21
|
-
%a{:href => "
|
21
|
+
%a{:href => "hosts/localhost/noah"} localhost noah service
|
22
22
|
#header
|
23
23
|
%h2 Services
|
24
24
|
%ul
|
25
25
|
%li
|
26
|
-
%a{:href => "
|
26
|
+
%a{:href => "services/"} All registered Services
|
27
27
|
%li
|
28
|
-
%a{:href => "
|
28
|
+
%a{:href => "services/http"} All hosts providing 'http'
|
29
29
|
%li
|
30
|
-
%a{:href => "
|
30
|
+
%a{:href => "services/noah/localhost"} localhost noah service
|
31
31
|
#header
|
32
32
|
%h2 Applications
|
33
33
|
%ul
|
34
34
|
%li
|
35
|
-
%a{:href => "
|
35
|
+
%a{:href => "applications/"} All registered Applications
|
36
36
|
%li
|
37
|
-
%a{:href => "
|
37
|
+
%a{:href => "applications/noah"} Noah Application entry
|
38
38
|
%li
|
39
|
-
%a{:href => "
|
39
|
+
%a{:href => "applications/noah/redis"} Noah Redis configuration entry
|
40
40
|
#header
|
41
41
|
%h2 Configurations
|
42
42
|
%ul
|
43
43
|
%li
|
44
|
-
%a{:href => "
|
44
|
+
%a{:href => "configurations/"} All registered Configurations
|
45
45
|
%li
|
46
|
-
%a{:href => "
|
46
|
+
%a{:href => "configurations/noah"} Noah Configuration entry
|
47
47
|
%li
|
48
|
-
%a{:href => "
|
48
|
+
%a{:href => "configurations/myrailsapp1"} myrailsapp1 Configuration entry
|
49
49
|
%li
|
50
|
-
%a{:href => "
|
50
|
+
%a{:href => "configurations/myrestapp1"} myrestapp1 Configuration entry
|
51
51
|
%li
|
52
|
-
%a{:href => "
|
52
|
+
%a{:href => "configurations/myrailsapp1/database.yml"} database.yml file for myrailsapp1 (should return the proper content-type)
|
53
53
|
%li
|
54
|
-
%a{:href => "
|
54
|
+
%a{:href => "configurations/myrestapp1/config.json"} config.json file for myrestapp1
|
55
55
|
|
metadata
CHANGED
@@ -2,313 +2,318 @@
|
|
2
2
|
name: noah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: "0.3"
|
6
6
|
platform: jruby
|
7
7
|
authors:
|
8
|
-
|
8
|
+
- John E. Vincent
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-25 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: eventmachine
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - "="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 1.0.0.beta.3
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: em-http-request
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - "="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.0.0.beta.3
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: redis
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - "="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.1.1
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: nest
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - "="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 1.1.0
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rack
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - "="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.2.1
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: tilt
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - "="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.2.2
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: sinatra
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - "="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 1.2.0
|
91
|
+
type: :runtime
|
92
|
+
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: ohm
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - "="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.1.3
|
102
|
+
type: :runtime
|
103
|
+
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: ohm-contrib
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - "="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.1.1
|
113
|
+
type: :runtime
|
114
|
+
version_requirements: *id009
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: haml
|
117
|
+
prerelease: false
|
118
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - "="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 3.0.25
|
124
|
+
type: :runtime
|
125
|
+
version_requirements: *id010
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: vegas
|
128
|
+
prerelease: false
|
129
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - "="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 0.1.8
|
135
|
+
type: :runtime
|
136
|
+
version_requirements: *id011
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: hiredis
|
139
|
+
prerelease: false
|
140
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
141
|
+
none: false
|
142
|
+
requirements:
|
143
|
+
- - "="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.3.1
|
146
|
+
type: :runtime
|
147
|
+
version_requirements: *id012
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
name: yajl-ruby
|
150
|
+
prerelease: false
|
151
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: "0"
|
157
|
+
type: :runtime
|
158
|
+
version_requirements: *id013
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: thin
|
161
|
+
prerelease: false
|
162
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: "0"
|
168
|
+
type: :runtime
|
169
|
+
version_requirements: *id014
|
170
|
+
- !ruby/object:Gem::Dependency
|
171
|
+
name: diff-lcs
|
172
|
+
prerelease: false
|
173
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
174
|
+
none: false
|
175
|
+
requirements:
|
176
|
+
- - "="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: 1.1.2
|
179
|
+
type: :development
|
180
|
+
version_requirements: *id015
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: sinatra-reloader
|
183
|
+
prerelease: false
|
184
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - "="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 0.5.0
|
190
|
+
type: :development
|
191
|
+
version_requirements: *id016
|
192
|
+
- !ruby/object:Gem::Dependency
|
193
|
+
name: rspec
|
194
|
+
prerelease: false
|
195
|
+
requirement: &id017 !ruby/object:Gem::Requirement
|
196
|
+
none: false
|
197
|
+
requirements:
|
198
|
+
- - ~>
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: "2.5"
|
201
|
+
type: :development
|
202
|
+
version_requirements: *id017
|
203
|
+
- !ruby/object:Gem::Dependency
|
204
|
+
name: rcov
|
205
|
+
prerelease: false
|
206
|
+
requirement: &id018 !ruby/object:Gem::Requirement
|
207
|
+
none: false
|
208
|
+
requirements:
|
209
|
+
- - "="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: 0.9.9
|
212
|
+
type: :development
|
213
|
+
version_requirements: *id018
|
214
|
+
- !ruby/object:Gem::Dependency
|
215
|
+
name: rack-test
|
216
|
+
prerelease: false
|
217
|
+
requirement: &id019 !ruby/object:Gem::Requirement
|
218
|
+
none: false
|
219
|
+
requirements:
|
220
|
+
- - "="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 0.5.7
|
223
|
+
type: :development
|
224
|
+
version_requirements: *id019
|
225
225
|
description: Application registry based on Apache Zookeeper
|
226
226
|
email:
|
227
|
-
|
227
|
+
- lusis.org+rubygems.org@gmail.com
|
228
228
|
executables:
|
229
|
-
|
230
|
-
|
229
|
+
- noah
|
230
|
+
- noah-watcher.rb
|
231
231
|
extensions: []
|
232
232
|
|
233
233
|
extra_rdoc_files: []
|
234
234
|
|
235
235
|
files:
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
236
|
+
- .autotest
|
237
|
+
- .gemtest
|
238
|
+
- .gitignore
|
239
|
+
- Gemfile
|
240
|
+
- LICENSE
|
241
|
+
- README.md
|
242
|
+
- Rakefile
|
243
|
+
- TODO.md
|
244
|
+
- autotest/discover.rb
|
245
|
+
- bin/noah
|
246
|
+
- bin/noah-watcher.rb
|
247
|
+
- config.ru
|
248
|
+
- config/warble.rb
|
249
|
+
- examples/README.md
|
250
|
+
- examples/cluster.ru
|
251
|
+
- examples/custom-watcher.rb
|
252
|
+
- examples/httpclient-server.rb
|
253
|
+
- examples/httpclient.rb
|
254
|
+
- examples/httpclient2.rb
|
255
|
+
- examples/js/FABridge.js
|
256
|
+
- examples/js/WebSocketMain.swf
|
257
|
+
- examples/js/swfobject.js
|
258
|
+
- examples/js/web_socket.js
|
259
|
+
- examples/logger.rb
|
260
|
+
- examples/reconfiguring-sinatra-watcher.rb
|
261
|
+
- examples/reconfiguring-sinatra.rb
|
262
|
+
- examples/simple-post.rb
|
263
|
+
- examples/websocket.html
|
264
|
+
- examples/websocket.rb
|
265
|
+
- lib/noah.rb
|
266
|
+
- lib/noah/agent.rb
|
267
|
+
- lib/noah/agents/base_agent.rb
|
268
|
+
- lib/noah/agents/dummy_agent.rb
|
269
|
+
- lib/noah/agents/http_agent.rb
|
270
|
+
- lib/noah/app.rb
|
271
|
+
- lib/noah/application_routes.rb
|
272
|
+
- lib/noah/ark.rb
|
273
|
+
- lib/noah/configuration_routes.rb
|
274
|
+
- lib/noah/custom_watcher.rb
|
275
|
+
- lib/noah/ephemeral_routes.rb
|
276
|
+
- lib/noah/helpers.rb
|
277
|
+
- lib/noah/host_routes.rb
|
278
|
+
- lib/noah/log.rb
|
279
|
+
- lib/noah/models.rb
|
280
|
+
- lib/noah/models/applications.rb
|
281
|
+
- lib/noah/models/configurations.rb
|
282
|
+
- lib/noah/models/ephemerals.rb
|
283
|
+
- lib/noah/models/hosts.rb
|
284
|
+
- lib/noah/models/link.rb
|
285
|
+
- lib/noah/models/link_member.rb
|
286
|
+
- lib/noah/models/services.rb
|
287
|
+
- lib/noah/models/tags.rb
|
288
|
+
- lib/noah/models/watchers.rb
|
289
|
+
- lib/noah/passthrough.rb
|
290
|
+
- lib/noah/service_routes.rb
|
291
|
+
- lib/noah/validations.rb
|
292
|
+
- lib/noah/validations/ephemeral_validations.rb
|
293
|
+
- lib/noah/validations/watcher_validations.rb
|
294
|
+
- lib/noah/version.rb
|
295
|
+
- lib/noah/watcher_routes.rb
|
296
|
+
- noah.gemspec
|
297
|
+
- spec/application_spec.rb
|
298
|
+
- spec/configuration_spec.rb
|
299
|
+
- spec/ephemeral_spec.rb
|
300
|
+
- spec/host_spec.rb
|
301
|
+
- spec/noahapp_application_spec.rb
|
302
|
+
- spec/noahapp_configuration_spec.rb
|
303
|
+
- spec/noahapp_ephemeral_spec.rb
|
304
|
+
- spec/noahapp_host_spec.rb
|
305
|
+
- spec/noahapp_service_spec.rb
|
306
|
+
- spec/noahapp_spec.rb
|
307
|
+
- spec/noahapp_watcher_spec.rb
|
308
|
+
- spec/service_spec.rb
|
309
|
+
- spec/spec_helper.rb
|
310
|
+
- spec/support/db/.keep
|
311
|
+
- spec/support/test-redis.conf
|
312
|
+
- spec/watcher_spec.rb
|
313
|
+
- views/200.erb
|
314
|
+
- views/404.erb
|
315
|
+
- views/500.erb
|
316
|
+
- views/index.haml
|
312
317
|
has_rdoc: true
|
313
318
|
homepage: https://github.com/lusis/noah
|
314
319
|
licenses: []
|
@@ -317,40 +322,25 @@ post_install_message:
|
|
317
322
|
rdoc_options: []
|
318
323
|
|
319
324
|
require_paths:
|
320
|
-
|
325
|
+
- lib
|
321
326
|
required_ruby_version: !ruby/object:Gem::Requirement
|
322
327
|
none: false
|
323
328
|
requirements:
|
324
|
-
|
325
|
-
|
326
|
-
|
329
|
+
- - ">="
|
330
|
+
- !ruby/object:Gem::Version
|
331
|
+
version: "0"
|
327
332
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
328
333
|
none: false
|
329
334
|
requirements:
|
330
|
-
|
331
|
-
|
332
|
-
|
335
|
+
- - ">="
|
336
|
+
- !ruby/object:Gem::Version
|
337
|
+
version: "0"
|
333
338
|
requirements: []
|
334
339
|
|
335
340
|
rubyforge_project: noah
|
336
|
-
rubygems_version: 1.
|
341
|
+
rubygems_version: 1.6.2
|
337
342
|
signing_key:
|
338
343
|
specification_version: 3
|
339
344
|
summary: Application registry based on Apache Zookeeper
|
340
|
-
test_files:
|
341
|
-
|
342
|
-
- spec/configuration_spec.rb
|
343
|
-
- spec/ephemeral_spec.rb
|
344
|
-
- spec/host_spec.rb
|
345
|
-
- spec/noahapp_application_spec.rb
|
346
|
-
- spec/noahapp_configuration_spec.rb
|
347
|
-
- spec/noahapp_ephemeral_spec.rb
|
348
|
-
- spec/noahapp_host_spec.rb
|
349
|
-
- spec/noahapp_service_spec.rb
|
350
|
-
- spec/noahapp_spec.rb
|
351
|
-
- spec/noahapp_watcher_spec.rb
|
352
|
-
- spec/service_spec.rb
|
353
|
-
- spec/spec_helper.rb
|
354
|
-
- spec/support/db/.keep
|
355
|
-
- spec/support/test-redis.conf
|
356
|
-
- spec/watcher_spec.rb
|
345
|
+
test_files: []
|
346
|
+
|