noah 0.2.1-jruby → 0.3-jruby
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/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
|
+
|