aboutsummaryrefslogtreecommitdiff
path: root/apps/styx_service/src/styx_service.erl
blob: 1e7ff88cda36f4776c330f304b2d2c187eb9c43c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-module(styx_service).

-behaviour(gen_server).

-export([start_link/2]).

-export([init/1, handle_info/2]).

start_link(Name, Cmd) ->
    gen_server:start_link({local, Name}, ?MODULE, [Name, Cmd], []).

init([Name, Cmd]) ->
    Opts = [stdout, stderr],
    {ok, Pid, OsPid} = exec:run_link(Cmd, Opts),
    logger:info("Started system process ~p '~p', system pid = ~p", [Name, Cmd, OsPid]),
    {ok, {Name, Pid, OsPid}}.

handle_info({stdout, OsPid, Binary}, {Name, _Pid, OsPid} = State) ->
    logger:info("~p[~p] ~p", [Name, OsPid, Binary]),
    {noreply, State};
handle_info({stderr, OsPid, Binary}, {Name, _Pid, OsPid} = State) ->
    logger:warning("~p[~p] ~p", [Name, OsPid, Binary]),
    {noreply, State};
handle_info(Info, {Name, _, _} = State) ->
    logger:warning("~p ~p", [Name, Info]).