auser-poolparty 0.2.45 → 0.2.46

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.
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}}.