auser-poolparty 0.2.26 → 0.2.35
Sign up to get free protection for your applications and to get access to all the features.
- 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}.
|