auser-poolparty 0.2.26 → 0.2.35
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 +13 -2
- data/PostInstall.txt +2 -1
- data/Rakefile +8 -2
- data/bin/cloud-contract +1 -6
- data/bin/cloud-ensure-provisioning +33 -0
- data/bin/cloud-expand +1 -6
- data/bin/cloud-provision +22 -14
- data/bin/cloud-start +1 -0
- data/bin/messenger-get-load +26 -0
- data/bin/server-build-messenger +9 -2
- data/bin/server-fire-cmd +1 -1
- data/bin/server-get-load +4 -4
- data/bin/server-list-active +2 -2
- data/bin/server-rerun +4 -4
- data/bin/server-start-master +4 -4
- data/bin/server-start-node +4 -4
- data/lib/erlang/messenger/Rakefile +6 -0
- data/lib/erlang/messenger/ebin/master.app +1 -1
- data/lib/erlang/messenger/ebin/master_app.beam +0 -0
- data/lib/erlang/messenger/ebin/node.app +1 -1
- 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_manager.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
- data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
- data/lib/erlang/messenger/include/defines.hrl +16 -0
- data/lib/erlang/messenger/pm_master.beam +0 -0
- data/lib/erlang/messenger/pm_node.beam +0 -0
- data/lib/erlang/messenger/src/pm_client.erl +35 -7
- data/lib/erlang/messenger/src/pm_cluster.erl +15 -12
- data/lib/erlang/messenger/src/pm_event_manager.erl +27 -0
- data/lib/erlang/messenger/src/pm_master.erl +44 -32
- data/lib/erlang/messenger/src/pm_master_event_handler.erl +72 -0
- data/lib/erlang/messenger/src/pm_master_supervisor.erl +9 -10
- data/lib/erlang/messenger/src/pm_node.erl +47 -27
- data/lib/erlang/messenger/src/pm_node_supervisor.erl +7 -9
- data/lib/erlang/messenger/src/utils.erl +20 -1
- data/lib/erlang/messenger/useful_snippets +6 -0
- data/lib/erlang/messenger/utils.beam +0 -0
- data/lib/poolparty/base_packages/haproxy.rb +6 -6
- data/lib/poolparty/base_packages/poolparty.rb +22 -43
- data/lib/poolparty/core/object.rb +3 -0
- data/lib/poolparty/helpers/console.rb +4 -0
- data/lib/poolparty/helpers/messenger.rb +14 -5
- data/lib/poolparty/helpers/optioner.rb +1 -1
- data/lib/poolparty/helpers/provisioner_base.rb +54 -15
- data/lib/poolparty/helpers/provisioners/master.rb +36 -8
- data/lib/poolparty/helpers/provisioners/slave.rb +5 -6
- data/lib/poolparty/net/remote_bases/ec2.rb +16 -18
- data/lib/poolparty/net/remote_instance.rb +4 -1
- data/lib/poolparty/net/remoter.rb +29 -10
- data/lib/poolparty/net/remoter_base.rb +2 -1
- data/lib/poolparty/plugins/git.rb +5 -6
- data/lib/poolparty/pool/base.rb +3 -2
- data/lib/poolparty/pool/cloud.rb +22 -14
- data/lib/poolparty/pool/plugin.rb +9 -0
- data/lib/poolparty/pool/pool.rb +2 -2
- data/lib/poolparty/pool/resources/class_package.rb +1 -1
- data/lib/poolparty/pool/resources/gem_package.rb +6 -4
- data/lib/poolparty/templates/puppetcleaner +6 -0
- data/lib/poolparty/version.rb +1 -1
- data/poolparty.gemspec +20 -6
- data/spec/poolparty/helpers/messenger_spec.rb +1 -1
- data/spec/poolparty/helpers/provisioner_base_spec.rb +3 -0
- data/spec/poolparty/net/remote_spec.rb +1 -0
- data/spec/poolparty/net/remoter_spec.rb +4 -1
- data/spec/poolparty/pool/cloud_spec.rb +2 -2
- data/spec/poolparty/pool/plugin_spec.rb +8 -1
- data/spec/poolparty/pool/resources/class_package_spec.rb +4 -4
- data/spec/poolparty/pool/resources/remote_file_spec.rb +1 -1
- data/website/index.html +1 -1
- metadata +20 -6
- 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_node.beam +0 -0
- data/lib/erlang/messenger/ebin/utils.beam +0 -0
- data/lib/erlang/messenger/src/pm_event_handler.erl +0 -21
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,16 @@
|
|
1
|
+
% Includes file for the PoolParty Messenger
|
2
|
+
|
3
|
+
-ifdef(debug).
|
4
|
+
|
5
|
+
-define (MASTER_LOCATION, erlang:list_to_atom(lists:append("master@", element(2, inet:gethostname()))) ).
|
6
|
+
-define (TRACE(X, M), io:format("TRACE ~p:~p ~p ~p~n" ,[?MODULE, ?LINE, X, M])).
|
7
|
+
|
8
|
+
-else.
|
9
|
+
|
10
|
+
-define (MASTER_LOCATION, master@master).
|
11
|
+
-define (TRACE(X, M), void).
|
12
|
+
|
13
|
+
-endif.
|
14
|
+
|
15
|
+
-define (MASTER_NODE_NAME, master).
|
16
|
+
-define (MASTER_SERVER, global:whereis_name(pm_master)).
|
Binary file
|
Binary file
|
@@ -1,19 +1,47 @@
|
|
1
1
|
-module (pm_client).
|
2
|
-
-
|
2
|
+
-include_lib("../include/defines.hrl").
|
3
|
+
-define (SERVER, global:whereis_name(?MODULE)).
|
4
|
+
|
5
|
+
-export ([init_conn/0, send_cmd/1, reconfigure_cloud/0, get_load/1, get_live_nodes/0]).
|
6
|
+
-export ([provision_orphan_running_servers/0]).
|
3
7
|
-export ([shutdown/0]).
|
4
8
|
% Run commands on the running master process
|
5
9
|
% erl -pa ./ebin/ -run pm_client get_load cpu -run init stop -noshell
|
6
10
|
|
7
11
|
% Connect to the master
|
8
|
-
|
12
|
+
init_conn() -> net_adm:ping(?MASTER_LOCATION).
|
9
13
|
% Send the command Cmd to the pm_master process
|
10
|
-
send_cmd(Cmd) ->
|
14
|
+
send_cmd(Cmd) ->
|
15
|
+
init_conn(),
|
16
|
+
pm_master:fire_cmd(Cmd).
|
11
17
|
% Reconfigure the cloud
|
12
|
-
reconfigure_cloud() ->
|
18
|
+
reconfigure_cloud() ->
|
19
|
+
init_conn(),
|
20
|
+
pm_master:reconfigure_cloud().
|
13
21
|
% Get the load on the cloud of type Type
|
14
|
-
get_load(Type) ->
|
22
|
+
get_load(Type) ->
|
23
|
+
init_conn(),
|
24
|
+
pm_master:get_load(Type).
|
25
|
+
% Check to see if there are servers that are unprovisioned
|
26
|
+
% And if there are, log in to them and start their messenger
|
27
|
+
% sending the live code on the master to them
|
28
|
+
provision_orphan_running_servers() ->
|
29
|
+
Instances = pm_cluster:any_new_servers(),
|
30
|
+
case lists:flatlength(Instances) of
|
31
|
+
0 ->
|
32
|
+
ok;
|
33
|
+
_ ->
|
34
|
+
utils:distribute_modules_to([pm_node, pm_node_supervisor, pm_event_manager, node_app], Instances),
|
35
|
+
pm_cluster:slaves(Instances),
|
36
|
+
Instances
|
37
|
+
end.
|
38
|
+
|
15
39
|
% Get a list of the live nodes
|
16
|
-
get_live_nodes() ->
|
40
|
+
get_live_nodes() ->
|
41
|
+
init_conn(),
|
42
|
+
pm_cluster:get_live_nodes().
|
17
43
|
% Terminate the cloud messenger
|
18
44
|
% This sends a shutdown to the whole cloud
|
19
|
-
shutdown() ->
|
45
|
+
shutdown() ->
|
46
|
+
init_conn(),
|
47
|
+
pm_master:shutdown_cloud().
|
@@ -4,10 +4,15 @@
|
|
4
4
|
-include_lib("eunit/include/eunit.hrl").
|
5
5
|
-endif.
|
6
6
|
|
7
|
+
-include_lib("../include/defines.hrl").
|
8
|
+
|
7
9
|
-export ([slaves/1, slaves/0]).
|
8
|
-
-export ([get_live_nodes/0
|
10
|
+
-export ([get_live_nodes/0]).
|
9
11
|
-export ([send_call/2, master/0]).
|
10
12
|
|
13
|
+
-export ([any_new_servers/0]).
|
14
|
+
|
15
|
+
% gen_server:call(?MASTER_SERVER, {Type, Args}).
|
11
16
|
send_call(Type, Args) ->
|
12
17
|
Nodes = get_live_nodes(),
|
13
18
|
rpc:multicall(Nodes, pm_node, Type, [Args]).
|
@@ -20,7 +25,7 @@ slaves([]) ->
|
|
20
25
|
|
21
26
|
slaves([Host|Hosts]) ->
|
22
27
|
Args = erl_system_args(),
|
23
|
-
NodeName = "
|
28
|
+
NodeName = "pp",
|
24
29
|
{ok, Node} = slave:start_link(Host, NodeName, Args),
|
25
30
|
io:format("Erlang node started = [~p]~n", [Node]),
|
26
31
|
slaves(Hosts).
|
@@ -39,17 +44,15 @@ erl_system_args()->
|
|
39
44
|
Shared, " +Mea r10b "
|
40
45
|
]).
|
41
46
|
|
42
|
-
|
47
|
+
any_new_servers() ->
|
43
48
|
String = ". /etc/profile && server-list-active -c name",
|
44
|
-
Nodes =
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
Nodes),
|
52
|
-
ok.
|
49
|
+
Nodes = lists:map(fun
|
50
|
+
(No) ->
|
51
|
+
erlang:list_to_atom(lists:append([No, "@", No]))
|
52
|
+
end,string:tokens(os:cmd(String), "\n\t")),
|
53
|
+
NewServers = Nodes -- get_live_nodes(),
|
54
|
+
NewServers.
|
55
|
+
|
53
56
|
% Get the live nodes
|
54
57
|
get_live_nodes() ->
|
55
58
|
nodes().
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-module (pm_event_manager).
|
2
|
+
-include_lib("../include/defines.hrl").
|
3
|
+
|
4
|
+
%% API
|
5
|
+
-export([start_link/0, add_handler/1, notify/1]).
|
6
|
+
-define(SERVER, ?MODULE).
|
7
|
+
|
8
|
+
%%--------------------------------------------------------------------
|
9
|
+
%% Function: start_link() -> {ok,Pid} | {error,Error}
|
10
|
+
%% Description: Creates an event manager.
|
11
|
+
%%--------------------------------------------------------------------
|
12
|
+
start_link() ->
|
13
|
+
gen_event:start_link({local, ?SERVER}).
|
14
|
+
|
15
|
+
%%--------------------------------------------------------------------
|
16
|
+
%% Function: add_handler(Module) -> ok | {'EXIT',Reason} | term()
|
17
|
+
%% Description: Adds an event handler
|
18
|
+
%%--------------------------------------------------------------------
|
19
|
+
add_handler(Module) ->
|
20
|
+
gen_event:add_handler(?SERVER, Module, []).
|
21
|
+
|
22
|
+
%%--------------------------------------------------------------------
|
23
|
+
%% Function: notify(Event) -> ok | {error, Reason}
|
24
|
+
%% Description: Sends the Event through the event manager.
|
25
|
+
%%--------------------------------------------------------------------
|
26
|
+
notify(Event) ->
|
27
|
+
gen_event:notify(?SERVER, Event).
|
@@ -8,28 +8,58 @@
|
|
8
8
|
-module(pm_master).
|
9
9
|
-behaviour(gen_server).
|
10
10
|
|
11
|
+
-include_lib("../include/defines.hrl").
|
12
|
+
|
13
|
+
-record(state, {}).
|
14
|
+
-define (SERVER, global:whereis_name(?MODULE)).
|
15
|
+
|
11
16
|
%% API
|
12
17
|
-export([start_link/0]).
|
13
18
|
|
14
19
|
%% gen_server callbacks
|
15
20
|
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
16
21
|
terminate/2, code_change/3]).
|
17
|
-
-record(state, {}).
|
18
|
-
-define(SERVER, ?MODULE).
|
19
22
|
|
20
23
|
% Client function definitions
|
21
|
-
-export ([get_load/1, reconfigure_cloud/0,
|
24
|
+
-export ([get_load/1, reconfigure_cloud/0, get_live_nodes/0]).
|
25
|
+
-export ([run_cmd/1, fire_cmd/1]).
|
22
26
|
-export ([shutdown_cloud/0]).
|
23
27
|
|
24
28
|
%%====================================================================
|
25
29
|
%% API
|
26
30
|
%%====================================================================
|
27
31
|
%%--------------------------------------------------------------------
|
32
|
+
%%% Internal functions
|
33
|
+
%%--------------------------------------------------------------------
|
34
|
+
|
35
|
+
% pm_master:get_load("0", "cpu").
|
36
|
+
get_load(Type) ->
|
37
|
+
% {Loads, _} = pm_cluster:send_call(get_load_for_type, [Type]),
|
38
|
+
{Loads, _} = gen_server:call(?SERVER, {get_load_for_type, [Type]}),
|
39
|
+
io:format("Loads: ~p~n", [Loads]),
|
40
|
+
utils:convert_responses_to_int_list(Loads).
|
41
|
+
|
42
|
+
% Send reconfigure tasks to every node
|
43
|
+
reconfigure_cloud() ->
|
44
|
+
gen_server:call(?SERVER, {run_reconfig}).
|
45
|
+
|
46
|
+
% Fire the given command on all nodes
|
47
|
+
run_cmd(Cmd) -> gen_server:call(?SERVER, {run_cmd, Cmd}).
|
48
|
+
fire_cmd(Cmd) -> gen_server:call(?SERVER, {fire_cmd, Cmd}).
|
49
|
+
|
50
|
+
get_live_nodes() ->
|
51
|
+
nodes().
|
52
|
+
|
53
|
+
% Shutdown
|
54
|
+
shutdown_cloud() ->
|
55
|
+
pm_cluster:send_call(stop, []),
|
56
|
+
{ok}.
|
57
|
+
%%--------------------------------------------------------------------
|
28
58
|
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
29
59
|
%% Description: Starts the server
|
30
60
|
%%--------------------------------------------------------------------
|
31
61
|
start_link() ->
|
32
|
-
gen_server:start_link({global, ?
|
62
|
+
gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).
|
33
63
|
|
34
64
|
%%====================================================================
|
35
65
|
%% gen_server callbacks
|
@@ -43,6 +73,7 @@ start_link() ->
|
|
43
73
|
%% Description: Initiates the server
|
44
74
|
%%--------------------------------------------------------------------
|
45
75
|
init([]) ->
|
76
|
+
% pm_event_manager:add_handler(pm_master_event_handler),
|
46
77
|
{ok, #state{}}.
|
47
78
|
|
48
79
|
%%--------------------------------------------------------------------
|
@@ -54,9 +85,14 @@ init([]) ->
|
|
54
85
|
%% {stop, Reason, State}
|
55
86
|
%% Description: Handling call messages
|
56
87
|
%%--------------------------------------------------------------------
|
57
|
-
|
58
|
-
|
59
|
-
|
88
|
+
% Handle load messages
|
89
|
+
handle_call({Type, Args}, _From, _State) ->
|
90
|
+
io:format("Calling ~p with ~p on slaves~n", [Type, Args]),
|
91
|
+
List = rpc:multicall(get_live_nodes(), pm_node, Type, [Args]),
|
92
|
+
{reply, List, nostate};
|
93
|
+
handle_call(Request, _From, State) ->
|
94
|
+
Reply = Reply = rpc:multicall(get_live_nodes(), pm_node, Request, []),
|
95
|
+
{reply, Reply, State}.
|
60
96
|
|
61
97
|
%%--------------------------------------------------------------------
|
62
98
|
%% Function: handle_cast(Msg, State) -> {noreply, State} |
|
@@ -91,28 +127,4 @@ terminate(_Reason, _State) ->
|
|
91
127
|
%% Description: Convert process state when code is changed
|
92
128
|
%%--------------------------------------------------------------------
|
93
129
|
code_change(_OldVsn, State, _Extra) ->
|
94
|
-
{ok, State}.
|
95
|
-
|
96
|
-
%%--------------------------------------------------------------------
|
97
|
-
%%% Internal functions
|
98
|
-
%%--------------------------------------------------------------------
|
99
|
-
|
100
|
-
% pm_master:get_load("0", "cpu").
|
101
|
-
get_load(Type) ->
|
102
|
-
{Loads, _} = pm_cluster:send_call(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
|
-
pm_cluster:send_call(run_reconfig, []),
|
108
|
-
{ok}.
|
109
|
-
|
110
|
-
% Fire the given command on all nodes
|
111
|
-
fire_cmd(Cmd) ->
|
112
|
-
pm_cluster:send_call(fire_cmd, [Cmd]),
|
113
|
-
{ok}.
|
114
|
-
|
115
|
-
% Shutdown
|
116
|
-
shutdown_cloud() ->
|
117
|
-
pm_cluster:send_call(stop, []),
|
118
|
-
{ok}.
|
130
|
+
{ok, State}.
|
@@ -0,0 +1,72 @@
|
|
1
|
+
-module (pm_master_event_handler).
|
2
|
+
-behaviour(gen_event).
|
3
|
+
-include_lib("../include/defines.hrl").
|
4
|
+
|
5
|
+
%% gen_event callbacks
|
6
|
+
-export([init/1, handle_event/2, handle_call/2,
|
7
|
+
handle_info/2, terminate/2, code_change/3]).
|
8
|
+
|
9
|
+
%%====================================================================
|
10
|
+
%% gen_event callbacks
|
11
|
+
%%====================================================================
|
12
|
+
%%--------------------------------------------------------------------
|
13
|
+
%% Function: init(Args) -> {ok, State}
|
14
|
+
%% Description: Whenever a new event handler is added to an event manager,
|
15
|
+
%% this function is called to initialize the event handler.
|
16
|
+
%%--------------------------------------------------------------------
|
17
|
+
init([]) ->
|
18
|
+
{ok, []}.
|
19
|
+
|
20
|
+
%%--------------------------------------------------------------------
|
21
|
+
%% Function:
|
22
|
+
%% handle_event(Event, State) -> {ok, State} |
|
23
|
+
%% {swap_handler, Args1, State1, Mod2, Args2} |
|
24
|
+
%% remove_handler
|
25
|
+
%% Description:Whenever an event manager receives an event sent using
|
26
|
+
%% gen_event:notify/2 or gen_event:sync_notify/2, this function is called for
|
27
|
+
%% each installed event handler to handle the event.
|
28
|
+
%%--------------------------------------------------------------------
|
29
|
+
handle_event(_Event, State) ->
|
30
|
+
{ok, State}.
|
31
|
+
|
32
|
+
%%--------------------------------------------------------------------
|
33
|
+
%% Function:
|
34
|
+
%% handle_call(Request, State) -> {ok, Reply, State} |
|
35
|
+
%% {swap_handler, Reply, Args1, State1,
|
36
|
+
%% Mod2, Args2} |
|
37
|
+
%% {remove_handler, Reply}
|
38
|
+
%% Description: Whenever an event manager receives a request sent using
|
39
|
+
%% gen_event:call/3,4, this function is called for the specified event
|
40
|
+
%% handler to handle the request.
|
41
|
+
%%--------------------------------------------------------------------
|
42
|
+
handle_call(_Request, State) ->
|
43
|
+
Reply = ok,
|
44
|
+
{ok, Reply, State}.
|
45
|
+
|
46
|
+
%%--------------------------------------------------------------------
|
47
|
+
%% Function:
|
48
|
+
%% handle_info(Info, State) -> {ok, State} |
|
49
|
+
%% {swap_handler, Args1, State1, Mod2, Args2} |
|
50
|
+
%% remove_handler
|
51
|
+
%% Description: This function is called for each installed event handler when
|
52
|
+
%% an event manager receives any other message than an event or a synchronous
|
53
|
+
%% request (or a system message).
|
54
|
+
%%--------------------------------------------------------------------
|
55
|
+
handle_info(_Info, State) ->
|
56
|
+
{ok, State}.
|
57
|
+
|
58
|
+
%%--------------------------------------------------------------------
|
59
|
+
%% Function: terminate(Reason, State) -> void()
|
60
|
+
%% Description:Whenever an event handler is deleted from an event manager,
|
61
|
+
%% this function is called. It should be the opposite of Module:init/1 and
|
62
|
+
%% do any necessary cleaning up.
|
63
|
+
%%--------------------------------------------------------------------
|
64
|
+
terminate(_Reason, _State) ->
|
65
|
+
ok.
|
66
|
+
|
67
|
+
%%--------------------------------------------------------------------
|
68
|
+
%% Function: code_change(OldVsn, State, Extra) -> {ok, NewState}
|
69
|
+
%% Description: Convert process state when code is changed
|
70
|
+
%%--------------------------------------------------------------------
|
71
|
+
code_change(_OldVsn, State, _Extra) ->
|
72
|
+
{ok, State}.
|
@@ -24,17 +24,16 @@ start_link(Args) ->
|
|
24
24
|
|
25
25
|
init([]) ->
|
26
26
|
RestartStrategy = one_for_one,
|
27
|
-
MaxRestarts =
|
28
|
-
MaxTimeBetRestarts =
|
27
|
+
MaxRestarts = 1000,
|
28
|
+
MaxTimeBetRestarts = 3600,
|
29
|
+
TimeoutTime = 5000,
|
29
30
|
|
30
31
|
SupFlags = {RestartStrategy, MaxRestarts, MaxTimeBetRestarts},
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
}
|
38
|
-
],
|
32
|
+
|
33
|
+
% Servers
|
34
|
+
EventManager = {pm_event_manager, {pm_event_manager, start_link, []}, permanent, TimeoutTime, worker, dynamic},
|
35
|
+
MasterServer = {pm_master1, {pm_master, start_link, []}, permanent, TimeoutTime, worker, [pm_master]},
|
36
|
+
|
37
|
+
LoadServers = [EventManager,MasterServer],
|
39
38
|
|
40
39
|
{ok, {SupFlags, LoadServers}}.
|
@@ -8,22 +8,48 @@
|
|
8
8
|
-module(pm_node).
|
9
9
|
-behaviour(gen_server).
|
10
10
|
|
11
|
+
-include_lib("../include/defines.hrl").
|
12
|
+
|
11
13
|
%% API
|
12
14
|
-export([start_link/0]).
|
13
15
|
|
14
16
|
%% gen_server callbacks
|
15
17
|
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
16
18
|
terminate/2, code_change/3]).
|
19
|
+
|
17
20
|
-record(state, {}).
|
18
21
|
-define(SERVER, ?MODULE).
|
19
22
|
|
20
23
|
% Client function definitions
|
21
24
|
-export ([stop/0]).
|
22
|
-
-export ([get_load_for_type/1,
|
25
|
+
-export ([get_load_for_type/1, run_cmd/1, fire_cmd/1]).
|
26
|
+
-export ([run_reconfig/0]).
|
23
27
|
|
24
28
|
%%====================================================================
|
25
29
|
%% API
|
26
30
|
%%====================================================================
|
31
|
+
%%--------------------------------------------------------------------
|
32
|
+
%%% Internal functions
|
33
|
+
%%--------------------------------------------------------------------
|
34
|
+
|
35
|
+
|
36
|
+
% Get the load for the type sent...
|
37
|
+
get_load_for_type(Type) ->
|
38
|
+
String = string:concat(". /etc/profile && server-get-load -m ",Type),
|
39
|
+
{os:cmd(String)}.
|
40
|
+
|
41
|
+
% Rerun the configuration
|
42
|
+
run_reconfig() ->
|
43
|
+
gen_server:cast(?MODULE, reconfig).
|
44
|
+
|
45
|
+
% Allows us to fire off any command (allowed by poolparty on the check)
|
46
|
+
run_cmd(Cmd) -> gen_server:call(?MODULE, {run_command, Cmd}).
|
47
|
+
fire_cmd(Cmd) -> gen_server:cast(?MODULE, {fire_command, Cmd}).
|
48
|
+
|
49
|
+
% Stop the pm_node entirely
|
50
|
+
stop() ->
|
51
|
+
gen_server:cast(?MODULE, stop).
|
52
|
+
|
27
53
|
%%--------------------------------------------------------------------
|
28
54
|
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
29
55
|
%% Description: Starts the server
|
@@ -34,8 +60,9 @@
|
|
34
60
|
%% Fires a ping every 10 seconds
|
35
61
|
%%--------------------------------------------------------------------
|
36
62
|
start_link() ->
|
37
|
-
|
38
|
-
|
63
|
+
io:format("Pinging master at ~p~n", [?MASTER_LOCATION]),
|
64
|
+
utils:start_timer(10000, fun() -> net_adm:ping(?MASTER_LOCATION) end),
|
65
|
+
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
39
66
|
|
40
67
|
%%====================================================================
|
41
68
|
%% gen_server callbacks
|
@@ -61,6 +88,9 @@ init([]) ->
|
|
61
88
|
%% {stop, Reason, State}
|
62
89
|
%% Description: Handling call messages
|
63
90
|
%%--------------------------------------------------------------------
|
91
|
+
handle_call({run_command, Cmd}, _From, State) ->
|
92
|
+
Reply = os:cmd(". /etc/profile && server-fire-cmd \""++Cmd++"\""),
|
93
|
+
{reply, Reply, State};
|
64
94
|
handle_call(_Request, _From, State) ->
|
65
95
|
Reply = ok,
|
66
96
|
{reply, Reply, State}.
|
@@ -71,8 +101,19 @@ handle_call(_Request, _From, State) ->
|
|
71
101
|
%% {stop, Reason, State}
|
72
102
|
%% Description: Handling cast messages
|
73
103
|
%%--------------------------------------------------------------------
|
74
|
-
handle_cast(
|
75
|
-
|
104
|
+
handle_cast({Msg, Cmd}, State) ->
|
105
|
+
case Msg of
|
106
|
+
reconfig ->
|
107
|
+
io:format("Running reconfig~n"),
|
108
|
+
os:cmd(". /etc/profile && server-rerun"),
|
109
|
+
{ok};
|
110
|
+
fire_command ->
|
111
|
+
io:format("Running command: ~p~n", [Cmd]),
|
112
|
+
os:cmd(". /etc/profile && server-fire-cmd \""++Cmd++"\" 2>&1 > /dev/null"),
|
113
|
+
{ok};
|
114
|
+
_ ->
|
115
|
+
{ok, State}
|
116
|
+
end.
|
76
117
|
|
77
118
|
%%--------------------------------------------------------------------
|
78
119
|
%% Function: handle_info(Info, State) -> {noreply, State} |
|
@@ -100,25 +141,4 @@ terminate(_Reason, _State) ->
|
|
100
141
|
%% Description: Convert process state when code is changed
|
101
142
|
%%--------------------------------------------------------------------
|
102
143
|
code_change(_OldVsn, State, _Extra) ->
|
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
|
-
{os:cmd(String)}.
|
121
|
-
|
122
|
-
% Stop the pm_node entirely
|
123
|
-
stop() ->
|
124
|
-
gen_server:cast(?MODULE, stop).
|
144
|
+
{ok, State}.
|