fairchild-poolparty 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (333) hide show
  1. data/README.txt +0 -12
  2. data/Rakefile +17 -1
  3. data/VERSION.yml +1 -1
  4. data/bin/cloud +20 -1
  5. data/bin/cloud-bootstrap +14 -4
  6. data/bin/cloud-configure +26 -9
  7. data/bin/cloud-contract +7 -7
  8. data/bin/cloud-describe +28 -0
  9. data/bin/cloud-expand +13 -6
  10. data/bin/cloud-list +3 -5
  11. data/bin/cloud-osxcopy +1 -1
  12. data/bin/cloud-provision +1 -1
  13. data/bin/cloud-show +6 -5
  14. data/bin/cloud-ssh +1 -3
  15. data/bin/cloud-start +8 -6
  16. data/bin/cloud-terminate +9 -7
  17. data/bin/server-cloud-elections +29 -18
  18. data/bin/server-ensure-provisioning +24 -29
  19. data/bin/server-list-active +10 -5
  20. data/bin/server-monitor.ru +18 -1
  21. data/bin/server-update-hosts +3 -3
  22. data/bin/server-write-new-nodes +1 -1
  23. data/config/jeweler.rb +12 -3
  24. data/lib/poolparty/aska/aska.rb +1 -12
  25. data/lib/poolparty/base_packages/haproxy.rb +26 -18
  26. data/lib/poolparty/base_packages/poolparty.rb +1 -1
  27. data/lib/poolparty/capistrano.rb +1 -1
  28. data/lib/poolparty/core/array.rb +12 -0
  29. data/lib/poolparty/core/hash.rb +12 -5
  30. data/lib/poolparty/core/nil.rb +8 -0
  31. data/lib/poolparty/core/object.rb +15 -5
  32. data/lib/poolparty/core/string.rb +28 -2
  33. data/lib/poolparty/dependency_resolver/chef_resolver.rb +106 -79
  34. data/lib/poolparty/dependency_resolver/dependency_resolver.rb +1 -1
  35. data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +5 -4
  36. data/lib/poolparty/dependency_resolver/puppet_resolver.rb +44 -17
  37. data/lib/poolparty/helpers/console.rb +1 -1
  38. data/lib/poolparty/helpers/optioner.rb +9 -2
  39. data/lib/poolparty/lite.rb +12 -2
  40. data/lib/poolparty/modules/callbacks.rb +44 -0
  41. data/lib/poolparty/modules/cloud_dsl.rb +17 -11
  42. data/lib/poolparty/modules/cloud_resourcer.rb +29 -21
  43. data/lib/poolparty/modules/definable_resource.rb +1 -1
  44. data/lib/poolparty/modules/pinger.rb +28 -0
  45. data/lib/poolparty/modules/resourcing_dsl.rb +7 -3
  46. data/lib/poolparty/modules/thread_pool.rb +107 -106
  47. data/lib/poolparty/modules/user_helpers.rb +20 -0
  48. data/lib/poolparty/monitors/base_monitor.rb +32 -81
  49. data/lib/poolparty/monitors/monitor_rack.rb +60 -69
  50. data/lib/poolparty/monitors/monitors/favicon_monitor.rb +12 -0
  51. data/lib/poolparty/monitors/monitors/load_monitor.rb +9 -15
  52. data/lib/poolparty/monitors/monitors/memory_monitor.rb +48 -48
  53. data/lib/poolparty/monitors/monitors/neighborhood_monitor.rb +77 -0
  54. data/lib/poolparty/monitors/{stats_monitor.rb → monitors/stats_monitor.rb} +29 -24
  55. data/lib/poolparty/monitors/monitors/time_monitor.rb +15 -0
  56. data/lib/poolparty/net/messenger.rb +2 -0
  57. data/lib/poolparty/net/remoter/cloud_control.rb +177 -227
  58. data/lib/poolparty/net/remoter/connections.rb +10 -18
  59. data/lib/poolparty/net/remoter/interactive.rb +24 -90
  60. data/lib/poolparty/net/remoter_base.rb +98 -25
  61. data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +83 -66
  62. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vm_disk.rb +12 -0
  63. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx.rb +33 -0
  64. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx_file.rb +117 -0
  65. data/lib/poolparty/net/remoter_bases/vmrun/vmrun.rb +165 -0
  66. data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +71 -0
  67. data/lib/poolparty/{base_packages → plugins}/bind.rb +1 -1
  68. data/lib/poolparty/plugins/chef.rb +71 -71
  69. data/lib/poolparty/plugins/chef_deploy.rb +58 -0
  70. data/lib/poolparty/plugins/{deploydirectory.rb → deploy_directory.rb} +12 -3
  71. data/lib/poolparty/plugins/dynomite.rb +14 -0
  72. data/lib/poolparty/plugins/gem_package.rb +37 -0
  73. data/lib/poolparty/plugins/line_in_file.rb +1 -0
  74. data/lib/poolparty/plugins/nanite.rb +41 -0
  75. data/lib/poolparty/{base_packages → plugins}/tokyo_tyrant.rb +1 -1
  76. data/lib/poolparty/poolparty/cloud.rb +36 -35
  77. data/lib/poolparty/poolparty/default.rb +2 -11
  78. data/lib/poolparty/poolparty/key.rb +15 -12
  79. data/lib/poolparty/poolparty/neighborhoods.rb +54 -21
  80. data/lib/poolparty/poolparty/plugin.rb +6 -9
  81. data/lib/poolparty/poolparty/plugin_model.rb +5 -5
  82. data/lib/poolparty/poolparty/pool.rb +8 -4
  83. data/lib/poolparty/poolparty/poolparty_base_class.rb +20 -11
  84. data/lib/poolparty/poolparty/resource.rb +9 -5
  85. data/lib/poolparty/poolparty/service.rb +3 -1
  86. data/lib/poolparty/provision/boot_strapper.rb +47 -24
  87. data/lib/poolparty/provision/configurations/chef.rb +7 -4
  88. data/lib/poolparty/provision/dr_configure.rb +80 -25
  89. data/lib/poolparty/resources/cron.rb +8 -0
  90. data/lib/poolparty/resources/directory.rb +1 -1
  91. data/lib/poolparty/resources/file.rb +16 -0
  92. data/lib/poolparty/resources/package.rb +7 -2
  93. data/lib/poolparty/resources/service.rb +4 -3
  94. data/lib/poolparty/resources/symlink.rb +0 -8
  95. data/lib/poolparty/schema.rb +35 -20
  96. data/lib/poolparty/templates/haproxy.conf +27 -25
  97. data/lib/poolparty/templates/monitor.ru +3 -3
  98. data/lib/poolparty/verification/verifier_base.rb +17 -0
  99. data/lib/poolparty/verification/verifiers/ping.rb +17 -0
  100. data/lib/poolparty/verification/verify.rb +74 -0
  101. data/lib/poolparty.rb +8 -9
  102. data/lib/poolpartycl.rb +14 -0
  103. data/spec/bin/server-list-active_spec.rb +2 -0
  104. data/spec/poolparty/base_packages/haproxy_spec.rb +1 -1
  105. data/spec/poolparty/core/array_spec.rb +3 -1
  106. data/spec/poolparty/core/ordered_hash_spec.rb +2 -2
  107. data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +9 -15
  108. data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +6 -6
  109. data/spec/poolparty/dependency_resolver/puppet_resolver_spec.rb +121 -124
  110. data/spec/poolparty/net/remote_spec.rb +287 -286
  111. data/spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb +1 -1
  112. data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +7 -8
  113. data/spec/poolparty/net/remoter_bases/ec2_spec.rb +22 -7
  114. data/spec/poolparty/net/remoter_spec.rb +48 -45
  115. data/spec/poolparty/poolparty/cloud_spec.rb +15 -22
  116. data/spec/poolparty/poolparty/key_spec.rb +4 -4
  117. data/spec/poolparty/poolparty/neighborhoods_spec.rb +1 -2
  118. data/spec/poolparty/poolparty/plugin_spec.rb +2 -2
  119. data/spec/poolparty/poolparty/resource_spec.rb +4 -5
  120. data/spec/poolparty/poolparty_base_class_spec.rb +82 -78
  121. data/spec/poolparty/resources/package_spec.rb +0 -3
  122. data/spec/poolparty/spec_helper.rb +4 -4
  123. data/tasks/development.rake +9 -0
  124. data/test/poolparty/core/array_test.rb +21 -0
  125. data/test/poolparty/core/hash_test.rb +14 -1
  126. data/test/poolparty/core/string_test.rb +29 -0
  127. data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +106 -0
  128. data/test/poolparty/modules/callbacks_test.rb +40 -0
  129. data/test/poolparty/modules/cloud_dsl_test.rb +25 -0
  130. data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +50 -0
  131. data/test/poolparty/net/remoter_test.rb +14 -0
  132. data/test/poolparty/poolparty/neighborhood_test.rb +23 -0
  133. data/test/poolparty/poolparty/poolparty_base_class_test.rb +84 -0
  134. data/test/poolparty/verification/verify_test.rb +49 -0
  135. data/test/test_helper.rb +4 -1
  136. data/test/test_poolparty.rb +6 -5
  137. data/vendor/chef/apache2/attributes/apache.rb +1 -1
  138. data/vendor/chef/apache2/templates/default/default-site.erb +1 -1
  139. data/vendor/chef/chef-deploy/LICENSE +201 -0
  140. data/vendor/chef/chef-deploy/README.rdoc +24 -0
  141. data/vendor/chef/chef-deploy/Rakefile +57 -0
  142. data/vendor/chef/chef-deploy/TODO +4 -0
  143. data/vendor/chef/chef-deploy/lib/chef-deploy/cached_deploy.rb +230 -0
  144. data/vendor/chef/chef-deploy/lib/chef-deploy/git.rb +132 -0
  145. data/vendor/chef/chef-deploy/lib/chef-deploy/subversion.rb +98 -0
  146. data/vendor/chef/chef-deploy/lib/chef-deploy.rb +183 -0
  147. metadata +57 -252
  148. data/bin/cloud-run +0 -18
  149. data/bin/cloud-stats +0 -17
  150. data/bin/ec2-list-active +0 -24
  151. data/bin/pool +0 -31
  152. data/bin/pool-describe +0 -8
  153. data/bin/pool-generate +0 -18
  154. data/bin/pool-init +0 -28
  155. data/bin/pool-list +0 -30
  156. data/bin/pool-start +0 -26
  157. data/bin/server-list-instances +0 -15
  158. data/lib/erlang/messenger/Emakefile +0 -1
  159. data/lib/erlang/messenger/Makefile +0 -15
  160. data/lib/erlang/messenger/README +0 -5
  161. data/lib/erlang/messenger/Rakefile +0 -72
  162. data/lib/erlang/messenger/control +0 -11
  163. data/lib/erlang/messenger/ebin/client.app +0 -19
  164. data/lib/erlang/messenger/ebin/master.app +0 -19
  165. data/lib/erlang/messenger/ebin/node.app +0 -19
  166. data/lib/erlang/messenger/ebin/packager.app +0 -19
  167. data/lib/erlang/messenger/ebin/pm_client_rel-0.1.rel +0 -1
  168. data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +0 -1
  169. data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +0 -1
  170. data/lib/erlang/messenger/include/defines.hrl +0 -27
  171. data/lib/erlang/messenger/lib/eunit/AUTHORS +0 -2
  172. data/lib/erlang/messenger/lib/eunit/CHANGELOG +0 -14
  173. data/lib/erlang/messenger/lib/eunit/COPYING +0 -504
  174. data/lib/erlang/messenger/lib/eunit/Makefile +0 -28
  175. data/lib/erlang/messenger/lib/eunit/NOTES +0 -276
  176. data/lib/erlang/messenger/lib/eunit/README +0 -3
  177. data/lib/erlang/messenger/lib/eunit/doc/edoc-info +0 -3
  178. data/lib/erlang/messenger/lib/eunit/doc/erlang.png +0 -0
  179. data/lib/erlang/messenger/lib/eunit/doc/eunit.html +0 -172
  180. data/lib/erlang/messenger/lib/eunit/doc/index.html +0 -17
  181. data/lib/erlang/messenger/lib/eunit/doc/modules-frame.html +0 -12
  182. data/lib/erlang/messenger/lib/eunit/doc/overview-summary.html +0 -984
  183. data/lib/erlang/messenger/lib/eunit/doc/overview.edoc +0 -980
  184. data/lib/erlang/messenger/lib/eunit/doc/packages-frame.html +0 -11
  185. data/lib/erlang/messenger/lib/eunit/doc/stylesheet.css +0 -55
  186. data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
  187. data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
  188. data/lib/erlang/messenger/lib/eunit/ebin/eunit.app +0 -21
  189. data/lib/erlang/messenger/lib/eunit/ebin/eunit.appup +0 -1
  190. data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
  191. data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
  192. data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
  193. data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
  194. data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
  195. data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
  196. data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
  197. data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
  198. data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
  199. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
  200. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
  201. data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
  202. data/lib/erlang/messenger/lib/eunit/examples/eunit_examples.erl +0 -339
  203. data/lib/erlang/messenger/lib/eunit/examples/fib.erl +0 -19
  204. data/lib/erlang/messenger/lib/eunit/examples/tests.txt +0 -1
  205. data/lib/erlang/messenger/lib/eunit/include/eunit.hrl +0 -313
  206. data/lib/erlang/messenger/lib/eunit/src/Makefile +0 -46
  207. data/lib/erlang/messenger/lib/eunit/src/autoload.erl +0 -388
  208. data/lib/erlang/messenger/lib/eunit/src/code_monitor.erl +0 -243
  209. data/lib/erlang/messenger/lib/eunit/src/eunit.app.src +0 -21
  210. data/lib/erlang/messenger/lib/eunit/src/eunit.appup.src +0 -1
  211. data/lib/erlang/messenger/lib/eunit/src/eunit.erl +0 -196
  212. data/lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl +0 -102
  213. data/lib/erlang/messenger/lib/eunit/src/eunit_data.erl +0 -798
  214. data/lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl +0 -48
  215. data/lib/erlang/messenger/lib/eunit/src/eunit_lib.erl +0 -682
  216. data/lib/erlang/messenger/lib/eunit/src/eunit_proc.erl +0 -552
  217. data/lib/erlang/messenger/lib/eunit/src/eunit_serial.erl +0 -157
  218. data/lib/erlang/messenger/lib/eunit/src/eunit_server.erl +0 -340
  219. data/lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl +0 -64
  220. data/lib/erlang/messenger/lib/eunit/src/eunit_test.erl +0 -334
  221. data/lib/erlang/messenger/lib/eunit/src/eunit_tests.erl +0 -45
  222. data/lib/erlang/messenger/lib/eunit/src/eunit_tty.erl +0 -272
  223. data/lib/erlang/messenger/lib/eunit/src/file_monitor.erl +0 -409
  224. data/lib/erlang/messenger/lib/eunit/sys.config +0 -9
  225. data/lib/erlang/messenger/lib/eunit/vsn.mk +0 -1
  226. data/lib/erlang/messenger/pm_client_rel-0.1.boot +0 -0
  227. data/lib/erlang/messenger/pm_client_rel-0.1.script +0 -238
  228. data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
  229. data/lib/erlang/messenger/pm_master_rel-0.1.script +0 -239
  230. data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
  231. data/lib/erlang/messenger/pm_node_rel-0.1.script +0 -237
  232. data/lib/erlang/messenger/src/client_app.erl +0 -39
  233. data/lib/erlang/messenger/src/client_server.erl +0 -60
  234. data/lib/erlang/messenger/src/master_app.erl +0 -39
  235. data/lib/erlang/messenger/src/node_app.erl +0 -39
  236. data/lib/erlang/messenger/src/pm_client.erl +0 -49
  237. data/lib/erlang/messenger/src/pm_client_supervisor.erl +0 -38
  238. data/lib/erlang/messenger/src/pm_cluster.erl +0 -61
  239. data/lib/erlang/messenger/src/pm_event_manager.erl +0 -27
  240. data/lib/erlang/messenger/src/pm_master.erl +0 -215
  241. data/lib/erlang/messenger/src/pm_master_event_handler.erl +0 -72
  242. data/lib/erlang/messenger/src/pm_master_supervisor.erl +0 -39
  243. data/lib/erlang/messenger/src/pm_node.erl +0 -200
  244. data/lib/erlang/messenger/src/pm_node_supervisor.erl +0 -38
  245. data/lib/erlang/messenger/src/pm_packager.erl +0 -76
  246. data/lib/erlang/messenger/src/pm_spawner.erl +0 -213
  247. data/lib/erlang/messenger/src/pm_strings.erl +0 -11
  248. data/lib/erlang/messenger/src/utils.erl +0 -72
  249. data/lib/erlang/messenger/useful_snippets +0 -17
  250. data/lib/poolparty/monitors/monitors/server_monitor.rb +0 -7
  251. data/lib/poolparty/monitors/monitors/web_monitor.rb +0 -18
  252. data/lib/poolparty/monitors/neighborhood_monitor.rb +0 -24
  253. data/lib/poolparty/monitors.rb +0 -6
  254. data/lib/poolparty/net/remoter/lists.rb +0 -12
  255. data/lib/poolparty/poolparty/custom_resource.rb +0 -45
  256. data/lib/poolparty/resources/custom_service.rb +0 -30
  257. data/lib/poolparty/services/gem_package.rb +0 -52
  258. data/lib/poolparty/version.rb +0 -15
  259. data/spec/poolparty/plugins/svn_spec.rb +0 -16
  260. data/spec/poolparty/poolparty/custom_resource_spec.rb +0 -79
  261. data/vendor/gems/butterfly/History.txt +0 -4
  262. data/vendor/gems/butterfly/PostInstall.txt +0 -2
  263. data/vendor/gems/butterfly/README.rdoc +0 -48
  264. data/vendor/gems/butterfly/Rakefile +0 -62
  265. data/vendor/gems/butterfly/VERSION.yml +0 -4
  266. data/vendor/gems/butterfly/bin/flutter +0 -4
  267. data/vendor/gems/butterfly/butterfly.gemspec +0 -37
  268. data/vendor/gems/butterfly/examples/config.ru +0 -15
  269. data/vendor/gems/butterfly/examples/my_app.rb +0 -12
  270. data/vendor/gems/butterfly/lib/butterfly.rb +0 -14
  271. data/vendor/gems/butterfly/lib/handler.rb +0 -48
  272. data/vendor/gems/butterfly/lib/request.rb +0 -29
  273. data/vendor/gems/butterfly/lib/response.rb +0 -49
  274. data/vendor/gems/butterfly/script/console +0 -10
  275. data/vendor/gems/butterfly/script/destroy +0 -14
  276. data/vendor/gems/butterfly/script/generate +0 -14
  277. data/vendor/gems/butterfly/test/test_adapter_base.rb +0 -23
  278. data/vendor/gems/butterfly/test/test_butterfly_request.rb +0 -46
  279. data/vendor/gems/butterfly/test/test_butterfly_response.rb +0 -43
  280. data/vendor/gems/butterfly/test/test_butterfly_server.rb +0 -16
  281. data/vendor/gems/butterfly/test/test_default.rb +0 -12
  282. data/vendor/gems/butterfly/test/test_helper.rb +0 -6
  283. data/vendor/gems/dslify/History.txt +0 -4
  284. data/vendor/gems/dslify/Manifest.txt +0 -25
  285. data/vendor/gems/dslify/PostInstall.txt +0 -5
  286. data/vendor/gems/dslify/README.txt +0 -60
  287. data/vendor/gems/dslify/Rakefile +0 -56
  288. data/vendor/gems/dslify/config/hoe.rb +0 -73
  289. data/vendor/gems/dslify/config/requirements.rb +0 -15
  290. data/vendor/gems/dslify/dslify.gemspec +0 -40
  291. data/vendor/gems/dslify/lib/dslify/dslify.rb +0 -69
  292. data/vendor/gems/dslify/lib/dslify/version.rb +0 -10
  293. data/vendor/gems/dslify/lib/dslify.rb +0 -7
  294. data/vendor/gems/dslify/script/console +0 -10
  295. data/vendor/gems/dslify/script/destroy +0 -14
  296. data/vendor/gems/dslify/script/generate +0 -14
  297. data/vendor/gems/dslify/script/txt2html +0 -82
  298. data/vendor/gems/dslify/setup.rb +0 -1585
  299. data/vendor/gems/dslify/tasks/deployment.rake +0 -34
  300. data/vendor/gems/dslify/tasks/environment.rake +0 -7
  301. data/vendor/gems/dslify/tasks/website.rake +0 -17
  302. data/vendor/gems/dslify/test/test_dslify.rb +0 -114
  303. data/vendor/gems/dslify/website/index.html +0 -86
  304. data/vendor/gems/dslify/website/index.txt +0 -83
  305. data/vendor/gems/dslify/website/javascripts/rounded_corners_lite.inc.js +0 -285
  306. data/vendor/gems/dslify/website/stylesheets/screen.css +0 -138
  307. data/vendor/gems/dslify/website/template.html.erb +0 -48
  308. data/vendor/gems/parenting/History.txt +0 -4
  309. data/vendor/gems/parenting/Manifest.txt +0 -13
  310. data/vendor/gems/parenting/PostInstall.txt +0 -2
  311. data/vendor/gems/parenting/README.rdoc +0 -47
  312. data/vendor/gems/parenting/Rakefile +0 -28
  313. data/vendor/gems/parenting/lib/parenting/base.rb +0 -65
  314. data/vendor/gems/parenting/lib/parenting.rb +0 -10
  315. data/vendor/gems/parenting/parenting.gemspec +0 -39
  316. data/vendor/gems/parenting/script/console +0 -10
  317. data/vendor/gems/parenting/script/destroy +0 -14
  318. data/vendor/gems/parenting/script/generate +0 -14
  319. data/vendor/gems/parenting/test/file_to_eval.rb +0 -9
  320. data/vendor/gems/parenting/test/test_helper.rb +0 -5
  321. data/vendor/gems/parenting/test/test_parenting.rb +0 -89
  322. data/vendor/gems/suitcase/LICENSE +0 -20
  323. data/vendor/gems/suitcase/README.rdoc +0 -31
  324. data/vendor/gems/suitcase/Rakefile +0 -57
  325. data/vendor/gems/suitcase/VERSION.yml +0 -4
  326. data/vendor/gems/suitcase/lib/suitcase/unzipper.rb +0 -15
  327. data/vendor/gems/suitcase/lib/suitcase/zipper.rb +0 -119
  328. data/vendor/gems/suitcase/lib/suitcase.rb +0 -5
  329. data/vendor/gems/suitcase/suitcase.gemspec +0 -32
  330. data/vendor/gems/suitcase/test/suitcase_test.rb +0 -102
  331. data/vendor/gems/suitcase/test/test_dir/box.rb +0 -1
  332. data/vendor/gems/suitcase/test/test_dir/test.txt +0 -1
  333. data/vendor/gems/suitcase/test/test_helper.rb +0 -12
@@ -1,81 +1,32 @@
1
- # =begin rdoc
2
- # Monitor class
3
- #
4
- # Monitors are the basis for PoolParty scaling. Your cloud will expand and
5
- # contract against these monitors. You can set your cloud to be monitored by these
6
- # monitors simply by using them in the contract_when and the expand_when macros
7
- # on your cloud like so:
8
- #
9
- # expand_when "cpu > 1.2", "memory > 0.94"
10
- # contract_when "cpu < 0.4", "memory < 0.3"
11
- #
12
- # You can also add your own monitors simply by creating a directory in the same
13
- # directory as the pool spec (the same directory as the plugin directory exists) and
14
- # placing your monitor file (format: [monitorname]_monitor.rb) there.
15
- #
16
- # Monitors are simply classes of the name of the monitor. They subclass the BaseMonitor
17
- # class from PoolParty. A sample monitor would look similar to:
18
- #
19
- # class SampleMonitor < PoolParty::Monitors::BaseMonitor
20
- # def run
21
- # end
22
- # end
23
- # register_monitor :sample
24
- #
25
- # The monitor class must have an instance level method called run. This method is called when
26
- # the cloud is checking the monitor. The output of this method should be the output of
27
- # the monitor.
28
- #
29
- # Notice that at the end, you must call register_monitor :monitorname. This will tell your cloud
30
- # that it can monitor it with this monitor.
31
- # =end
32
- # require "#{::File.dirname(__FILE__)}/../poolparty/default"
33
- #
34
- # module PoolParty
35
- # module Monitors
36
- #
37
- # module ClassMethods
38
- # end
39
- #
40
- # module InstanceMethods
41
- # def expand_when(*arr)
42
- # @expand_when ||= ((arr && arr.empty?) ? options[:expand_when] : configure(:expand_when => self.class.send(:rules,:expand_when,arr,false)))
43
- # end
44
- #
45
- # def contract_when(*arr)
46
- # @contract_when ||= ((arr&&arr.empty?) ? options[:contract_when] : configure(:contract_when => self.class.send(:rules,:contract_when,arr,false)))
47
- # end
48
- # end
49
- #
50
- # def self.register_monitor(*args)
51
- # args.each do |arg|
52
- # (available_monitors << "#{arg}".downcase.to_sym unless available_monitors.include?("#{arg}".downcase.to_sym))
53
- #
54
- # InstanceMethods.module_eval "def #{arg}; @#{arg} ||= get_live_#{arg}; end"
55
- # InstanceMethods.module_eval "def get_live_#{arg}; messenger_send!(\"get_current_load #{arg}\").to_f rescue -1.0; end"
56
- # end
57
- # end
58
- #
59
- # def self.available_monitors
60
- # $available_monitors ||= []
61
- # end
62
- #
63
- # class BaseMonitor
64
- # def self.run
65
- # new.run
66
- # end
67
- # end
68
- #
69
- # def self.included(receiver)
70
- # receiver.extend PoolParty::Monitors::ClassMethods
71
- # receiver.send :include, PoolParty::Monitors::InstanceMethods
72
- # receiver.send :include, Aska
73
- # end
74
- #
75
- # end
76
- # end
77
- #
78
- # # Require included monitors
79
- # Dir["#{File.dirname(__FILE__)}/monitors/*.rb"].each {|f| require f}
80
- # # Require custom monitors
81
- # Dir["#{PoolParty::Default.custom_monitor_directories}/*.rb"].each {|f| require f}
1
+ =begin rdoc
2
+ BaseMonitor
3
+
4
+ BaseMonitor adds a basic base monitor with callbacks for the
5
+ monitors
6
+ =end
7
+ module Monitors
8
+ class BaseMonitor
9
+
10
+ def initialize(env=nil)
11
+ @env=env
12
+ end
13
+
14
+ %w(close).each do |event|
15
+ %w(before after).each do |time|
16
+ module_eval <<-EOE
17
+ def #{time}_#{event}(m=nil, &block)
18
+ #{time}_#{event}_callbacks << block ? block : m.to_sym
19
+ end
20
+ EOE
21
+ end
22
+
23
+ end
24
+
25
+ def before_close_callbacks
26
+ @before_close_callbacks ||= []
27
+ end
28
+ def after_close_callbacks
29
+ @after_close_callbacks ||= []
30
+ end
31
+ end
32
+ end
@@ -1,48 +1,57 @@
1
- require ::File.dirname(__FILE__)+"/../aska/aska.rb"
2
- require ::File.dirname(__FILE__)+"/../lite.rb"
1
+ =begin rdoc
2
+ MonitorRack is a rack application that maps url requests to method calls on Monitor classes.
3
+ =end
4
+
5
+ require ::File.dirname(__FILE__)+"/../aska/aska"
6
+ require ::File.dirname(__FILE__)+"/../lite"
7
+ require ::File.dirname(__FILE__)+"/base_monitor"
3
8
 
4
9
  require 'rubygems'
5
10
  require 'rack'
6
11
  require 'json'
7
12
 
8
- class String
9
- def camelcase
10
- gsub(/(^|_|-)(.)/) { $2.upcase }
13
+ # We add an after hook to Rack::Response so that we can initiate a connection after
14
+ # The response is sent back to client.
15
+ # PoolParty uses this to update a value, and then pass it on to another node.
16
+ class Rack::Response
17
+ %w(close).each do |event|
18
+ module_eval "def before_#{event}_callbacks;@before_#{event}_callbacks ||= [];end"
19
+ module_eval "def after_#{event}_callbacks;@after_#{event}_callbacks ||= [];end"
20
+ end
21
+
22
+ def close
23
+ before_close_callbacks.flatten.each {|a| a.call }
24
+ body.close if body.respond_to?(:close)
25
+ after_close_callbacks.flatten.each {|a| a.call }
11
26
  end
27
+
12
28
  end
13
29
 
30
+ Dir[::File.dirname(__FILE__)+"/monitors/*"].each {|m| require m}
31
+ # PoolParty.require_user_directory "monitors"
32
+
14
33
  module Monitors
15
-
16
- # def self.call(env)
17
- # @request = Rack::Request.new(env)
18
- # @response = Rack::Response.new
19
- # begin
20
- # response.write map_to_class_method(path_map(env)).to_json
21
- # rescue Exception=>e
22
- # @response.write e
23
- # @response.status = 500
24
- # end
25
- # @response.finish # [response.status, response.headers, response.body]
26
- # end
27
34
 
28
35
  class MonitorRack
29
36
 
30
- def new(opts={})
31
- @opts=opts
32
- end
33
37
 
34
38
  def call(env)
35
- dup._call(env)
36
- end
37
-
38
- def _call(env)
39
39
  @env = env
40
+ @data = env['rack.input'].read rescue nil
40
41
  @request = Rack::Request.new env
41
42
  @response = Rack::Response.new
43
+ @instance = nil
42
44
  begin
43
45
  path_array= path_map(env['REQUEST_PATH']) || []
44
- puts "-- trying to map #{path_array.inspect}"
45
- @response.write map_to_class_method(path_array).to_json
46
+ verb = env['REQUEST_METHOD'].downcase
47
+ @response.write map_to_method(path_array, verb).to_json
48
+
49
+ if instance.respond_to? :before_close_callbacks
50
+ @response.before_close_callbacks << instance.before_close_callbacks
51
+ end
52
+ if instance.respond_to?(:after_close_callbacks)
53
+ @response.after_close_callbacks << instance.after_close_callbacks
54
+ end
46
55
  # rescue Exception=>e
47
56
  # @response.write e
48
57
  # @response.status = 500
@@ -50,6 +59,11 @@ module Monitors
50
59
  @response.finish # this is [response.status, response.headers, response.body]
51
60
  end
52
61
 
62
+ private
63
+ def instance
64
+ @instance ||= constantize( path_map.first ).new(env)
65
+ end
66
+
53
67
  def env
54
68
  @env
55
69
  end
@@ -60,73 +74,50 @@ module Monitors
60
74
  @request
61
75
  end
62
76
 
63
- def path_map(requested_path)
77
+ # Split the request path into an array
78
+ def path_map(requested_path=env['REQUEST_PATH'])
64
79
  requested_path.split('.')[0].split('/')[1..-1]
65
80
  end
66
81
 
67
82
  # Find class and call method from the pattern /class_name/method/args
68
- def map_to_class_method(path)
83
+ # GET /neighborhood => ::Monitors::Neighboorhood.get
84
+ # POST /neighborhood => ::Monitors::Neighboorhood.post(params)
85
+ # GET /neighborhood/size => ::Monitors::Neighboorhood.get_size
86
+ def map_to_method(path, verb='get')
69
87
  if !path or path.empty? or path[0].nil?
70
88
  response.write 'cannot map an empty path'
71
89
  response.status='404'
72
90
  else
73
- klass = constantize(path[0])
74
- raise "#{path[0]} did not map to a Constant" if !klass
91
+ raise "#{path[0]} did not map to a Constant" if !instance
75
92
  case path.size
76
- when 0
77
- self.respond_to?(:default) ? self.send(:default) : response.status='404'
78
- when 1
79
- klass.send(:default) rescue klass.new(env).send(:default)
80
- when 2
81
- klass.send(path[1].to_sym) rescue klass.new(env).send(path[1].to_sym)
82
- else
83
- klass.send(path[1].to_sym, *path[2..-1])
93
+ when 0 # usefull if you want to subclass from MonitorRack
94
+ self.respond_to?(verb.to_sym) ? self.send(verb.to_sym) : response.status='404'
95
+ when 1 # example: /stats
96
+ instance.send(verb.to_sym, @data)
97
+ when 2 # example: /stats/load
98
+ instance.send("#{verb}_#{path[1]}".to_sym, @data)
99
+ else # example: /stats/load/average/5/minutes
100
+ instance.send("#{verb}_#{path[1]}".to_sym, env['rack.input'].read, *path[2..-1])
84
101
  end
85
102
  end
86
103
  end
87
104
 
105
+ # Take a string and return a ruby object if a match is found in the base_objects namespace.
88
106
  def constantize(name, base_object=Monitors)
89
107
  begin
90
- const = base_object.constants.find{|cnst| cnst == name.camelcase}
108
+ const = base_object.constants.find{|cnst| cnst == camelcase(name)}
91
109
  base_object.module_eval const
92
110
  rescue Exception => e
93
111
  puts "#{name.camelcase} is not defined. #{e}"
94
112
  nil
95
113
  end
96
114
  end
97
-
98
- def default
99
- 'default response'
115
+
116
+ def camelcase(str)
117
+ str.gsub(/(^|_|-)(.)/) { $2.upcase }
100
118
  end
101
119
 
102
120
  end
103
121
 
104
- # Base monitor
105
- class MonitorBase
106
- def initialize(env={})
107
- @env = env
108
- end
109
- end
110
-
111
- #load our monitors
112
- require ::File.dirname(__FILE__)+"/stats_monitor.rb"
113
- require ::File.dirname(__FILE__)+"/neighborhood_monitor.rb"
114
-
115
122
 
116
- # just here as an example
117
- # access it at /monitor_time/ or /monitor_time/now
118
- class MonitorTime
119
- def self.default
120
- now
121
- end
122
- def self.now
123
- Time.now
124
- end
125
- end
126
-
127
- class Favicon < MonitorBase
128
- def self.default
129
- ''
130
- end
131
- end
132
123
  end
@@ -0,0 +1,12 @@
1
+ =begin rdoc
2
+ Simple dummy monitor to return a blank response to favicon requests.
3
+ =end
4
+ module Monitors
5
+
6
+ class Favicon < BaseMonitor
7
+ def get(data=nil)
8
+ ''
9
+ end
10
+ end
11
+
12
+ end
@@ -1,15 +1,9 @@
1
- # module PoolParty
2
- # module Monitors
3
- #
4
- # class LoadMonitor < BaseMonitor
5
- #
6
- # def run
7
- # stdout = %x[uptime]
8
- # stdout.split(/\s+/)[-1].to_f rescue 0.0
9
- # end
10
- #
11
- # end
12
- #
13
- # register_monitor :cpu
14
- # end
15
- # end
1
+ module Monitors
2
+
3
+ class Load < BaseMonitor
4
+ def get(data=nil)
5
+ %x{"uptime"}.split[-3].to_f
6
+ end
7
+ end
8
+
9
+ end
@@ -1,50 +1,50 @@
1
1
  # module PoolParty
2
- # module Monitors
3
- #
4
- # class MemoryMonitor < BaseMonitor
5
- #
6
- # def run
7
- # uname = %x[uname]
8
- # case uname.chomp
9
- # when "Darwin"
10
- # darwin_memory_usage
11
- # else
12
- # nix_memory_usage
13
- # end
14
- # end
15
- #
16
- # def darwin_memory_usage
17
- # str = %x[vm_stat]
18
- # keep_array = []
19
- # array_of_strings = str
20
- # begin
21
- # free_memory = array_of_strings[/free:(\W*)+([0-9]+)/, 2].to_f
22
- # active_memory = array_of_strings[/active:(\W*)([0-9]+)/, 2].to_f
23
- # inactive_memory = array_of_strings[/inactive:(\W*)([0-9]+)/, 2].to_f
24
- #
25
- # used_memory = (active_memory + inactive_memory)
26
- # total_memory = (free_memory + active_memory + inactive_memory)
27
- #
28
- # used_memory / total_memory
29
- # rescue Exception => e
30
- # 0.0
31
- # end
32
- # end
33
- #
34
- # def nix_memory_usage
35
- # str = %x[free -m | grep -i mem]
36
- # begin
37
- # total_memory = str.split[1].to_f
38
- # used_memory = str.split[2].to_f
39
- #
40
- # used_memory / total_memory
41
- # rescue Exception => e
42
- # 0.0
43
- # end
44
- # end
45
- #
46
- # end
47
- #
48
- # register_monitor :memory
49
- # end
2
+ module Monitors
3
+
4
+ class Memory < BaseMonitor
5
+
6
+ def get(data=nil)
7
+ uname = %x[uname]
8
+ case uname.chomp
9
+ when "Darwin"
10
+ darwin_memory_usage
11
+ else
12
+ nix_memory_usage
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def darwin_memory_usage
19
+ str = %x[vm_stat]
20
+ keep_array = []
21
+ array_of_strings = str
22
+ begin
23
+ free_memory = array_of_strings[/free:(\W*)+([0-9]+)/, 2].to_f
24
+ active_memory = array_of_strings[/active:(\W*)([0-9]+)/, 2].to_f
25
+ inactive_memory = array_of_strings[/inactive:(\W*)([0-9]+)/, 2].to_f
26
+
27
+ used_memory = (active_memory + inactive_memory)
28
+ total_memory = (free_memory + active_memory + inactive_memory)
29
+
30
+ used_memory / total_memory
31
+ rescue Exception => e
32
+ 0.0
33
+ end
34
+ end
35
+
36
+ def nix_memory_usage
37
+ str = %x[free -m | grep -i mem]
38
+ begin
39
+ total_memory = str.split[1].to_f
40
+ used_memory = str.split[2].to_f
41
+
42
+ used_memory / total_memory
43
+ rescue Exception => e
44
+ 0.0
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
50
  # end
@@ -0,0 +1,77 @@
1
+ require ::File.dirname(__FILE__)+"/../../core/hash.rb"
2
+ require ::File.dirname(__FILE__)+"/../../core/array.rb"
3
+ require "#{::File.dirname(__FILE__)}/../../poolparty/neighborhoods"
4
+ require 'rest_client'
5
+
6
+ module Monitors
7
+
8
+ class Neighborhood < BaseMonitor
9
+
10
+ def get(data=nil)
11
+ neighborhood
12
+ end
13
+
14
+ def put(data, from=nil)
15
+ @neighborhood_instances = merge_array_of_hashes_with_key(neighborhood.instances, JSON.parse(data), 'ip')
16
+ @neighborhood = {@neighborhood[:instances] => @neighborhood_instances}
17
+ after_close do
18
+ if @neighborhood.instances.size>1
19
+ # TODO: Add logger here
20
+ puts "Pinging #{"#{@neighborhood.instances.rand.ip}/neighborhood"}"
21
+ RestClient.put "#{@neighborhood.instances.rand.ip}/neighborhood", @neighborhood, :content_type => 'text/x-json'
22
+ end
23
+ end
24
+ save
25
+ end
26
+
27
+ def post(data)
28
+ received = JSON.parse(data)
29
+ @neighborhood = JSON.parse(data)
30
+ save
31
+ end
32
+
33
+ private
34
+ def myself
35
+ @myself ||= @neighborhood.instance.select_with_hash('ip'=>@env['REQUEST_IP'])
36
+ end
37
+
38
+ def neighborhood
39
+ @neighborhood ||= {
40
+ :instances => instances,
41
+ :stats => stats
42
+ } #rescue [{"instance_id"=>"1000", "ip"=>"172.16.68.128"}, {"instance_id"=>"456", "ip"=>"172.16.68.130"}]
43
+ end
44
+
45
+ def save(filepath='/etc/poolparty/neighborhood.json')
46
+ puts "\n---\n#{neighborhood.to_json}\n---\n"
47
+ ::File.open(filepath, "w") {|f| f << neighborhood.to_json }
48
+ neighborhood
49
+ end
50
+
51
+ # Take two arrays of hashes and merge them based on a common key.
52
+ # For example:
53
+ # a1=[{:a=>'a'}, {'tt'=>5}]
54
+ # a2= [{:a=>'a', :new=>'stuff'}, {'c'=>'C'}]
55
+ # will merge to: [{:a=>"a", :new=>"stuff"}, {"tt"=>5}, {"c"=>"C"}]
56
+ def merge_array_of_hashes_with_key(arr1, arr2, key)
57
+ ar1=arr1.dup
58
+ ar2= arr2.dup
59
+ first_pass = ar1.collect{|h1|
60
+ found = ar2.detect{|hsh|
61
+ hsh.has_key?(key) && hsh[key]==h1[key] && ar2.delete_at(ar2.index(hsh))
62
+ }
63
+ found ? found : h1
64
+ }
65
+ first_pass + ar2
66
+ end
67
+
68
+ # HELPERS
69
+ def instances
70
+ @instances ||= ::PoolParty::Neighborhoods.load_default.instances.to_hash[:instances]
71
+ end
72
+ def stats
73
+ @stats ||= ::PoolParty::Neighborhoods.load_default.stats rescue Stats.new(@env).get
74
+ end
75
+
76
+ end
77
+ end
@@ -1,8 +1,11 @@
1
- require ::File.dirname(__FILE__)+"/monitor_rack.rb"
1
+ =begin rdoc
2
+ Stats returns the basic node metrics and checks to see if any actions should be taken based
3
+ on the default expand and contract rules defined in the clouds.rb file.
4
+ =end
2
5
 
3
6
  module Monitors
4
-
5
- class Stats
7
+
8
+ class Stats < BaseMonitor
6
9
  attr_reader :stats, :request
7
10
  attr_accessor :response
8
11
 
@@ -14,36 +17,26 @@ module Monitors
14
17
  begin
15
18
  @cloud = JSON.parse( open('/etc/poolparty/clouds.json' ).read )
16
19
  rescue
17
- @cloud = ::PoolParty::Default.options.merge({"options" =>
18
- {"rules" => {"expand" => PoolParty::Default.expand_when,
19
- "contract" => PoolParty::Default.contract_when
20
+ @cloud = ::PoolParty::Default.options.merge({"options" =>
21
+ {"rules" => {"expand" => PoolParty::Default.expand_when,
22
+ "contract" => PoolParty::Default.contract_when
20
23
  }
21
24
  }
22
25
  })
23
- end
26
+ end
24
27
  # Our cloud.options.rules looks like
25
28
  # {"expand_when" => "load > 0.9", "contract_when" => "load < 0.4"}
26
- # We set these as rules on ourselves so we can use aska to parse the rules
27
- # So later, we can call vote_rules on ourself and we'll get back Aska::Rule(s)
29
+ # We set these as rules on ourselves so we can use aska to parse the rules.
30
+ # Later, we can call vote_rules on ourself and we'll get back Aska::Rule(s)
28
31
  # which we'll call valid_rule? for each Rule and return the result
29
32
  @cloud["options"]["rules"].each do |name, rul|
30
33
  r = Aska::Rule.new(rul)
31
34
  rule(name) << r
32
35
  end
33
- log << "#{Time.now.strftime("%Y-%m-%d-%H-%M")}, #{stats.to_json}\n"
36
+ # log << "#{::Time.now.strftime("%Y-%m-%d-%H-%M")}, #{stats.to_json}\n"
34
37
  end
35
38
 
36
- def log(log_file_path="/var/log/poolparty/stats_monitor.log")
37
- if @logfile
38
- @logfile
39
- else
40
- ::File.file? log_file_path
41
- ::FileUtils.mkdir_p ::File.dirname(log_file_path) unless ::File.directory?(::File.dirname(log_file_path))
42
- @logfile ||= ::File.open(log_file_path, 'a+')
43
- end
44
- end
45
-
46
- def default
39
+ def get(data=nil)
47
40
  begin
48
41
  if !request.params || request.params.empty?
49
42
  default_stats
@@ -56,8 +49,8 @@ module Monitors
56
49
  "Error: #{e}"
57
50
  end
58
51
  end
59
-
60
- def put
52
+
53
+ def put(data)
61
54
  if d = JSON.parse(request.params)
62
55
  hsh = d.reject {|ip, _node| ip == my_ip }
63
56
  stats.merge!(hsh)
@@ -67,7 +60,19 @@ module Monitors
67
60
  end
68
61
  end
69
62
  alias :update :put
70
-
63
+
64
+ protected
65
+
66
+ def log(log_file_path="/var/log/poolparty/stats_monitor.log")
67
+ if @logfile
68
+ @logfile
69
+ else
70
+ ::File.file? log_file_path
71
+ ::FileUtils.mkdir_p ::File.dirname(log_file_path) unless ::File.directory?(::File.dirname(log_file_path))
72
+ @logfile ||= ::File.open(log_file_path, 'a+')
73
+ end
74
+ end
75
+
71
76
  # Handle the elections
72
77
  def handle_election
73
78
  # Ballots look like:
@@ -0,0 +1,15 @@
1
+ # An example monitor
2
+ # access it at /monitor_time/ or /monitor_time/now
3
+ module Monitors
4
+
5
+ class Time < BaseMonitor
6
+ def get(data=nil)
7
+ Time.now
8
+ end
9
+
10
+ def get_now
11
+ Time.now
12
+ end
13
+ end
14
+
15
+ end
@@ -1,3 +1,5 @@
1
+ # TODO: Deprecate this file
2
+
1
3
  =begin rdoc
2
4
  The connection to the messenger from poolparty, the client.
3
5