auser-poolparty 0.2.15 → 0.2.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest.txt +28 -10
- data/bin/cloud +2 -2
- data/bin/cloud-provision +1 -1
- data/bin/cloud-run +19 -0
- data/bin/pool +2 -2
- data/bin/server-fire-cmd +16 -0
- data/bin/server-start-master +32 -0
- data/bin/server-start-node +32 -0
- data/lib/erlang/messenger/Rakefile +12 -0
- data/lib/erlang/messenger/ebin/master.app +19 -0
- data/lib/erlang/messenger/ebin/master_app.beam +0 -0
- data/lib/erlang/messenger/{lib/load_app.app → ebin/node.app} +6 -5
- data/lib/erlang/messenger/ebin/node_app.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_event_handler.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +7 -0
- data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +7 -0
- data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/utils.beam +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_master_rel-0.1.script +169 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
- data/lib/erlang/messenger/pm_node_rel-0.1.script +169 -0
- data/lib/erlang/messenger/src/master_app.erl +39 -0
- data/lib/erlang/messenger/src/node_app.erl +39 -0
- data/lib/erlang/messenger/src/pm_client.erl +14 -0
- data/lib/erlang/messenger/src/pm_cluster.erl +4 -1
- data/lib/erlang/messenger/src/pm_event_handler.erl +21 -0
- data/lib/erlang/messenger/src/pm_master.erl +113 -21
- data/lib/erlang/messenger/src/pm_master_supervisor.erl +33 -1
- data/lib/erlang/messenger/src/pm_node.erl +111 -65
- data/lib/erlang/messenger/src/pm_node_supervisor.erl +22 -15
- data/lib/erlang/messenger/src/utils.erl +45 -0
- data/lib/poolparty/base_packages/ruby.rb +1 -1
- data/lib/poolparty/helpers/console.rb +3 -2
- data/lib/poolparty/helpers/optioner.rb +6 -2
- data/lib/poolparty/helpers/provisioner_base.rb +5 -3
- data/lib/poolparty/helpers/provisioners/slave.rb +3 -0
- data/lib/poolparty/modules/resourcing_dsl.rb +4 -0
- data/lib/poolparty/net/remote_instance.rb +1 -1
- data/lib/poolparty/net/remoter.rb +11 -4
- data/lib/poolparty/plugins/git.rb +6 -12
- data/lib/poolparty/version.rb +1 -1
- data/poolparty.gemspec +4 -4
- data/spec/poolparty/bin/console_spec.rb +1 -1
- data/spec/poolparty/helpers/optioner_spec.rb +2 -1
- data/spec/poolparty/helpers/provisioner_base_spec.rb +1 -1
- data/spec/poolparty/helpers/provisioners/master_spec.rb +1 -1
- data/spec/poolparty/net/remote_spec.rb +51 -42
- data/spec/poolparty/pool/resources/gem_spec.rb +0 -1
- data/website/index.html +1 -1
- metadata +34 -13
- data/bin/pool-start-monitor +0 -1
- data/lib/erlang/messenger/ebin/erl_crash.dump +0 -12138
- data/lib/erlang/messenger/ebin/load_app.beam +0 -0
- data/lib/erlang/messenger/src/load_app.erl +0 -26
@@ -0,0 +1,169 @@
|
|
1
|
+
%% script generated at {2008,10,23} {2,11,55}
|
2
|
+
{script,
|
3
|
+
{"pm_node_rel","0.1"},
|
4
|
+
[{preLoaded,
|
5
|
+
[erlang,erl_prim_loader,prim_file,prim_inet,init,otp_ring0]},
|
6
|
+
{progress,preloaded},
|
7
|
+
{path,
|
8
|
+
["/opt/local/lib/erlang/lib/kernel-2.12.2/ebin",
|
9
|
+
"/opt/local/lib/erlang/lib/stdlib-1.15.2/ebin"]},
|
10
|
+
{primLoad,[error_handler]},
|
11
|
+
{kernel_load_completed},
|
12
|
+
{progress,kernel_load_completed},
|
13
|
+
{path,["/opt/local/lib/erlang/lib/kernel-2.12.2/ebin"]},
|
14
|
+
{primLoad,
|
15
|
+
[zlib,wrap_log_reader,user_sup,user_drv,user,seq_trace,rpc,
|
16
|
+
ram_file,pg2,packages,os,net_kernel,net_adm,net,
|
17
|
+
kernel_config,kernel,inet_udp,inet_tcp_dist,inet_tcp,
|
18
|
+
inet_sctp,inet_res,inet_parse,inet_hosts,
|
19
|
+
inet_gethost_native,inet_dns,inet_db,inet_config,inet6_udp,
|
20
|
+
inet6_tcp_dist,inet6_tcp,inet,hipe_unified_loader,heart,
|
21
|
+
group,global_search,global_group,global,gen_udp,gen_tcp,
|
22
|
+
gen_sctp,file_server,file_io_server,file,erts_debug,
|
23
|
+
error_logger,erl_reply,erl_epmd,erl_distribution,erl_ddll,
|
24
|
+
erl_boot_server,dist_util,dist_ac,disk_log_sup,
|
25
|
+
disk_log_server,disk_log_1,disk_log,code_server,code_aux,
|
26
|
+
code,auth,application_starter,application_master,
|
27
|
+
application_controller,application]},
|
28
|
+
{path,["/opt/local/lib/erlang/lib/stdlib-1.15.2/ebin"]},
|
29
|
+
{primLoad,
|
30
|
+
[zip,win32reg,timer,sys,supervisor_bridge,supervisor,string,
|
31
|
+
sofs,slave,shell_default,shell,sets,regexp,random,queue,
|
32
|
+
qlc_pt,qlc,proplists,proc_lib,pool,pg,otp_internal,ordsets,
|
33
|
+
orddict,ms_transform,math,log_mf_h,lists,lib,io_lib_pretty,
|
34
|
+
io_lib_fread,io_lib_format,io_lib,io,gen_server,gen_fsm,
|
35
|
+
gen_event,gen,gb_trees,gb_sets,filename,filelib,file_sorter,
|
36
|
+
eval_bits,ets,escript,error_logger_tty_h,
|
37
|
+
error_logger_file_h,erl_tar,erl_scan,erl_pp,erl_posix_msg,
|
38
|
+
erl_parse,erl_lint,erl_internal,erl_expand_records,erl_eval,
|
39
|
+
erl_compile,erl_bits,epp,edlin_expand,edlin,digraph_utils,
|
40
|
+
digraph,dict,dets_v9,dets_v8,dets_utils,dets_sup,
|
41
|
+
dets_server,dets,calendar,c,beam_lib,base64,array]},
|
42
|
+
{path,["/opt/local/lib/erlang/lib/sasl-2.1.5.2/ebin"]},
|
43
|
+
{primLoad,
|
44
|
+
[systools_relup,systools_rc,systools_make,systools_lib,
|
45
|
+
systools,sasl_report_tty_h,sasl_report_file_h,sasl_report,
|
46
|
+
sasl,release_handler_1,release_handler,rb_format_supp,rb,
|
47
|
+
overload,misc_supp,format_lib_supp,erlsrv,alarm_handler]},
|
48
|
+
{path,
|
49
|
+
["/Users/auser/Sites/work/citrusbyte/internal/gems/pool-party/poolparty/lib/erlang/messenger/ebin"]},
|
50
|
+
{primLoad,[utils,pm_node_supervisor,pm_node,node_app]},
|
51
|
+
{progress,modules_loaded},
|
52
|
+
{path,
|
53
|
+
["/opt/local/lib/erlang/lib/kernel-2.12.2/ebin",
|
54
|
+
"/opt/local/lib/erlang/lib/stdlib-1.15.2/ebin",
|
55
|
+
"/opt/local/lib/erlang/lib/sasl-2.1.5.2/ebin",
|
56
|
+
"/Users/auser/Sites/work/citrusbyte/internal/gems/pool-party/poolparty/lib/erlang/messenger/ebin"]},
|
57
|
+
{kernelProcess,heart,{heart,start,[]}},
|
58
|
+
{kernelProcess,error_logger,{error_logger,start_link,[]}},
|
59
|
+
{kernelProcess,application_controller,
|
60
|
+
{application_controller,start,
|
61
|
+
[{application,kernel,
|
62
|
+
[{description,"ERTS CXC 138 10"},
|
63
|
+
{vsn,"2.12.2"},
|
64
|
+
{id,[]},
|
65
|
+
{modules,
|
66
|
+
[application,application_controller,application_master,
|
67
|
+
application_starter,auth,code,code_aux,packages,
|
68
|
+
code_server,dist_util,erl_boot_server,
|
69
|
+
erl_distribution,erl_prim_loader,erl_reply,erlang,
|
70
|
+
error_handler,error_logger,file,file_server,
|
71
|
+
file_io_server,prim_file,global,global_group,
|
72
|
+
global_search,group,heart,hipe_unified_loader,
|
73
|
+
inet6_tcp,inet6_tcp_dist,inet6_udp,inet_config,
|
74
|
+
inet_hosts,inet_gethost_native,inet_tcp_dist,init,
|
75
|
+
kernel,kernel_config,net,net_adm,net_kernel,os,
|
76
|
+
ram_file,rpc,user,user_drv,user_sup,disk_log,
|
77
|
+
disk_log_1,disk_log_server,disk_log_sup,dist_ac,
|
78
|
+
erl_ddll,erl_epmd,erts_debug,gen_tcp,gen_udp,gen_sctp,
|
79
|
+
prim_inet,inet,inet_db,inet_dns,inet_parse,inet_res,
|
80
|
+
inet_tcp,inet_udp,inet_sctp,pg2,seq_trace,
|
81
|
+
wrap_log_reader,zlib,otp_ring0]},
|
82
|
+
{registered,
|
83
|
+
[application_controller,erl_reply,auth,boot_server,
|
84
|
+
code_server,disk_log_server,disk_log_sup,
|
85
|
+
erl_prim_loader,error_logger,file_server_2,
|
86
|
+
fixtable_server,global_group,global_name_server,heart,
|
87
|
+
init,kernel_config,kernel_sup,net_kernel,net_sup,rex,
|
88
|
+
user,os_server,ddll_server,erl_epmd,inet_db,pg2]},
|
89
|
+
{applications,[]},
|
90
|
+
{included_applications,[]},
|
91
|
+
{env,[{error_logger,tty}]},
|
92
|
+
{start_phases,undefined},
|
93
|
+
{maxT,infinity},
|
94
|
+
{maxP,infinity},
|
95
|
+
{mod,{kernel,[]}}]}]}},
|
96
|
+
{progress,init_kernel_started},
|
97
|
+
{apply,
|
98
|
+
{application,load,
|
99
|
+
[{application,stdlib,
|
100
|
+
[{description,"ERTS CXC 138 10"},
|
101
|
+
{vsn,"1.15.2"},
|
102
|
+
{id,[]},
|
103
|
+
{modules,
|
104
|
+
[array,base64,beam_lib,c,calendar,dets,dets_server,
|
105
|
+
dets_sup,dets_utils,dets_v8,dets_v9,dict,digraph,
|
106
|
+
digraph_utils,edlin,edlin_expand,epp,eval_bits,
|
107
|
+
erl_bits,erl_compile,erl_eval,erl_expand_records,
|
108
|
+
erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp,
|
109
|
+
erl_scan,erl_tar,error_logger_file_h,
|
110
|
+
error_logger_tty_h,escript,ets,file_sorter,filelib,
|
111
|
+
filename,gb_trees,gb_sets,gen,gen_event,gen_fsm,
|
112
|
+
gen_server,io,io_lib,io_lib_format,io_lib_fread,
|
113
|
+
io_lib_pretty,lib,lists,log_mf_h,math,ms_transform,
|
114
|
+
orddict,ordsets,otp_internal,pg,pool,proc_lib,
|
115
|
+
proplists,qlc,qlc_pt,queue,random,regexp,sets,shell,
|
116
|
+
shell_default,slave,sofs,string,supervisor,
|
117
|
+
supervisor_bridge,sys,timer,win32reg,zip]},
|
118
|
+
{registered,
|
119
|
+
[timer_server,rsh_starter,take_over_monitor,
|
120
|
+
pool_master,dets]},
|
121
|
+
{applications,[kernel]},
|
122
|
+
{included_applications,[]},
|
123
|
+
{env,[]},
|
124
|
+
{start_phases,undefined},
|
125
|
+
{maxT,infinity},
|
126
|
+
{maxP,infinity}]}]}},
|
127
|
+
{apply,
|
128
|
+
{application,load,
|
129
|
+
[{application,sasl,
|
130
|
+
[{description,"SASL CXC 138 11"},
|
131
|
+
{vsn,"2.1.5.2"},
|
132
|
+
{id,[]},
|
133
|
+
{modules,
|
134
|
+
[sasl,alarm_handler,format_lib_supp,misc_supp,overload,
|
135
|
+
rb,rb_format_supp,release_handler,release_handler_1,
|
136
|
+
erlsrv,sasl_report,sasl_report_tty_h,
|
137
|
+
sasl_report_file_h,systools,systools_make,systools_rc,
|
138
|
+
systools_relup,systools_lib]},
|
139
|
+
{registered,
|
140
|
+
[sasl_sup,alarm_handler,overload,release_handler]},
|
141
|
+
{applications,[kernel,stdlib]},
|
142
|
+
{included_applications,[]},
|
143
|
+
{env,[{sasl_error_logger,tty},{errlog_type,all}]},
|
144
|
+
{start_phases,undefined},
|
145
|
+
{maxT,infinity},
|
146
|
+
{maxP,infinity},
|
147
|
+
{mod,{sasl,[]}}]}]}},
|
148
|
+
{apply,
|
149
|
+
{application,load,
|
150
|
+
[{application,node,
|
151
|
+
[{description,"Node Server for PoolParty"},
|
152
|
+
{vsn,"0.1"},
|
153
|
+
{id,[]},
|
154
|
+
{modules,[node_app,pm_node,pm_node_supervisor,utils]},
|
155
|
+
{registered,[pm_node,pm_node_supervisor]},
|
156
|
+
{applications,[kernel,stdlib]},
|
157
|
+
{included_applications,[]},
|
158
|
+
{env,[]},
|
159
|
+
{start_phases,[]},
|
160
|
+
{maxT,infinity},
|
161
|
+
{maxP,infinity},
|
162
|
+
{mod,{node_app,[]}}]}]}},
|
163
|
+
{progress,applications_loaded},
|
164
|
+
{apply,{application,start_boot,[kernel,permanent]}},
|
165
|
+
{apply,{application,start_boot,[stdlib,permanent]}},
|
166
|
+
{apply,{application,start_boot,[sasl,permanent]}},
|
167
|
+
{apply,{application,start_boot,[node,permanent]}},
|
168
|
+
{apply,{c,erlangrc,[]}},
|
169
|
+
{progress,started}]}.
|
@@ -0,0 +1,39 @@
|
|
1
|
+
-module (master_app).
|
2
|
+
-behaviour(application).
|
3
|
+
|
4
|
+
%% Application callbacks
|
5
|
+
-export([start/2, stop/1]).
|
6
|
+
|
7
|
+
%%====================================================================
|
8
|
+
%% Application callbacks
|
9
|
+
%%====================================================================
|
10
|
+
%%--------------------------------------------------------------------
|
11
|
+
%% Function: start(Type, StartArgs) -> {ok, Pid} |
|
12
|
+
%% {ok, Pid, State} |
|
13
|
+
%% {error, Reason}
|
14
|
+
%% Description: This function is called whenever an application
|
15
|
+
%% is started using application:start/1,2, and should start the processes
|
16
|
+
%% of the application. If the application is structured according to the
|
17
|
+
%% OTP design principles as a supervision tree, this means starting the
|
18
|
+
%% top supervisor of the tree.
|
19
|
+
%%--------------------------------------------------------------------
|
20
|
+
start(_Type, StartArgs) ->
|
21
|
+
case pm_master_supervisor:start_link(StartArgs) of
|
22
|
+
{ok, Pid} ->
|
23
|
+
{ok, Pid};
|
24
|
+
Error ->
|
25
|
+
Error
|
26
|
+
end.
|
27
|
+
|
28
|
+
%%--------------------------------------------------------------------
|
29
|
+
%% Function: stop(State) -> void()
|
30
|
+
%% Description: This function is called whenever an application
|
31
|
+
%% has stopped. It is intended to be the opposite of Module:start/2 and
|
32
|
+
%% should do any necessary cleaning up. The return value is ignored.
|
33
|
+
%%--------------------------------------------------------------------
|
34
|
+
stop(_State) ->
|
35
|
+
ok.
|
36
|
+
|
37
|
+
%%====================================================================
|
38
|
+
%% Internal functions
|
39
|
+
%%====================================================================
|
@@ -0,0 +1,39 @@
|
|
1
|
+
-module (node_app).
|
2
|
+
-behaviour(application).
|
3
|
+
|
4
|
+
%% Application callbacks
|
5
|
+
-export([start/2, stop/1]).
|
6
|
+
|
7
|
+
%%====================================================================
|
8
|
+
%% Application callbacks
|
9
|
+
%%====================================================================
|
10
|
+
%%--------------------------------------------------------------------
|
11
|
+
%% Function: start(Type, StartArgs) -> {ok, Pid} |
|
12
|
+
%% {ok, Pid, State} |
|
13
|
+
%% {error, Reason}
|
14
|
+
%% Description: This function is called whenever an application
|
15
|
+
%% is started using application:start/1,2, and should start the processes
|
16
|
+
%% of the application. If the application is structured according to the
|
17
|
+
%% OTP design principles as a supervision tree, this means starting the
|
18
|
+
%% top supervisor of the tree.
|
19
|
+
%%--------------------------------------------------------------------
|
20
|
+
start(_Type, StartArgs) ->
|
21
|
+
case pm_node_supervisor:start_link(StartArgs) of
|
22
|
+
{ok, Pid} ->
|
23
|
+
{ok, Pid};
|
24
|
+
Error ->
|
25
|
+
Error
|
26
|
+
end.
|
27
|
+
|
28
|
+
%%--------------------------------------------------------------------
|
29
|
+
%% Function: stop(State) -> void()
|
30
|
+
%% Description: This function is called whenever an application
|
31
|
+
%% has stopped. It is intended to be the opposite of Module:start/2 and
|
32
|
+
%% should do any necessary cleaning up. The return value is ignored.
|
33
|
+
%%--------------------------------------------------------------------
|
34
|
+
stop(_State) ->
|
35
|
+
ok.
|
36
|
+
|
37
|
+
%%====================================================================
|
38
|
+
%% Internal functions
|
39
|
+
%%====================================================================
|
@@ -0,0 +1,14 @@
|
|
1
|
+
-module (pm_client).
|
2
|
+
-export ([send_cmd/1, reconfigure_cloud/0, get_load/1, get_live_nodes/0]).
|
3
|
+
|
4
|
+
% Run commands on the running master process
|
5
|
+
% erl -pa ./ebin/ -run pm_client get_load cpu -run init stop -noshell
|
6
|
+
|
7
|
+
% Send the command Cmd to the pm_master process
|
8
|
+
send_cmd(Cmd) -> pm_master:fire_cmd(Cmd).
|
9
|
+
% Reconfigure the cloud
|
10
|
+
reconfigure_cloud() -> pm_master:reconfigure_cloud().
|
11
|
+
% Get the load on the cloud of type Type
|
12
|
+
get_load(Type) -> pm_master:get_load(Type).
|
13
|
+
% Get a list of the live nodes
|
14
|
+
get_live_nodes() -> pm_master:get_live_nodes().
|
@@ -0,0 +1,21 @@
|
|
1
|
+
% Handles generic events
|
2
|
+
-module (pm_event_handler).
|
3
|
+
-export ([make/0, add_handler/1, event/1]).
|
4
|
+
|
5
|
+
% Make a new event handler
|
6
|
+
make() ->
|
7
|
+
register(?MODULE, spawn(fun() -> handle_events(fun no_op/1) end )).
|
8
|
+
|
9
|
+
add_handler(Fun) ->
|
10
|
+
whereis(?MODULE) ! {add, Fun}.
|
11
|
+
|
12
|
+
event(X) -> whereis(?MODULE) ! {event, X}.
|
13
|
+
|
14
|
+
handle_events(Fun) ->
|
15
|
+
receive
|
16
|
+
{event, Any} ->
|
17
|
+
(catch Fun(Any)),
|
18
|
+
handle_events(Fun)
|
19
|
+
end.
|
20
|
+
|
21
|
+
no_op(_) -> void.
|
@@ -1,27 +1,119 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
%%%-------------------------------------------------------------------
|
2
|
+
%%% File : pm_master.erl
|
3
|
+
%%% Author : Ari Lerner <arilerner@mac.com>
|
4
|
+
%%% The client is a running process that will run on the master node
|
5
|
+
%%% and spawn requests to the pm_nodes and compile the responses
|
6
|
+
%%% for use within the poolparty network
|
7
|
+
%%%-------------------------------------------------------------------
|
8
|
+
-module(pm_master).
|
9
|
+
-behaviour(gen_server).
|
4
10
|
|
5
|
-
|
11
|
+
%% API
|
12
|
+
-export([start_link/0]).
|
6
13
|
|
7
|
-
|
8
|
-
-
|
9
|
-
|
14
|
+
%% gen_server callbacks
|
15
|
+
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
16
|
+
terminate/2, code_change/3]).
|
17
|
+
-record(state, {}).
|
18
|
+
-define(SERVER, ?MODULE).
|
10
19
|
|
11
20
|
% Client function definitions
|
12
|
-
-export ([get_load/
|
21
|
+
-export ([get_load/1, reconfigure_cloud/0, fire_cmd/1, get_live_nodes/0]).
|
22
|
+
|
23
|
+
%%====================================================================
|
24
|
+
%% API
|
25
|
+
%%====================================================================
|
26
|
+
%%--------------------------------------------------------------------
|
27
|
+
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
28
|
+
%% Description: Starts the server
|
29
|
+
%%--------------------------------------------------------------------
|
30
|
+
start_link() ->
|
31
|
+
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
32
|
+
|
33
|
+
%%====================================================================
|
34
|
+
%% gen_server callbacks
|
35
|
+
%%====================================================================
|
36
|
+
|
37
|
+
%%--------------------------------------------------------------------
|
38
|
+
%% Function: init(Args) -> {ok, State} |
|
39
|
+
%% {ok, State, Timeout} |
|
40
|
+
%% ignore |
|
41
|
+
%% {stop, Reason}
|
42
|
+
%% Description: Initiates the server
|
43
|
+
%%--------------------------------------------------------------------
|
44
|
+
init([]) ->
|
45
|
+
{ok, #state{}}.
|
46
|
+
|
47
|
+
%%--------------------------------------------------------------------
|
48
|
+
%% Function: %% handle_call(Request, From, State) -> {reply, Reply, State} |
|
49
|
+
%% {reply, Reply, State, Timeout} |
|
50
|
+
%% {noreply, State} |
|
51
|
+
%% {noreply, State, Timeout} |
|
52
|
+
%% {stop, Reason, Reply, State} |
|
53
|
+
%% {stop, Reason, State}
|
54
|
+
%% Description: Handling call messages
|
55
|
+
%%--------------------------------------------------------------------
|
56
|
+
handle_call(_Request, _From, State) ->
|
57
|
+
Reply = ok,
|
58
|
+
{reply, Reply, State}.
|
59
|
+
|
60
|
+
%%--------------------------------------------------------------------
|
61
|
+
%% Function: handle_cast(Msg, State) -> {noreply, State} |
|
62
|
+
%% {noreply, State, Timeout} |
|
63
|
+
%% {stop, Reason, State}
|
64
|
+
%% Description: Handling cast messages
|
65
|
+
%%--------------------------------------------------------------------
|
66
|
+
handle_cast(_Msg, State) ->
|
67
|
+
{noreply, State}.
|
68
|
+
|
69
|
+
%%--------------------------------------------------------------------
|
70
|
+
%% Function: handle_info(Info, State) -> {noreply, State} |
|
71
|
+
%% {noreply, State, Timeout} |
|
72
|
+
%% {stop, Reason, State}
|
73
|
+
%% Description: Handling all non call/cast messages
|
74
|
+
%%--------------------------------------------------------------------
|
75
|
+
handle_info(_Info, State) ->
|
76
|
+
{noreply, State}.
|
77
|
+
|
78
|
+
%%--------------------------------------------------------------------
|
79
|
+
%% Function: terminate(Reason, State) -> void()
|
80
|
+
%% Description: This function is called by a gen_server when it is about to
|
81
|
+
%% terminate. It should be the opposite of Module:init/1 and do any necessary
|
82
|
+
%% cleaning up. When it returns, the gen_server terminates with Reason.
|
83
|
+
%% The return value is ignored.
|
84
|
+
%%--------------------------------------------------------------------
|
85
|
+
terminate(_Reason, _State) ->
|
86
|
+
ok.
|
87
|
+
|
88
|
+
%%--------------------------------------------------------------------
|
89
|
+
%% Func: code_change(OldVsn, State, Extra) -> {ok, NewState}
|
90
|
+
%% Description: Convert process state when code is changed
|
91
|
+
%%--------------------------------------------------------------------
|
92
|
+
code_change(_OldVsn, State, _Extra) ->
|
93
|
+
{ok, State}.
|
94
|
+
|
95
|
+
%%--------------------------------------------------------------------
|
96
|
+
%%% Internal functions
|
97
|
+
%%--------------------------------------------------------------------
|
13
98
|
|
14
99
|
% pm_master:get_load("0", "cpu").
|
15
|
-
get_load(
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
100
|
+
get_load(Type) ->
|
101
|
+
Nodes = get_live_nodes(),
|
102
|
+
{Loads, _} = rpc:multicall(Nodes, pm_node, get_load_for_type, [Type]),
|
103
|
+
{utils:convert_responses_to_int_list(Loads)}.
|
104
|
+
|
105
|
+
% Send reconfigure tasks to every node
|
106
|
+
reconfigure_cloud() ->
|
107
|
+
Nodes = get_live_nodes(),
|
108
|
+
{_, _} = rpc:multicall(Nodes, pm_node, run_reconfig, []),
|
109
|
+
{ok}.
|
110
|
+
|
111
|
+
% Fire the given command on all nodes
|
112
|
+
fire_cmd(Cmd) ->
|
113
|
+
Nodes = get_live_nodes(),
|
114
|
+
{_, _} = rpc:multicall(Nodes, pm_node, fire_cmd, [Cmd]),
|
115
|
+
{ok}.
|
116
|
+
|
117
|
+
% Get the live nodes
|
118
|
+
get_live_nodes() ->
|
119
|
+
nodes().
|
@@ -2,7 +2,39 @@
|
|
2
2
|
% client service
|
3
3
|
|
4
4
|
-module (pm_master_supervisor).
|
5
|
+
-behaviour(supervisor).
|
6
|
+
|
7
|
+
-export([start/0, start_in_shell_for_testing/0, start_link/1, init/1]).
|
5
8
|
|
6
9
|
-ifdef(EUNIT).
|
7
10
|
-include_lib("eunit/include/eunit.hrl").
|
8
|
-
-endif.
|
11
|
+
-endif.
|
12
|
+
|
13
|
+
start() ->
|
14
|
+
spawn(fun() ->
|
15
|
+
supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = [])
|
16
|
+
end).
|
17
|
+
|
18
|
+
start_in_shell_for_testing() ->
|
19
|
+
{ok, Pid} = supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = []),
|
20
|
+
unlink(Pid).
|
21
|
+
|
22
|
+
start_link(Args) ->
|
23
|
+
supervisor:start_link({local, ?MODULE}, ?MODULE, Args).
|
24
|
+
|
25
|
+
init([]) ->
|
26
|
+
RestartStrategy = one_for_one,
|
27
|
+
MaxRestarts = 3, % 1000
|
28
|
+
MaxTimeBetRestarts = 30, % 3600
|
29
|
+
|
30
|
+
SupFlags = {RestartStrategy, MaxRestarts, MaxTimeBetRestarts},
|
31
|
+
|
32
|
+
LoadServers = [
|
33
|
+
{pm_master1,
|
34
|
+
{pm_master, start_link, []},
|
35
|
+
permanent, 5000, worker,
|
36
|
+
[pm_master]
|
37
|
+
}
|
38
|
+
],
|
39
|
+
|
40
|
+
{ok, {SupFlags, LoadServers}}.
|
@@ -1,79 +1,125 @@
|
|
1
|
-
|
2
|
-
%%%
|
3
|
-
%%%
|
4
|
-
%%%
|
5
|
-
%%%
|
6
|
-
%%%
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
-
|
16
|
-
|
17
|
-
|
18
|
-
-
|
19
|
-
-export ([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
|
1
|
+
%%%-------------------------------------------------------------------
|
2
|
+
%%% File : pm_node.erl
|
3
|
+
%%% Author : Ari Lerner <arilerner@mac.com>
|
4
|
+
%%% The client is a running process that will run on the master node
|
5
|
+
%%% and spawn requests to the pm_nodes and compile the responses
|
6
|
+
%%% for use within the poolparty network
|
7
|
+
%%%-------------------------------------------------------------------
|
8
|
+
-module(pm_node).
|
9
|
+
-behaviour(gen_server).
|
10
|
+
|
11
|
+
%% API
|
12
|
+
-export([start_link/0]).
|
13
|
+
|
14
|
+
%% gen_server callbacks
|
15
|
+
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
16
|
+
terminate/2, code_change/3]).
|
17
|
+
-record(state, {}).
|
18
|
+
-define(SERVER, ?MODULE).
|
20
19
|
|
21
20
|
% Client function definitions
|
22
|
-
-export ([
|
23
|
-
-export ([get_load_for_type/
|
21
|
+
-export ([stop/0]).
|
22
|
+
-export ([get_load_for_type/1, fire_cmd/1, run_reconfig/0]).
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
%%====================================================================
|
25
|
+
%% API
|
26
|
+
%%====================================================================
|
27
|
+
%%--------------------------------------------------------------------
|
28
|
+
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
29
|
+
%% Description: Starts the server
|
30
|
+
%%
|
31
|
+
%% Starts the timer to fire off a ping to the master to let the master
|
32
|
+
%% know that it is alive
|
33
|
+
%%
|
34
|
+
%% Fires a ping every 10 seconds
|
35
|
+
%%--------------------------------------------------------------------
|
36
|
+
start_link() ->
|
37
|
+
utils:start_timer(10000, fun() -> net_adm:ping(master@auser) end),
|
38
|
+
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
30
39
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
gen_server:start_link({global, String}, String, [], []).
|
40
|
+
%%====================================================================
|
41
|
+
%% gen_server callbacks
|
42
|
+
%%====================================================================
|
35
43
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
% Sends the response and state back
|
45
|
-
init([]) ->
|
44
|
+
%%--------------------------------------------------------------------
|
45
|
+
%% Function: init(Args) -> {ok, State} |
|
46
|
+
%% {ok, State, Timeout} |
|
47
|
+
%% ignore |
|
48
|
+
%% {stop, Reason}
|
49
|
+
%% Description: Initiates the server
|
50
|
+
%%--------------------------------------------------------------------
|
51
|
+
init([]) ->
|
46
52
|
process_flag(trap_exit, true),
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
handle_call(_Request, _From, State) ->
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
53
|
+
{ok, #state{}}.
|
54
|
+
|
55
|
+
%%--------------------------------------------------------------------
|
56
|
+
%% Function: %% handle_call(Request, From, State) -> {reply, Reply, State} |
|
57
|
+
%% {reply, Reply, State, Timeout} |
|
58
|
+
%% {noreply, State} |
|
59
|
+
%% {noreply, State, Timeout} |
|
60
|
+
%% {stop, Reason, Reply, State} |
|
61
|
+
%% {stop, Reason, State}
|
62
|
+
%% Description: Handling call messages
|
63
|
+
%%--------------------------------------------------------------------
|
64
|
+
handle_call(_Request, _From, State) ->
|
65
|
+
Reply = ok,
|
66
|
+
{reply, Reply, State}.
|
67
|
+
|
68
|
+
%%--------------------------------------------------------------------
|
69
|
+
%% Function: handle_cast(Msg, State) -> {noreply, State} |
|
70
|
+
%% {noreply, State, Timeout} |
|
71
|
+
%% {stop, Reason, State}
|
72
|
+
%% Description: Handling cast messages
|
73
|
+
%%--------------------------------------------------------------------
|
64
74
|
handle_cast(_Msg, State) ->
|
65
|
-
|
75
|
+
{noreply, State}.
|
66
76
|
|
67
|
-
|
77
|
+
%%--------------------------------------------------------------------
|
78
|
+
%% Function: handle_info(Info, State) -> {noreply, State} |
|
79
|
+
%% {noreply, State, Timeout} |
|
80
|
+
%% {stop, Reason, State}
|
81
|
+
%% Description: Handling all non call/cast messages
|
82
|
+
%%--------------------------------------------------------------------
|
68
83
|
handle_info(_Info, State) ->
|
69
84
|
io:format("Info message received from: ~p~n", [_Info]),
|
70
85
|
{noreply, State}.
|
71
86
|
|
72
|
-
|
73
|
-
terminate(
|
74
|
-
|
75
|
-
|
87
|
+
%%--------------------------------------------------------------------
|
88
|
+
%% Function: terminate(Reason, State) -> void()
|
89
|
+
%% Description: This function is called by a gen_server when it is about to
|
90
|
+
%% terminate. It should be the opposite of Module:init/1 and do any necessary
|
91
|
+
%% cleaning up. When it returns, the gen_server terminates with Reason.
|
92
|
+
%% The return value is ignored.
|
93
|
+
%%--------------------------------------------------------------------
|
94
|
+
terminate(_Reason, _State) ->
|
95
|
+
utils:stop_timer(),
|
96
|
+
ok.
|
76
97
|
|
77
|
-
|
98
|
+
%%--------------------------------------------------------------------
|
99
|
+
%% Func: code_change(OldVsn, State, Extra) -> {ok, NewState}
|
100
|
+
%% Description: Convert process state when code is changed
|
101
|
+
%%--------------------------------------------------------------------
|
78
102
|
code_change(_OldVsn, State, _Extra) ->
|
79
|
-
{ok, State}.
|
103
|
+
{ok, State}.
|
104
|
+
|
105
|
+
%%--------------------------------------------------------------------
|
106
|
+
%%% Internal functions
|
107
|
+
%%--------------------------------------------------------------------
|
108
|
+
|
109
|
+
% Get the load for the type sent...
|
110
|
+
get_load_for_type(Type) ->
|
111
|
+
String = string:concat(". /etc/profile && server-get-load -m ",Type),
|
112
|
+
{os:cmd(String)}.
|
113
|
+
|
114
|
+
% Rerun the configuration
|
115
|
+
run_reconfig() -> {os:cmd(". /etc/profile && server-rerun")}.
|
116
|
+
|
117
|
+
% Allows us to fire off any command (allowed by poolparty on the check)
|
118
|
+
fire_cmd(Cmd) ->
|
119
|
+
String = ". /etc/profile && server-fire-cmd \""++Cmd++"\"",
|
120
|
+
io:format("Sending command "++String),
|
121
|
+
{os:cmd(String)}.
|
122
|
+
|
123
|
+
% Stop the pm_node entirely
|
124
|
+
stop() ->
|
125
|
+
gen_server:cast(?MODULE, stop).
|