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.
- data/README.txt +0 -12
- data/Rakefile +17 -1
- data/VERSION.yml +1 -1
- data/bin/cloud +20 -1
- data/bin/cloud-bootstrap +14 -4
- data/bin/cloud-configure +26 -9
- data/bin/cloud-contract +7 -7
- data/bin/cloud-describe +28 -0
- data/bin/cloud-expand +13 -6
- data/bin/cloud-list +3 -5
- data/bin/cloud-osxcopy +1 -1
- data/bin/cloud-provision +1 -1
- data/bin/cloud-show +6 -5
- data/bin/cloud-ssh +1 -3
- data/bin/cloud-start +8 -6
- data/bin/cloud-terminate +9 -7
- data/bin/server-cloud-elections +29 -18
- data/bin/server-ensure-provisioning +24 -29
- data/bin/server-list-active +10 -5
- data/bin/server-monitor.ru +18 -1
- data/bin/server-update-hosts +3 -3
- data/bin/server-write-new-nodes +1 -1
- data/config/jeweler.rb +12 -3
- data/lib/poolparty/aska/aska.rb +1 -12
- data/lib/poolparty/base_packages/haproxy.rb +26 -18
- data/lib/poolparty/base_packages/poolparty.rb +1 -1
- data/lib/poolparty/capistrano.rb +1 -1
- data/lib/poolparty/core/array.rb +12 -0
- data/lib/poolparty/core/hash.rb +12 -5
- data/lib/poolparty/core/nil.rb +8 -0
- data/lib/poolparty/core/object.rb +15 -5
- data/lib/poolparty/core/string.rb +28 -2
- data/lib/poolparty/dependency_resolver/chef_resolver.rb +106 -79
- data/lib/poolparty/dependency_resolver/dependency_resolver.rb +1 -1
- data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +5 -4
- data/lib/poolparty/dependency_resolver/puppet_resolver.rb +44 -17
- data/lib/poolparty/helpers/console.rb +1 -1
- data/lib/poolparty/helpers/optioner.rb +9 -2
- data/lib/poolparty/lite.rb +12 -2
- data/lib/poolparty/modules/callbacks.rb +44 -0
- data/lib/poolparty/modules/cloud_dsl.rb +17 -11
- data/lib/poolparty/modules/cloud_resourcer.rb +29 -21
- data/lib/poolparty/modules/definable_resource.rb +1 -1
- data/lib/poolparty/modules/pinger.rb +28 -0
- data/lib/poolparty/modules/resourcing_dsl.rb +7 -3
- data/lib/poolparty/modules/thread_pool.rb +107 -106
- data/lib/poolparty/modules/user_helpers.rb +20 -0
- data/lib/poolparty/monitors/base_monitor.rb +32 -81
- data/lib/poolparty/monitors/monitor_rack.rb +60 -69
- data/lib/poolparty/monitors/monitors/favicon_monitor.rb +12 -0
- data/lib/poolparty/monitors/monitors/load_monitor.rb +9 -15
- data/lib/poolparty/monitors/monitors/memory_monitor.rb +48 -48
- data/lib/poolparty/monitors/monitors/neighborhood_monitor.rb +77 -0
- data/lib/poolparty/monitors/{stats_monitor.rb → monitors/stats_monitor.rb} +29 -24
- data/lib/poolparty/monitors/monitors/time_monitor.rb +15 -0
- data/lib/poolparty/net/messenger.rb +2 -0
- data/lib/poolparty/net/remoter/cloud_control.rb +177 -227
- data/lib/poolparty/net/remoter/connections.rb +10 -18
- data/lib/poolparty/net/remoter/interactive.rb +24 -90
- data/lib/poolparty/net/remoter_base.rb +98 -25
- data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +83 -66
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vm_disk.rb +12 -0
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx.rb +33 -0
- data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx_file.rb +117 -0
- data/lib/poolparty/net/remoter_bases/vmrun/vmrun.rb +165 -0
- data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +71 -0
- data/lib/poolparty/{base_packages → plugins}/bind.rb +1 -1
- data/lib/poolparty/plugins/chef.rb +71 -71
- data/lib/poolparty/plugins/chef_deploy.rb +58 -0
- data/lib/poolparty/plugins/{deploydirectory.rb → deploy_directory.rb} +12 -3
- data/lib/poolparty/plugins/dynomite.rb +14 -0
- data/lib/poolparty/plugins/gem_package.rb +37 -0
- data/lib/poolparty/plugins/line_in_file.rb +1 -0
- data/lib/poolparty/plugins/nanite.rb +41 -0
- data/lib/poolparty/{base_packages → plugins}/tokyo_tyrant.rb +1 -1
- data/lib/poolparty/poolparty/cloud.rb +36 -35
- data/lib/poolparty/poolparty/default.rb +2 -11
- data/lib/poolparty/poolparty/key.rb +15 -12
- data/lib/poolparty/poolparty/neighborhoods.rb +54 -21
- data/lib/poolparty/poolparty/plugin.rb +6 -9
- data/lib/poolparty/poolparty/plugin_model.rb +5 -5
- data/lib/poolparty/poolparty/pool.rb +8 -4
- data/lib/poolparty/poolparty/poolparty_base_class.rb +20 -11
- data/lib/poolparty/poolparty/resource.rb +9 -5
- data/lib/poolparty/poolparty/service.rb +3 -1
- data/lib/poolparty/provision/boot_strapper.rb +47 -24
- data/lib/poolparty/provision/configurations/chef.rb +7 -4
- data/lib/poolparty/provision/dr_configure.rb +80 -25
- data/lib/poolparty/resources/cron.rb +8 -0
- data/lib/poolparty/resources/directory.rb +1 -1
- data/lib/poolparty/resources/file.rb +16 -0
- data/lib/poolparty/resources/package.rb +7 -2
- data/lib/poolparty/resources/service.rb +4 -3
- data/lib/poolparty/resources/symlink.rb +0 -8
- data/lib/poolparty/schema.rb +35 -20
- data/lib/poolparty/templates/haproxy.conf +27 -25
- data/lib/poolparty/templates/monitor.ru +3 -3
- data/lib/poolparty/verification/verifier_base.rb +17 -0
- data/lib/poolparty/verification/verifiers/ping.rb +17 -0
- data/lib/poolparty/verification/verify.rb +74 -0
- data/lib/poolparty.rb +8 -9
- data/lib/poolpartycl.rb +14 -0
- data/spec/bin/server-list-active_spec.rb +2 -0
- data/spec/poolparty/base_packages/haproxy_spec.rb +1 -1
- data/spec/poolparty/core/array_spec.rb +3 -1
- data/spec/poolparty/core/ordered_hash_spec.rb +2 -2
- data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +9 -15
- data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +6 -6
- data/spec/poolparty/dependency_resolver/puppet_resolver_spec.rb +121 -124
- data/spec/poolparty/net/remote_spec.rb +287 -286
- data/spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb +1 -1
- data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +7 -8
- data/spec/poolparty/net/remoter_bases/ec2_spec.rb +22 -7
- data/spec/poolparty/net/remoter_spec.rb +48 -45
- data/spec/poolparty/poolparty/cloud_spec.rb +15 -22
- data/spec/poolparty/poolparty/key_spec.rb +4 -4
- data/spec/poolparty/poolparty/neighborhoods_spec.rb +1 -2
- data/spec/poolparty/poolparty/plugin_spec.rb +2 -2
- data/spec/poolparty/poolparty/resource_spec.rb +4 -5
- data/spec/poolparty/poolparty_base_class_spec.rb +82 -78
- data/spec/poolparty/resources/package_spec.rb +0 -3
- data/spec/poolparty/spec_helper.rb +4 -4
- data/tasks/development.rake +9 -0
- data/test/poolparty/core/array_test.rb +21 -0
- data/test/poolparty/core/hash_test.rb +14 -1
- data/test/poolparty/core/string_test.rb +29 -0
- data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +106 -0
- data/test/poolparty/modules/callbacks_test.rb +40 -0
- data/test/poolparty/modules/cloud_dsl_test.rb +25 -0
- data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +50 -0
- data/test/poolparty/net/remoter_test.rb +14 -0
- data/test/poolparty/poolparty/neighborhood_test.rb +23 -0
- data/test/poolparty/poolparty/poolparty_base_class_test.rb +84 -0
- data/test/poolparty/verification/verify_test.rb +49 -0
- data/test/test_helper.rb +4 -1
- data/test/test_poolparty.rb +6 -5
- data/vendor/chef/apache2/attributes/apache.rb +1 -1
- data/vendor/chef/apache2/templates/default/default-site.erb +1 -1
- data/vendor/chef/chef-deploy/LICENSE +201 -0
- data/vendor/chef/chef-deploy/README.rdoc +24 -0
- data/vendor/chef/chef-deploy/Rakefile +57 -0
- data/vendor/chef/chef-deploy/TODO +4 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy/cached_deploy.rb +230 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy/git.rb +132 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy/subversion.rb +98 -0
- data/vendor/chef/chef-deploy/lib/chef-deploy.rb +183 -0
- metadata +57 -252
- data/bin/cloud-run +0 -18
- data/bin/cloud-stats +0 -17
- data/bin/ec2-list-active +0 -24
- data/bin/pool +0 -31
- data/bin/pool-describe +0 -8
- data/bin/pool-generate +0 -18
- data/bin/pool-init +0 -28
- data/bin/pool-list +0 -30
- data/bin/pool-start +0 -26
- data/bin/server-list-instances +0 -15
- data/lib/erlang/messenger/Emakefile +0 -1
- data/lib/erlang/messenger/Makefile +0 -15
- data/lib/erlang/messenger/README +0 -5
- data/lib/erlang/messenger/Rakefile +0 -72
- data/lib/erlang/messenger/control +0 -11
- data/lib/erlang/messenger/ebin/client.app +0 -19
- data/lib/erlang/messenger/ebin/master.app +0 -19
- data/lib/erlang/messenger/ebin/node.app +0 -19
- data/lib/erlang/messenger/ebin/packager.app +0 -19
- data/lib/erlang/messenger/ebin/pm_client_rel-0.1.rel +0 -1
- data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +0 -1
- data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +0 -1
- data/lib/erlang/messenger/include/defines.hrl +0 -27
- data/lib/erlang/messenger/lib/eunit/AUTHORS +0 -2
- data/lib/erlang/messenger/lib/eunit/CHANGELOG +0 -14
- data/lib/erlang/messenger/lib/eunit/COPYING +0 -504
- data/lib/erlang/messenger/lib/eunit/Makefile +0 -28
- data/lib/erlang/messenger/lib/eunit/NOTES +0 -276
- data/lib/erlang/messenger/lib/eunit/README +0 -3
- data/lib/erlang/messenger/lib/eunit/doc/edoc-info +0 -3
- data/lib/erlang/messenger/lib/eunit/doc/erlang.png +0 -0
- data/lib/erlang/messenger/lib/eunit/doc/eunit.html +0 -172
- data/lib/erlang/messenger/lib/eunit/doc/index.html +0 -17
- data/lib/erlang/messenger/lib/eunit/doc/modules-frame.html +0 -12
- data/lib/erlang/messenger/lib/eunit/doc/overview-summary.html +0 -984
- data/lib/erlang/messenger/lib/eunit/doc/overview.edoc +0 -980
- data/lib/erlang/messenger/lib/eunit/doc/packages-frame.html +0 -11
- data/lib/erlang/messenger/lib/eunit/doc/stylesheet.css +0 -55
- data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.app +0 -21
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.appup +0 -1
- data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
- data/lib/erlang/messenger/lib/eunit/examples/eunit_examples.erl +0 -339
- data/lib/erlang/messenger/lib/eunit/examples/fib.erl +0 -19
- data/lib/erlang/messenger/lib/eunit/examples/tests.txt +0 -1
- data/lib/erlang/messenger/lib/eunit/include/eunit.hrl +0 -313
- data/lib/erlang/messenger/lib/eunit/src/Makefile +0 -46
- data/lib/erlang/messenger/lib/eunit/src/autoload.erl +0 -388
- data/lib/erlang/messenger/lib/eunit/src/code_monitor.erl +0 -243
- data/lib/erlang/messenger/lib/eunit/src/eunit.app.src +0 -21
- data/lib/erlang/messenger/lib/eunit/src/eunit.appup.src +0 -1
- data/lib/erlang/messenger/lib/eunit/src/eunit.erl +0 -196
- data/lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl +0 -102
- data/lib/erlang/messenger/lib/eunit/src/eunit_data.erl +0 -798
- data/lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl +0 -48
- data/lib/erlang/messenger/lib/eunit/src/eunit_lib.erl +0 -682
- data/lib/erlang/messenger/lib/eunit/src/eunit_proc.erl +0 -552
- data/lib/erlang/messenger/lib/eunit/src/eunit_serial.erl +0 -157
- data/lib/erlang/messenger/lib/eunit/src/eunit_server.erl +0 -340
- data/lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl +0 -64
- data/lib/erlang/messenger/lib/eunit/src/eunit_test.erl +0 -334
- data/lib/erlang/messenger/lib/eunit/src/eunit_tests.erl +0 -45
- data/lib/erlang/messenger/lib/eunit/src/eunit_tty.erl +0 -272
- data/lib/erlang/messenger/lib/eunit/src/file_monitor.erl +0 -409
- data/lib/erlang/messenger/lib/eunit/sys.config +0 -9
- data/lib/erlang/messenger/lib/eunit/vsn.mk +0 -1
- data/lib/erlang/messenger/pm_client_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_client_rel-0.1.script +0 -238
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +0 -239
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +0 -237
- data/lib/erlang/messenger/src/client_app.erl +0 -39
- data/lib/erlang/messenger/src/client_server.erl +0 -60
- data/lib/erlang/messenger/src/master_app.erl +0 -39
- data/lib/erlang/messenger/src/node_app.erl +0 -39
- data/lib/erlang/messenger/src/pm_client.erl +0 -49
- data/lib/erlang/messenger/src/pm_client_supervisor.erl +0 -38
- data/lib/erlang/messenger/src/pm_cluster.erl +0 -61
- data/lib/erlang/messenger/src/pm_event_manager.erl +0 -27
- data/lib/erlang/messenger/src/pm_master.erl +0 -215
- data/lib/erlang/messenger/src/pm_master_event_handler.erl +0 -72
- data/lib/erlang/messenger/src/pm_master_supervisor.erl +0 -39
- data/lib/erlang/messenger/src/pm_node.erl +0 -200
- data/lib/erlang/messenger/src/pm_node_supervisor.erl +0 -38
- data/lib/erlang/messenger/src/pm_packager.erl +0 -76
- data/lib/erlang/messenger/src/pm_spawner.erl +0 -213
- data/lib/erlang/messenger/src/pm_strings.erl +0 -11
- data/lib/erlang/messenger/src/utils.erl +0 -72
- data/lib/erlang/messenger/useful_snippets +0 -17
- data/lib/poolparty/monitors/monitors/server_monitor.rb +0 -7
- data/lib/poolparty/monitors/monitors/web_monitor.rb +0 -18
- data/lib/poolparty/monitors/neighborhood_monitor.rb +0 -24
- data/lib/poolparty/monitors.rb +0 -6
- data/lib/poolparty/net/remoter/lists.rb +0 -12
- data/lib/poolparty/poolparty/custom_resource.rb +0 -45
- data/lib/poolparty/resources/custom_service.rb +0 -30
- data/lib/poolparty/services/gem_package.rb +0 -52
- data/lib/poolparty/version.rb +0 -15
- data/spec/poolparty/plugins/svn_spec.rb +0 -16
- data/spec/poolparty/poolparty/custom_resource_spec.rb +0 -79
- data/vendor/gems/butterfly/History.txt +0 -4
- data/vendor/gems/butterfly/PostInstall.txt +0 -2
- data/vendor/gems/butterfly/README.rdoc +0 -48
- data/vendor/gems/butterfly/Rakefile +0 -62
- data/vendor/gems/butterfly/VERSION.yml +0 -4
- data/vendor/gems/butterfly/bin/flutter +0 -4
- data/vendor/gems/butterfly/butterfly.gemspec +0 -37
- data/vendor/gems/butterfly/examples/config.ru +0 -15
- data/vendor/gems/butterfly/examples/my_app.rb +0 -12
- data/vendor/gems/butterfly/lib/butterfly.rb +0 -14
- data/vendor/gems/butterfly/lib/handler.rb +0 -48
- data/vendor/gems/butterfly/lib/request.rb +0 -29
- data/vendor/gems/butterfly/lib/response.rb +0 -49
- data/vendor/gems/butterfly/script/console +0 -10
- data/vendor/gems/butterfly/script/destroy +0 -14
- data/vendor/gems/butterfly/script/generate +0 -14
- data/vendor/gems/butterfly/test/test_adapter_base.rb +0 -23
- data/vendor/gems/butterfly/test/test_butterfly_request.rb +0 -46
- data/vendor/gems/butterfly/test/test_butterfly_response.rb +0 -43
- data/vendor/gems/butterfly/test/test_butterfly_server.rb +0 -16
- data/vendor/gems/butterfly/test/test_default.rb +0 -12
- data/vendor/gems/butterfly/test/test_helper.rb +0 -6
- data/vendor/gems/dslify/History.txt +0 -4
- data/vendor/gems/dslify/Manifest.txt +0 -25
- data/vendor/gems/dslify/PostInstall.txt +0 -5
- data/vendor/gems/dslify/README.txt +0 -60
- data/vendor/gems/dslify/Rakefile +0 -56
- data/vendor/gems/dslify/config/hoe.rb +0 -73
- data/vendor/gems/dslify/config/requirements.rb +0 -15
- data/vendor/gems/dslify/dslify.gemspec +0 -40
- data/vendor/gems/dslify/lib/dslify/dslify.rb +0 -69
- data/vendor/gems/dslify/lib/dslify/version.rb +0 -10
- data/vendor/gems/dslify/lib/dslify.rb +0 -7
- data/vendor/gems/dslify/script/console +0 -10
- data/vendor/gems/dslify/script/destroy +0 -14
- data/vendor/gems/dslify/script/generate +0 -14
- data/vendor/gems/dslify/script/txt2html +0 -82
- data/vendor/gems/dslify/setup.rb +0 -1585
- data/vendor/gems/dslify/tasks/deployment.rake +0 -34
- data/vendor/gems/dslify/tasks/environment.rake +0 -7
- data/vendor/gems/dslify/tasks/website.rake +0 -17
- data/vendor/gems/dslify/test/test_dslify.rb +0 -114
- data/vendor/gems/dslify/website/index.html +0 -86
- data/vendor/gems/dslify/website/index.txt +0 -83
- data/vendor/gems/dslify/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/vendor/gems/dslify/website/stylesheets/screen.css +0 -138
- data/vendor/gems/dslify/website/template.html.erb +0 -48
- data/vendor/gems/parenting/History.txt +0 -4
- data/vendor/gems/parenting/Manifest.txt +0 -13
- data/vendor/gems/parenting/PostInstall.txt +0 -2
- data/vendor/gems/parenting/README.rdoc +0 -47
- data/vendor/gems/parenting/Rakefile +0 -28
- data/vendor/gems/parenting/lib/parenting/base.rb +0 -65
- data/vendor/gems/parenting/lib/parenting.rb +0 -10
- data/vendor/gems/parenting/parenting.gemspec +0 -39
- data/vendor/gems/parenting/script/console +0 -10
- data/vendor/gems/parenting/script/destroy +0 -14
- data/vendor/gems/parenting/script/generate +0 -14
- data/vendor/gems/parenting/test/file_to_eval.rb +0 -9
- data/vendor/gems/parenting/test/test_helper.rb +0 -5
- data/vendor/gems/parenting/test/test_parenting.rb +0 -89
- data/vendor/gems/suitcase/LICENSE +0 -20
- data/vendor/gems/suitcase/README.rdoc +0 -31
- data/vendor/gems/suitcase/Rakefile +0 -57
- data/vendor/gems/suitcase/VERSION.yml +0 -4
- data/vendor/gems/suitcase/lib/suitcase/unzipper.rb +0 -15
- data/vendor/gems/suitcase/lib/suitcase/zipper.rb +0 -119
- data/vendor/gems/suitcase/lib/suitcase.rb +0 -5
- data/vendor/gems/suitcase/suitcase.gemspec +0 -32
- data/vendor/gems/suitcase/test/suitcase_test.rb +0 -102
- data/vendor/gems/suitcase/test/test_dir/box.rb +0 -1
- data/vendor/gems/suitcase/test/test_dir/test.txt +0 -1
- data/vendor/gems/suitcase/test/test_helper.rb +0 -12
@@ -1,81 +1,32 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
#
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
2
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
45
|
-
@response.write
|
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
|
-
|
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
|
-
|
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
|
-
|
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?(
|
78
|
-
when 1
|
79
|
-
|
80
|
-
when 2
|
81
|
-
|
82
|
-
else
|
83
|
-
|
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
|
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
|
99
|
-
|
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
|
@@ -1,15 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
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"
|
19
|
-
|
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
|
-
#
|
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
|
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:
|