diff options
author | Magnus Ahltorp <map@kth.se> | 2017-01-27 02:02:39 +0100 |
---|---|---|
committer | Magnus Ahltorp <map@kth.se> | 2017-01-27 02:03:24 +0100 |
commit | d4793aea4dfbf1862bf6ca8eb5cf4279a41b36a4 (patch) | |
tree | 0814d4181a2cc946f3ada50f3e9c2b2b43eba7b8 /src/plopcontrol.erl | |
parent | 7b114604595b2e3bb0816ffb01548b02c43cdea5 (diff) |
Separate erlang config file for reloadable parameters
Diffstat (limited to 'src/plopcontrol.erl')
-rw-r--r-- | src/plopcontrol.erl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/plopcontrol.erl b/src/plopcontrol.erl new file mode 100644 index 0000000..de7faba --- /dev/null +++ b/src/plopcontrol.erl @@ -0,0 +1,44 @@ +%%% Copyright (c) 2017, NORDUnet A/S. +%%% See LICENSE for licensing information. + +-module(plopcontrol). +-export([start_link/0, server_start/2]). + +start_link() -> + case gen_tcp:listen(application:get_env(plop, plopcontrolport, 0), [binary, {packet, line}, + {active, false}, + {ip, {127, 0, 0, 1}}]) of + {ok, ListenSocket} -> + proc_lib:start_link(?MODULE,server_start,[self(), ListenSocket]); + {error,Reason} -> + {error,Reason} + end. + +server_start(Parent, ListenSocket) -> + proc_lib:init_ack(Parent, {ok, self()}), + {ok, Port} = inet:port(ListenSocket), + {ok, PlopcontrolFile} = application:get_env(plop, plopcontrol), + atomic:replacefile(PlopcontrolFile, integer_to_list(Port)), + acceptloop(ListenSocket). + +acceptloop(ListenSocket) -> + {ok, Socket} = gen_tcp:accept(ListenSocket), + commandloop(Socket), + acceptloop(ListenSocket). + +commandloop(Socket) -> + case gen_tcp:recv(Socket, 0) of + {ok, Packet} -> + Answer = command(Packet), + gen_tcp:send(Socket, Answer), + commandloop(Socket); + {error, _Reason} -> + ok + end. + +command(<<"reload\n">>) -> + plopconfig:load_config(), + "reload completed\n"; + +command(_) -> + "unknown command\n". |