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.
Files changed (80) hide show
  1. data/Manifest.txt +13 -2
  2. data/PostInstall.txt +2 -1
  3. data/Rakefile +8 -2
  4. data/bin/cloud-contract +1 -6
  5. data/bin/cloud-ensure-provisioning +33 -0
  6. data/bin/cloud-expand +1 -6
  7. data/bin/cloud-provision +22 -14
  8. data/bin/cloud-start +1 -0
  9. data/bin/messenger-get-load +26 -0
  10. data/bin/server-build-messenger +9 -2
  11. data/bin/server-fire-cmd +1 -1
  12. data/bin/server-get-load +4 -4
  13. data/bin/server-list-active +2 -2
  14. data/bin/server-rerun +4 -4
  15. data/bin/server-start-master +4 -4
  16. data/bin/server-start-node +4 -4
  17. data/lib/erlang/messenger/Rakefile +6 -0
  18. data/lib/erlang/messenger/ebin/master.app +1 -1
  19. data/lib/erlang/messenger/ebin/master_app.beam +0 -0
  20. data/lib/erlang/messenger/ebin/node.app +1 -1
  21. data/lib/erlang/messenger/ebin/node_app.beam +0 -0
  22. data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
  23. data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
  24. data/lib/erlang/messenger/ebin/pm_event_manager.beam +0 -0
  25. data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
  26. data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
  27. data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
  28. data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
  29. data/lib/erlang/messenger/include/defines.hrl +16 -0
  30. data/lib/erlang/messenger/pm_master.beam +0 -0
  31. data/lib/erlang/messenger/pm_node.beam +0 -0
  32. data/lib/erlang/messenger/src/pm_client.erl +35 -7
  33. data/lib/erlang/messenger/src/pm_cluster.erl +15 -12
  34. data/lib/erlang/messenger/src/pm_event_manager.erl +27 -0
  35. data/lib/erlang/messenger/src/pm_master.erl +44 -32
  36. data/lib/erlang/messenger/src/pm_master_event_handler.erl +72 -0
  37. data/lib/erlang/messenger/src/pm_master_supervisor.erl +9 -10
  38. data/lib/erlang/messenger/src/pm_node.erl +47 -27
  39. data/lib/erlang/messenger/src/pm_node_supervisor.erl +7 -9
  40. data/lib/erlang/messenger/src/utils.erl +20 -1
  41. data/lib/erlang/messenger/useful_snippets +6 -0
  42. data/lib/erlang/messenger/utils.beam +0 -0
  43. data/lib/poolparty/base_packages/haproxy.rb +6 -6
  44. data/lib/poolparty/base_packages/poolparty.rb +22 -43
  45. data/lib/poolparty/core/object.rb +3 -0
  46. data/lib/poolparty/helpers/console.rb +4 -0
  47. data/lib/poolparty/helpers/messenger.rb +14 -5
  48. data/lib/poolparty/helpers/optioner.rb +1 -1
  49. data/lib/poolparty/helpers/provisioner_base.rb +54 -15
  50. data/lib/poolparty/helpers/provisioners/master.rb +36 -8
  51. data/lib/poolparty/helpers/provisioners/slave.rb +5 -6
  52. data/lib/poolparty/net/remote_bases/ec2.rb +16 -18
  53. data/lib/poolparty/net/remote_instance.rb +4 -1
  54. data/lib/poolparty/net/remoter.rb +29 -10
  55. data/lib/poolparty/net/remoter_base.rb +2 -1
  56. data/lib/poolparty/plugins/git.rb +5 -6
  57. data/lib/poolparty/pool/base.rb +3 -2
  58. data/lib/poolparty/pool/cloud.rb +22 -14
  59. data/lib/poolparty/pool/plugin.rb +9 -0
  60. data/lib/poolparty/pool/pool.rb +2 -2
  61. data/lib/poolparty/pool/resources/class_package.rb +1 -1
  62. data/lib/poolparty/pool/resources/gem_package.rb +6 -4
  63. data/lib/poolparty/templates/puppetcleaner +6 -0
  64. data/lib/poolparty/version.rb +1 -1
  65. data/poolparty.gemspec +20 -6
  66. data/spec/poolparty/helpers/messenger_spec.rb +1 -1
  67. data/spec/poolparty/helpers/provisioner_base_spec.rb +3 -0
  68. data/spec/poolparty/net/remote_spec.rb +1 -0
  69. data/spec/poolparty/net/remoter_spec.rb +4 -1
  70. data/spec/poolparty/pool/cloud_spec.rb +2 -2
  71. data/spec/poolparty/pool/plugin_spec.rb +8 -1
  72. data/spec/poolparty/pool/resources/class_package_spec.rb +4 -4
  73. data/spec/poolparty/pool/resources/remote_file_spec.rb +1 -1
  74. data/website/index.html +1 -1
  75. metadata +20 -6
  76. data/lib/erlang/messenger/ebin/pm_event_handler.beam +0 -0
  77. data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
  78. data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
  79. data/lib/erlang/messenger/ebin/utils.beam +0 -0
  80. data/lib/erlang/messenger/src/pm_event_handler.erl +0 -21
@@ -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)).
@@ -1,19 +1,47 @@
1
1
  -module (pm_client).
2
- -export ([init/0, send_cmd/1, reconfigure_cloud/0, get_load/1, get_live_nodes/0]).
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
- init() -> net_adm:ping(master@master).
12
+ init_conn() -> net_adm:ping(?MASTER_LOCATION).
9
13
  % Send the command Cmd to the pm_master process
10
- send_cmd(Cmd) -> pm_master:fire_cmd(Cmd).
14
+ send_cmd(Cmd) ->
15
+ init_conn(),
16
+ pm_master:fire_cmd(Cmd).
11
17
  % Reconfigure the cloud
12
- reconfigure_cloud() -> pm_master: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) -> pm_master: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() -> pm_master: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() -> pm_master:shutdown_cloud().
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,refresh_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 = "pp_cluster",
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
- refresh_live_nodes() ->
47
+ any_new_servers() ->
43
48
  String = ". /etc/profile && server-list-active -c name",
44
- Nodes = string:tokens(os:cmd(String), "\n\t"),
45
- io:format("nodes: ~p~n", [Nodes]),
46
- lists:map(
47
- fun(No) ->
48
- io:format("pinging ~p~n", [list_to_atom(lists:append("pp_cluster@",No))]),
49
- net_adm:ping(list_to_atom(lists:append("@pp_cluster", No)))
50
- end,
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, fire_cmd/1]).
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, ?SERVER}, ?MODULE, [], []).
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
- handle_call(_Request, _From, State) ->
58
- Reply = ok,
59
- {reply, Reply, State}.
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 = 3, % 1000
28
- MaxTimeBetRestarts = 30, % 3600
27
+ MaxRestarts = 1000,
28
+ MaxTimeBetRestarts = 3600,
29
+ TimeoutTime = 5000,
29
30
 
30
31
  SupFlags = {RestartStrategy, MaxRestarts, MaxTimeBetRestarts},
31
-
32
- LoadServers = [
33
- {pm_master1,
34
- {pm_master, start_link, []},
35
- permanent, 5000, worker,
36
- [pm_master]
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, fire_cmd/1, run_reconfig/0]).
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
- utils:start_timer(10000, fun() -> net_adm:ping(master) end),
38
- gen_server:start_link({global, ?SERVER}, ?MODULE, [], []).
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(_Msg, State) ->
75
- {noreply, State}.
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}.