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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(couch_event_os_listener).
-behaviour(gen_server).
-vsn(1).
-export([
start_link/1
]).
-export([
init/1,
terminate/2,
handle_call/3,
handle_cast/2,
handle_info/2,
code_change/3
]).
start_link(Exe) when is_list(Exe) ->
gen_server:start_link(?MODULE, Exe, []).
init(Exe) ->
process_flag(trap_exit, true),
ok = couch_event:register_all(self()),
couch_os_process:start_link(Exe, []).
terminate(_Reason, Pid) when is_pid(Pid) ->
couch_os_process:stop(Pid);
terminate(_Reason, _Pid) ->
ok.
handle_call(Msg, From, Pid) ->
couch_log:notice("~s ignoring call ~w from ~w", [?MODULE, Msg, From]),
{reply, ignored, Pid, 0}.
handle_cast(Msg, Pid) ->
couch_log:notice("~s ignoring cast ~w", [?MODULE, Msg]),
{noreply, Pid, 0}.
handle_info({'$couch_event', DbName, Event}, Pid) ->
Obj = {[
{db, DbName},
{type, list_to_binary(atom_to_list(Event))}
]},
ok = couch_os_process:send(Pid, Obj),
{noreply, Pid};
handle_info({'EXIT', Pid, Reason}, Pid) ->
couch_log:error("Update notificatio process ~w died: ~w", [Pid, Reason]),
{stop, normal, nil};
handle_info(Msg, Pid) ->
couch_log:notice("~s ignoring info ~w", [?MODULE, Msg]),
{noreply, Pid, 0}.
code_change(_OldVsn, St, _Extra) ->
{ok, St}.
|