auser-poolparty 0.2.45 → 0.2.46

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/Manifest.txt +2 -145
  2. data/Rakefile +6 -1
  3. data/bin/cloud +2 -1
  4. data/bin/pool +2 -1
  5. data/bin/server-build-messenger +2 -1
  6. data/bin/server-start-node +5 -8
  7. data/config/hoe.rb +4 -2
  8. data/lib/erlang/messenger/Rakefile +6 -0
  9. data/lib/erlang/messenger/include/defines.hrl +7 -1
  10. data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
  11. data/lib/erlang/messenger/pm_master_rel-0.1.script +7 -3
  12. data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
  13. data/lib/erlang/messenger/pm_node_rel-0.1.script +7 -3
  14. data/lib/erlang/messenger/src/pm_master.erl +104 -20
  15. data/lib/erlang/messenger/src/pm_node.erl +51 -30
  16. data/lib/erlang/messenger/src/pm_node_supervisor.erl +7 -7
  17. data/lib/erlang/messenger/src/utils.erl +3 -1
  18. data/lib/erlang/messenger/useful_snippets +2 -2
  19. data/lib/poolparty/base_packages/haproxy.rb +1 -3
  20. data/lib/poolparty/base_packages/poolparty.rb +4 -3
  21. data/lib/poolparty/helpers/optioner.rb +27 -25
  22. data/lib/poolparty/helpers/provisioners/master.rb +1 -0
  23. data/lib/poolparty/helpers/provisioners/slave.rb +9 -1
  24. data/lib/poolparty/monitors/base_monitor.rb +1 -1
  25. data/lib/poolparty/monitors/monitors/memory_monitor.rb +29 -2
  26. data/lib/poolparty/monitors/monitors/web_monitor.rb +18 -0
  27. data/lib/poolparty/net/messenger.rb +5 -2
  28. data/lib/poolparty/net/remoter_base.rb +15 -1
  29. data/lib/poolparty/plugins/git.rb +2 -2
  30. data/lib/poolparty/pool/loggable.rb +1 -3
  31. data/lib/poolparty/pool/resources/sshkey.rb +1 -1
  32. data/lib/poolparty/version.rb +1 -1
  33. data/lib/poolparty.rb +7 -0
  34. data/lib/poolpartycl.rb +4 -0
  35. data/poolparty.gemspec +6 -149
  36. data/spec/poolparty/helpers/binary_spec.rb +2 -2
  37. data/spec/poolparty/helpers/optioner_spec.rb +1 -4
  38. data/spec/poolparty/monitors/monitors/memory_monitor_spec.rb +47 -0
  39. data/spec/poolparty/net/remoter_base_spec.rb +1 -1
  40. data/spec/poolparty/pool/base_spec.rb +3 -4
  41. data/tasks/deployment.rake +6 -2
  42. metadata +6 -149
  43. data/lib/erlang/cloudpanel/EMakefile +0 -1
  44. data/lib/erlang/cloudpanel/Makefile +0 -8
  45. data/lib/erlang/cloudpanel/cloudpanel.rb +0 -15
  46. data/lib/erlang/cloudpanel/doc/cloudpanel.html +0 -39
  47. data/lib/erlang/cloudpanel/doc/cloudpanel_app.html +0 -40
  48. data/lib/erlang/cloudpanel/doc/cloudpanel_deps.html +0 -89
  49. data/lib/erlang/cloudpanel/doc/cloudpanel_sup.html +0 -46
  50. data/lib/erlang/cloudpanel/doc/cloudpanel_web.html +0 -45
  51. data/lib/erlang/cloudpanel/doc/string.html +0 -222
  52. data/lib/erlang/cloudpanel/ebin/cloudpanel.app +0 -14
  53. data/lib/erlang/cloudpanel/priv/www/images/bg_content.gif +0 -0
  54. data/lib/erlang/cloudpanel/priv/www/index.html +0 -35
  55. data/lib/erlang/cloudpanel/priv/www/javascripts/jquery.js +0 -32
  56. data/lib/erlang/cloudpanel/priv/www/javascripts/site.js +0 -2
  57. data/lib/erlang/cloudpanel/priv/www/pages/index.html +0 -1
  58. data/lib/erlang/cloudpanel/priv/www/pages/tail.html +0 -1
  59. data/lib/erlang/cloudpanel/priv/www/partials/error.html +0 -3
  60. data/lib/erlang/cloudpanel/priv/www/partials/footer.html +0 -6
  61. data/lib/erlang/cloudpanel/priv/www/partials/header.html +0 -13
  62. data/lib/erlang/cloudpanel/priv/www/partials/menu.html +0 -13
  63. data/lib/erlang/cloudpanel/priv/www/stylesheets/application.css +0 -48
  64. data/lib/erlang/cloudpanel/priv/www/stylesheets/classes.css +0 -2
  65. data/lib/erlang/cloudpanel/priv/www/stylesheets/colors.css +0 -8
  66. data/lib/erlang/cloudpanel/priv/www/stylesheets/nav.css +0 -18
  67. data/lib/erlang/cloudpanel/src/Makefile +0 -9
  68. data/lib/erlang/cloudpanel/src/cloudpanel.app +0 -14
  69. data/lib/erlang/cloudpanel/src/cloudpanel.erl +0 -30
  70. data/lib/erlang/cloudpanel/src/cloudpanel.hrl +0 -2
  71. data/lib/erlang/cloudpanel/src/cloudpanel_app.erl +0 -22
  72. data/lib/erlang/cloudpanel/src/cloudpanel_deps.erl +0 -84
  73. data/lib/erlang/cloudpanel/src/cloudpanel_sup.erl +0 -54
  74. data/lib/erlang/cloudpanel/src/cloudpanel_web.erl +0 -39
  75. data/lib/erlang/cloudpanel/src/string.erl +0 -387
  76. data/lib/erlang/cloudpanel/src/tail_log.erl +0 -66
  77. data/lib/erlang/cloudpanel/src/tailor.erl +0 -31
  78. data/lib/erlang/cloudpanel/src/utils.erl +0 -9
  79. data/lib/erlang/cloudpanel/src/views.erl +0 -44
  80. data/lib/erlang/cloudpanel/start-dev.sh +0 -3
  81. data/lib/erlang/cloudpanel/start.sh +0 -3
  82. data/lib/erlang/cloudpanel/support/include.mk +0 -46
  83. data/lib/erlang/cloudpanel/yaws.conf +0 -20
  84. data/lib/erlang/messenger/ebin/master_app.beam +0 -0
  85. data/lib/erlang/messenger/ebin/node_app.beam +0 -0
  86. data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
  87. data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
  88. data/lib/erlang/messenger/ebin/pm_event_manager.beam +0 -0
  89. data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
  90. data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
  91. data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
  92. data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
  93. data/lib/erlang/messenger/pm_master.beam +0 -0
  94. data/lib/erlang/messenger/pm_node.beam +0 -0
data/Manifest.txt CHANGED
@@ -45,154 +45,11 @@ examples/with_apache_plugin.rb
45
45
  generators/poolspec/USAGE
46
46
  generators/poolspec/poolspec_generator.rb
47
47
  generators/poolspec/templates/pool_spec_template.erb
48
- lib/erlang/cloudpanel/EMakefile
49
- lib/erlang/cloudpanel/Makefile
50
- lib/erlang/cloudpanel/cloudpanel.rb
51
- lib/erlang/cloudpanel/deps/mochiweb/LICENSE
52
- lib/erlang/cloudpanel/deps/mochiweb/Makefile
53
- lib/erlang/cloudpanel/deps/mochiweb/README
54
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochifmt.html
55
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochifmt_records.html
56
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochifmt_std.html
57
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochihex.html
58
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochijson.html
59
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochijson2.html
60
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochinum.html
61
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb.html
62
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_app.html
63
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_charref.html
64
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_cookies.html
65
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_echo.html
66
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_headers.html
67
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_html.html
68
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_http.html
69
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_multipart.html
70
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_request.html
71
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_response.html
72
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_skel.html
73
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_socket_server.html
74
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_sup.html
75
- lib/erlang/cloudpanel/deps/mochiweb/doc/mochiweb_util.html
76
- lib/erlang/cloudpanel/deps/mochiweb/doc/reloader.html
77
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochifmt.beam
78
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochifmt_records.beam
79
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochifmt_std.beam
80
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochihex.beam
81
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochijson.beam
82
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochijson2.beam
83
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochinum.beam
84
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb.app
85
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb.beam
86
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_app.beam
87
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_charref.beam
88
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_cookies.beam
89
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_echo.beam
90
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_headers.beam
91
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_html.beam
92
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_http.beam
93
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_multipart.beam
94
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_request.beam
95
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_response.beam
96
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_skel.beam
97
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_socket_server.beam
98
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_sup.beam
99
- lib/erlang/cloudpanel/deps/mochiweb/ebin/mochiweb_util.beam
100
- lib/erlang/cloudpanel/deps/mochiweb/ebin/reloader.beam
101
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/Makefile
102
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/priv/www/index.html
103
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/Makefile
104
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel.app
105
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel.erl
106
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel.hrl
107
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_app.erl
108
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_deps.erl
109
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_sup.erl
110
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/src/skel_web.erl
111
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/start-dev.sh
112
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/start.sh
113
- lib/erlang/cloudpanel/deps/mochiweb/priv/skel/support/include.mk
114
- lib/erlang/cloudpanel/deps/mochiweb/scripts/new_mochiweb.erl
115
- lib/erlang/cloudpanel/deps/mochiweb/src/Makefile
116
- lib/erlang/cloudpanel/deps/mochiweb/src/mochifmt.erl
117
- lib/erlang/cloudpanel/deps/mochiweb/src/mochifmt_records.erl
118
- lib/erlang/cloudpanel/deps/mochiweb/src/mochifmt_std.erl
119
- lib/erlang/cloudpanel/deps/mochiweb/src/mochihex.erl
120
- lib/erlang/cloudpanel/deps/mochiweb/src/mochijson.erl
121
- lib/erlang/cloudpanel/deps/mochiweb/src/mochijson2.erl
122
- lib/erlang/cloudpanel/deps/mochiweb/src/mochinum.erl
123
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb.app
124
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb.erl
125
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_app.erl
126
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_charref.erl
127
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_cookies.erl
128
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_echo.erl
129
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_headers.erl
130
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_html.erl
131
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_http.erl
132
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_multipart.erl
133
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_request.erl
134
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_response.erl
135
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_skel.erl
136
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_socket_server.erl
137
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_sup.erl
138
- lib/erlang/cloudpanel/deps/mochiweb/src/mochiweb_util.erl
139
- lib/erlang/cloudpanel/deps/mochiweb/src/reloader.erl
140
- lib/erlang/cloudpanel/deps/mochiweb/support/include.mk
141
- lib/erlang/cloudpanel/doc/cloudpanel.html
142
- lib/erlang/cloudpanel/doc/cloudpanel_app.html
143
- lib/erlang/cloudpanel/doc/cloudpanel_deps.html
144
- lib/erlang/cloudpanel/doc/cloudpanel_sup.html
145
- lib/erlang/cloudpanel/doc/cloudpanel_web.html
146
- lib/erlang/cloudpanel/doc/string.html
147
- lib/erlang/cloudpanel/ebin/cloudpanel.app
148
- lib/erlang/cloudpanel/ebin/cloudpanel.beam
149
- lib/erlang/cloudpanel/ebin/cloudpanel_app.beam
150
- lib/erlang/cloudpanel/ebin/cloudpanel_deps.beam
151
- lib/erlang/cloudpanel/ebin/cloudpanel_sup.beam
152
- lib/erlang/cloudpanel/ebin/cloudpanel_web.beam
153
- lib/erlang/cloudpanel/ebin/string.beam
154
- lib/erlang/cloudpanel/ebin/tail_log.beam
155
- lib/erlang/cloudpanel/ebin/tailor.beam
156
- lib/erlang/cloudpanel/ebin/utils.beam
157
- lib/erlang/cloudpanel/ebin/views.beam
158
- lib/erlang/cloudpanel/ebin/web_utils.beam
159
- lib/erlang/cloudpanel/priv/www/images/bg_content.gif
160
- lib/erlang/cloudpanel/priv/www/index.html
161
- lib/erlang/cloudpanel/priv/www/javascripts/jquery.js
162
- lib/erlang/cloudpanel/priv/www/javascripts/site.js
163
- lib/erlang/cloudpanel/priv/www/pages/index.html
164
- lib/erlang/cloudpanel/priv/www/pages/tail.html
165
- lib/erlang/cloudpanel/priv/www/partials/error.html
166
- lib/erlang/cloudpanel/priv/www/partials/footer.html
167
- lib/erlang/cloudpanel/priv/www/partials/header.html
168
- lib/erlang/cloudpanel/priv/www/partials/menu.html
169
- lib/erlang/cloudpanel/priv/www/stylesheets/application.css
170
- lib/erlang/cloudpanel/priv/www/stylesheets/classes.css
171
- lib/erlang/cloudpanel/priv/www/stylesheets/colors.css
172
- lib/erlang/cloudpanel/priv/www/stylesheets/nav.css
173
- lib/erlang/cloudpanel/src/Makefile
174
- lib/erlang/cloudpanel/src/cloudpanel.app
175
- lib/erlang/cloudpanel/src/cloudpanel.erl
176
- lib/erlang/cloudpanel/src/cloudpanel.hrl
177
- lib/erlang/cloudpanel/src/cloudpanel_app.erl
178
- lib/erlang/cloudpanel/src/cloudpanel_deps.erl
179
- lib/erlang/cloudpanel/src/cloudpanel_sup.erl
180
- lib/erlang/cloudpanel/src/cloudpanel_web.erl
181
- lib/erlang/cloudpanel/src/string.erl
182
- lib/erlang/cloudpanel/src/tail_log.erl
183
- lib/erlang/cloudpanel/src/tailor.erl
184
- lib/erlang/cloudpanel/src/utils.erl
185
- lib/erlang/cloudpanel/src/views.erl
186
- lib/erlang/cloudpanel/start-dev.sh
187
- lib/erlang/cloudpanel/start.sh
188
- lib/erlang/cloudpanel/support/include.mk
189
- lib/erlang/cloudpanel/yaws.conf
190
48
  lib/erlang/messenger/Emakefile
191
49
  lib/erlang/messenger/Makefile
192
50
  lib/erlang/messenger/README
193
51
  lib/erlang/messenger/Rakefile
194
52
  lib/erlang/messenger/control
195
- lib/erlang/messenger/ebin/erl_crash.dump
196
53
  lib/erlang/messenger/ebin/master.app
197
54
  lib/erlang/messenger/ebin/master_app.beam
198
55
  lib/erlang/messenger/ebin/node.app
@@ -267,10 +124,8 @@ lib/erlang/messenger/lib/eunit/src/eunit_tty.erl
267
124
  lib/erlang/messenger/lib/eunit/src/file_monitor.erl
268
125
  lib/erlang/messenger/lib/eunit/sys.config
269
126
  lib/erlang/messenger/lib/eunit/vsn.mk
270
- lib/erlang/messenger/pm_master.beam
271
127
  lib/erlang/messenger/pm_master_rel-0.1.boot
272
128
  lib/erlang/messenger/pm_master_rel-0.1.script
273
- lib/erlang/messenger/pm_node.beam
274
129
  lib/erlang/messenger/pm_node_rel-0.1.boot
275
130
  lib/erlang/messenger/pm_node_rel-0.1.script
276
131
  lib/erlang/messenger/src/master_app.erl
@@ -341,6 +196,7 @@ lib/poolparty/modules/thread_pool.rb
341
196
  lib/poolparty/monitors/base_monitor.rb
342
197
  lib/poolparty/monitors/monitors/cpu_monitor.rb
343
198
  lib/poolparty/monitors/monitors/memory_monitor.rb
199
+ lib/poolparty/monitors/monitors/web_monitor.rb
344
200
  lib/poolparty/net/messenger.rb
345
201
  lib/poolparty/net/remote.rb
346
202
  lib/poolparty/net/remote_bases/ec2.rb
@@ -420,6 +276,7 @@ spec/poolparty/modules/file_writer_spec.rb
420
276
  spec/poolparty/modules/s3_string_spec.rb
421
277
  spec/poolparty/monitors/base_monitor_spec.rb
422
278
  spec/poolparty/monitors/monitors/cpu_monitor_spec.rb
279
+ spec/poolparty/monitors/monitors/memory_monitor_spec.rb
423
280
  spec/poolparty/net/messenger_spec.rb
424
281
  spec/poolparty/net/remote_bases/ec2_spec.rb
425
282
  spec/poolparty/net/remote_instance_spec.rb
data/Rakefile CHANGED
@@ -5,7 +5,8 @@ Dir['tasks/**/*.rake'].each { |rake| load rake }
5
5
 
6
6
  desc "Clean tmp directory"
7
7
  task :clean_tmp do |t|
8
- %w(logs tmp ~).each do |dir|
8
+ %x[rm #{File.dirname(__FILE__)}/Manifest.txt; touch #{File.dirname(__FILE__)}/Manifest.txt]
9
+ %w(logs tmp).each do |dir|
9
10
  FileUtils.rm_rf("#{File.dirname(__FILE__)}/#{dir}") if ::File.exists?("#{File.dirname(__FILE__)}/#{dir}")
10
11
  end
11
12
  end
@@ -15,6 +16,10 @@ task :clean_pkg do |t|
15
16
  FileUtils.rm_rf("#{File.dirname(__FILE__)}/#{dir}") if ::File.exists?("#{File.dirname(__FILE__)}/#{dir}")
16
17
  end
17
18
  end
19
+
20
+ desc "Generate a new manifest and a new gem"
21
+ task :build_local_gem => [:clean_tmp, :spec, :clean_pkg, :"manifest:refresh", :package]
22
+
18
23
  desc "Generate gemspec"
19
24
  task :gemspec => [:spec, :clean_tmp, :"manifest:refresh", :local_deploy] do |t|
20
25
  res = %x[rake debug_gem]
data/bin/cloud CHANGED
@@ -8,7 +8,8 @@ name = ARGV.select {|arg| arg if Binary.available_binaries_for("cloud").include?
8
8
  # original options back, but if they do contain a binary, we don't want -h getting through to
9
9
  # these options, so we'll strip it if it's included
10
10
  DUP_ARG = ARGV.dup
11
- new_args = DUP_ARG.reject {|arg| Binary.available_binaries_for("cloud").include?(arg) }.empty? ? ARGV : (name ? (DUP_ARG.delete("-h"); DUP_ARG) : DUP_ARG)
11
+ new_args = DUP_ARG.map {|arg| DUP_ARG.delete(arg) unless help_array.include?(arg) || Binary.available_binaries_for("cloud").include?(arg) }
12
+ new_args = new_args.reject {|arg| Binary.available_binaries_for("cloud").include?(arg) }.empty? ? ARGV : (name ? (help_array.each {|arg| DUP_ARG.delete(arg)}; DUP_ARG) : DUP_ARG)
12
13
 
13
14
  # Let's make sure if no command is passed in that we show the help message
14
15
  new_args.push("-h") unless name
data/bin/pool CHANGED
@@ -8,7 +8,8 @@ name = ARGV.select {|arg| arg if Binary.available_binaries_for("pool").include?(
8
8
  # original options back, but if they do contain a binary, we don't want -h getting through to
9
9
  # these options, so we'll strip it if it's included
10
10
  DUP_ARG = ARGV.dup
11
- new_args = DUP_ARG.reject {|arg| Binary.available_binaries_for("pool").include?(arg) }.empty? ? ARGV : (name ? (DUP_ARG.delete("-h"); DUP_ARG) : DUP_ARG)
11
+ new_args = DUP_ARG.map {|arg| DUP_ARG.delete(arg) unless help_array.include?(arg) || Binary.available_binaries_for("pool").include?(arg) }
12
+ new_args = new_args.reject {|arg| Binary.available_binaries_for("pool").include?(arg) }.empty? ? ARGV : (name ? (help_array.each {|arg| DUP_ARG.delete(arg)}; DUP_ARG) : DUP_ARG)
12
13
 
13
14
  # Let's make sure if no command is passed in that we show the help message
14
15
  new_args.push("-h") unless name
@@ -3,7 +3,7 @@ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
3
  require "poolparty"
4
4
  require "poolpartycl"
5
5
 
6
- root_dir = ::File.expand_path( ::File.join(::File.dirname(__FILE__), "..", "lib/erlang/messenger") )
6
+ root_dir = ::File.expand_path( ::File.join(::File.dirname(__FILE__), "..", "lib/erlang/messenger/ebin") )
7
7
 
8
8
  o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
9
9
  end
@@ -17,6 +17,7 @@ ERLC_FLAGS = "-I#{INCLUDE}"
17
17
  # erl -pa ./ebin -s pm_packager start -s init stop
18
18
  cmd =<<-EOE
19
19
  cd #{root_dir}
20
+ rake recompile
20
21
  rake build_boot_scripts
21
22
  EOE
22
23
 
@@ -3,29 +3,26 @@ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
3
  require "poolparty"
4
4
  require "poolpartycl"
5
5
 
6
- available_monitors = PoolParty::Monitors.available_monitors
7
6
  o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
8
7
  opts.on('-n name', '--name name', 'Host name') { |h| optioner.hostname h }
9
8
  opts.on('-l', '--no-shell', 'No shell') {optioner.noshell true}
10
9
  end
11
10
 
12
- load_pool(o.spec || Binary.get_existing_spec_location)
13
-
14
- include Remote
11
+ available_monitors = PoolParty::Monitors.available_monitors
15
12
 
16
13
  @hostname = o.hostname ? o.hostname : `hostname`.chomp
17
14
  @hostname = "node0" if @hostname == "master" # Quick fix to make sure we have a node running on the master as well
18
15
 
19
- @clouds = extract_cloud_from_options o
20
-
21
- @clouds.each do |cloud|
16
+ o.loaded_clouds.each do |cloud|
22
17
 
23
18
  with_cloud(cloud, {:testing => o.testing, :hostname => @hostname, :noshell => o.noshell }) do
24
19
  # TODO: Change this to be app specfic
25
20
  # SECURITY RISK
26
21
 
27
22
  boot_file = "#{Messenger.append_dir}/pm_node_rel-0.1"
28
- command = Messenger.erl_command(hostname, "-boot #{boot_file} #{noshell ? "" : "-detached -heart"}")
23
+ command = Messenger.erl_command(hostname, "-boot #{boot_file} #{noshell ? "" : "-detached -heart"} -- #{available_monitors.join(" ")}")
24
+
25
+ vputs "Running #{command}"
29
26
 
30
27
  Kernel.system "exec #{command}" unless testing
31
28
  end
data/config/hoe.rb CHANGED
@@ -1,9 +1,10 @@
1
- require 'PoolParty/version'
1
+ require 'poolparty'
2
2
 
3
3
  AUTHOR = 'Ari Lerner' # can also be an array of Authors
4
4
  EMAIL = "ari.lerner@citrusbyte.com"
5
5
  DESCRIPTION =<<-EOM
6
- Self-healing, auto-scaling cloud computing tool
6
+ Self-healing, auto-scaling system administration, provisioning
7
+ and maintaining tool that makes cloud computing fun and easy
7
8
  EOM
8
9
  GEM_NAME = 'poolparty' # what ppl will type to install your gem
9
10
  RUBYFORGE_PROJECT = 'poolparty' # The unix name for your project
@@ -63,6 +64,7 @@ $hoe = Hoe.new(GEM_NAME, VERS) do |p|
63
64
  p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
64
65
  p.test_globs = ["test/**/test_*.rb"]
65
66
  p.clean_globs |= ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] #An array of file patterns to delete on clean.
67
+ # p.files = %w(Rakefile History.txt README.txt) + Dir.glob("{examples,lib,specs,tasks,script,generators,bin}/**/*")
66
68
 
67
69
  # == Optional
68
70
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
@@ -39,6 +39,12 @@ task :run_tests => [:compile] do
39
39
  end
40
40
  end
41
41
 
42
+ desc "Clean the beams from the ebin directory"
43
+ task :clean do
44
+ cmd = "rm ebin/*.beam"
45
+ Kernel.system cmd
46
+ end
47
+
42
48
  desc "Recompile the sources"
43
49
  task :recompile => [:clean, :compile]
44
50
 
@@ -1,5 +1,7 @@
1
1
  % Includes file for the PoolParty Messenger
2
2
 
3
+ % -define(debug, true).
4
+
3
5
  -ifdef(debug).
4
6
 
5
7
  -define (MASTER_LOCATION, erlang:list_to_atom(lists:append("master@", element(2, inet:gethostname()))) ).
@@ -13,4 +15,8 @@
13
15
  -endif.
14
16
 
15
17
  -define (MASTER_NODE_NAME, master).
16
- -define (MASTER_SERVER, global:whereis_name(pm_master)).
18
+ -define (MASTER_SERVER, global:whereis_name(pm_master)).
19
+
20
+ -define(DICT, dict).
21
+ -record (node,
22
+ {load}).
@@ -1,4 +1,4 @@
1
- %% script generated at {2008,10,25} {16,17,48}
1
+ %% script generated at {2008,11,10} {0,51,31}
2
2
  {script,
3
3
  {"master","0.1"},
4
4
  [{preLoaded,
@@ -68,7 +68,9 @@
68
68
  overload,misc_supp,format_lib_supp,erlsrv,alarm_handler]},
69
69
  {path,
70
70
  ["/Users/auser/Sites/work/citrusbyte/internal/gems/pool-party/poolparty/lib/erlang/messenger/ebin"]},
71
- {primLoad,[utils,pm_master_supervisor,pm_master,master_app]},
71
+ {primLoad,
72
+ [utils,pm_master_supervisor,pm_master_event_handler,
73
+ pm_master,pm_event_manager,master_app]},
72
74
  {progress,modules_loaded},
73
75
  {path,
74
76
  ["/opt/local/lib/erlang/lib/kernel-2.12.2/ebin",
@@ -222,7 +224,9 @@
222
224
  [{description,"Master Server for PoolParty"},
223
225
  {vsn,"0.1"},
224
226
  {id,[]},
225
- {modules,[master_app,pm_master,pm_master_supervisor,utils]},
227
+ {modules,
228
+ [master_app,pm_master,pm_master_supervisor,utils,
229
+ pm_event_manager,pm_master_event_handler]},
226
230
  {registered,[pm_master,pm_master_supervisor]},
227
231
  {applications,[kernel,stdlib]},
228
232
  {included_applications,[]},
@@ -1,4 +1,4 @@
1
- %% script generated at {2008,10,25} {16,17,48}
1
+ %% script generated at {2008,11,10} {0,51,26}
2
2
  {script,
3
3
  {"node","0.1"},
4
4
  [{preLoaded,
@@ -68,7 +68,9 @@
68
68
  overload,misc_supp,format_lib_supp,erlsrv,alarm_handler]},
69
69
  {path,
70
70
  ["/Users/auser/Sites/work/citrusbyte/internal/gems/pool-party/poolparty/lib/erlang/messenger/ebin"]},
71
- {primLoad,[utils,pm_node_supervisor,pm_node,node_app]},
71
+ {primLoad,
72
+ [utils,pm_node_supervisor,pm_node,pm_event_manager,
73
+ node_app]},
72
74
  {progress,modules_loaded},
73
75
  {path,
74
76
  ["/opt/local/lib/erlang/lib/kernel-2.12.2/ebin",
@@ -222,7 +224,9 @@
222
224
  [{description,"Node Server for PoolParty"},
223
225
  {vsn,"0.1"},
224
226
  {id,[]},
225
- {modules,[node_app,pm_node,pm_node_supervisor,utils]},
227
+ {modules,
228
+ [node_app,pm_node,pm_node_supervisor,utils,
229
+ pm_event_manager]},
226
230
  {registered,[pm_node,pm_node_supervisor]},
227
231
  {applications,[kernel,stdlib]},
228
232
  {included_applications,[]},
@@ -10,19 +10,27 @@
10
10
 
11
11
  -include_lib("../include/defines.hrl").
12
12
 
13
- -record(state, {}).
13
+ -record(state, {
14
+ nodes = ?DICT:new() % Dictionary of running nodes
15
+ }).
16
+
14
17
  -define (SERVER, global:whereis_name(?MODULE)).
15
18
 
16
19
  %% API
17
- -export([start_link/0]).
18
20
 
19
21
  %% gen_server callbacks
20
- -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
21
- terminate/2, code_change/3]).
22
+ -export([start_link/0,
23
+ stop/0,
24
+ init/1,
25
+ handle_call/3,
26
+ handle_cast/2,
27
+ handle_info/2,
28
+ terminate/2,
29
+ code_change/3]).
22
30
 
23
31
  % Client function definitions
24
32
  -export ([get_load/1, reconfigure_cloud/0]).
25
- -export ([run_cmd/1, fire_cmd/1]).
33
+ -export ([run_cmd/1, fire_cmd/1, get_current_nodes/0]).
26
34
  -export ([shutdown_cloud/0]).
27
35
 
28
36
  %%====================================================================
@@ -32,15 +40,15 @@
32
40
  %%% Internal functions
33
41
  %%--------------------------------------------------------------------
34
42
 
35
- % pm_master:get_load("0", "cpu").
43
+ % pm_master:get_load("cpu").
36
44
  get_load(Type) ->
37
45
  % {Loads, _} = pm_cluster:send_call(get_load_for_type, [Type]),
38
- {Loads, _} = gen_server:call(?SERVER, {get_load_for_type, [Type]}),
39
- utils:convert_responses_to_int_list(Loads).
46
+ % {Loads, _} = gen_server:call(?SERVER, {get_load, [Type]}),
47
+ Loads = gen_server:call(?SERVER, {get_current_load, Type}),
48
+ utils:average_of_list(Loads).
40
49
 
41
50
  % Send reconfigure tasks to every node
42
- reconfigure_cloud() ->
43
- gen_server:call(?SERVER, {run_reconfig}).
51
+ reconfigure_cloud() -> gen_server:cast(?SERVER, {force_reconfig}).
44
52
 
45
53
  % Fire the given command on all nodes
46
54
  run_cmd(Cmd) -> gen_server:call(?SERVER, {run_cmd, Cmd}).
@@ -50,6 +58,11 @@ fire_cmd(Cmd) -> gen_server:call(?SERVER, {fire_cmd, Cmd}).
50
58
  shutdown_cloud() ->
51
59
  pm_cluster:send_call(stop, []),
52
60
  {ok}.
61
+
62
+ get_current_nodes() ->
63
+ gen_server:call(?SERVER, {get_live_nodes}).
64
+
65
+ stop() -> gen_server:cast(?MODULE, stop).
53
66
  %%--------------------------------------------------------------------
54
67
  %% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
55
68
  %% Description: Starts the server
@@ -70,7 +83,10 @@ start_link() ->
70
83
  %%--------------------------------------------------------------------
71
84
  init([]) ->
72
85
  % pm_event_manager:add_handler(pm_master_event_handler),
73
- {ok, #state{}}.
86
+ process_flag(trap_exit, true),
87
+ {ok, #state{
88
+ nodes = ?DICT:new()
89
+ }}.
74
90
 
75
91
  %%--------------------------------------------------------------------
76
92
  %% Function: %% handle_call(Request, From, State) -> {reply, Reply, State} |
@@ -82,14 +98,21 @@ init([]) ->
82
98
  %% Description: Handling call messages
83
99
  %%--------------------------------------------------------------------
84
100
  % Handle load messages
85
- handle_call({Type, Args}, _From, _State) ->
86
- Nodes = pm_cluster:get_live_nodes(),
87
- List = rpc:multicall(Nodes, pm_node, Type, [Args]),
88
- {reply, List, nostate};
89
- handle_call(Request, _From, State) ->
90
- Nodes = pm_cluster:get_live_nodes(),
91
- Reply = Reply = rpc:multicall(Nodes, pm_node, Request, []),
92
- {reply, Reply, State}.
101
+ handle_call({get_load, Args}, _From, State) ->
102
+ Nodes = pm_cluster:get_live_nodes(),
103
+ List = rpc:multicall(Nodes, pm_node, get_load_for_type, [Args]),
104
+ {reply, List, State};
105
+ handle_call({get_current_load, Type}, _From, State) ->
106
+ LoadForType = get_load_for_type(Type, State),
107
+ ?TRACE("LoadForType: ",[LoadForType]),
108
+ {reply, LoadForType, State};
109
+ handle_call({get_live_nodes}, _From, State) ->
110
+ {reply, get_live_nodes(State), State}.
111
+
112
+ % handle_call(_Request, _From, State) ->
113
+ % Nodes = pm_cluster:get_live_nodes(),
114
+ % Reply = Reply = rpc:multicall(Nodes, pm_node, Request, []),
115
+ % {reply, Reply, State}.
93
116
 
94
117
  %%--------------------------------------------------------------------
95
118
  %% Function: handle_cast(Msg, State) -> {noreply, State} |
@@ -97,6 +120,18 @@ handle_call(Request, _From, State) ->
97
120
  %% {stop, Reason, State}
98
121
  %% Description: Handling cast messages
99
122
  %%--------------------------------------------------------------------
123
+ handle_cast({update_node_load, From, Loads}, State) ->
124
+ % ?TRACE("Cast with load message", [From, Loads]),
125
+ % {_Nodes, NewState} = get_node_listing(From, State),
126
+ % {noreply, NewState};
127
+ {_LoadState, NewState} = store_load_for(From, Loads, State),
128
+ {noreply, NewState};
129
+ handle_cast({force_reconfig}, State) ->
130
+ Fun = fun(NodeEntry) ->
131
+ {_Node, Pid} = NodeEntry,
132
+ gen_server:cast(Pid, {reconfig}) end,
133
+ run_on_nodes(Fun, State),
134
+ {noreply, State};
100
135
  handle_cast(_Msg, State) ->
101
136
  {noreply, State}.
102
137
 
@@ -124,4 +159,53 @@ terminate(_Reason, _State) ->
124
159
  %% Description: Convert process state when code is changed
125
160
  %%--------------------------------------------------------------------
126
161
  code_change(_OldVsn, State, _Extra) ->
127
- {ok, State}.
162
+ {ok, State}.
163
+
164
+ % Private methods
165
+ get_node_listing(Name, State) ->
166
+ % Find or create the stored node
167
+ case ?DICT:is_key(Name, State#state.nodes) of
168
+ true -> NodeStore = ?DICT:fetch(Name, State#state.nodes), {NodeStore, State};
169
+ false ->
170
+ NodeStore = {}, NewState = State#state{nodes = ?DICT:store(Name, NodeStore, State#state.nodes)}, {NodeStore, NewState}
171
+ end.
172
+
173
+ get_load_for_type(Type, State) ->
174
+ Loads = [ get_load_for_node(Type, Name, State) || Name <- get_live_nodes(State) ],
175
+ [Load || Load <- Loads, Load =/= false, Load > 0.0].
176
+
177
+ get_load_for_node(Type, Name, State) ->
178
+ {NodeStore, _} = get_node_listing(Name, State),
179
+ case proplists:is_defined(erlang:list_to_atom(Type), NodeStore) of
180
+ true -> proplists:get_value(erlang:list_to_atom(Type), NodeStore);
181
+ _ -> false
182
+ end.
183
+
184
+ get_node_pids(State) ->
185
+ Nodes = dict:fetch_keys(State#state.nodes),
186
+ [ {Node, global:whereis_name(Node)} || Node <- Nodes, global:whereis_name(Node) =/= undefined].
187
+
188
+ get_live_nodes(State) ->
189
+ NodePids = get_node_pids(State),
190
+ RespondingNodes = lists:map(
191
+ fun(NodeEntry) ->
192
+ {Node, Pid} = NodeEntry,
193
+ case is_pid(Pid) of
194
+ true ->
195
+ case gen_server:call(Pid, {still_there}) of
196
+ still_here -> Node;
197
+ _ -> false
198
+ end;
199
+ false -> false
200
+ end
201
+ end, NodePids),
202
+ [ Node || Node <- RespondingNodes, Node =/= false].
203
+
204
+ run_on_nodes(Fun, State) ->
205
+ NodePids = get_node_pids(State),
206
+ lists:map(Fun, NodePids).
207
+
208
+ store_load_for(Name, Loads, State) ->
209
+ NewNodeEntry = [ {erlang:list_to_atom(Key), erlang:list_to_float(proplists:get_value(Key, Loads))} || Key <- proplists:get_keys(Loads) ],
210
+ NewState = ?DICT:store(Name, NewNodeEntry, State#state.nodes),
211
+ {NewNodeEntry, State#state{nodes = NewState}}.