-
Notifications
You must be signed in to change notification settings - Fork 28
/
ns_config_log.erl
73 lines (59 loc) · 2.42 KB
/
ns_config_log.erl
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
%% @author Northscale <info@northscale.com>
%% @copyright 2009 NorthScale, Inc.
%%
%% 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(ns_config_log).
-behaviour(gen_event).
-export([start_link/0, setup_handler/0]).
%% gen_event callbacks
-export([init/1, handle_event/2, handle_call/2,
handle_info/2, terminate/2, code_change/3]).
-record(state, {last}).
start_link() ->
{ok, spawn_link(?MODULE, setup_handler, [])}.
setup_handler() ->
gen_event:add_handler(ns_config_events, ?MODULE, ignored).
init(ignored) ->
{ok, #state{last = undefined}, hibernate}.
terminate(_Reason, _State) -> ok.
code_change(_OldVsn, State, _) -> {ok, State}.
% Don't log values for some password/auth-related config values.
handle_event({rest_creds = K, _V}, State) ->
error_logger:info_msg("config change: ~p -> ********", [K]),
{ok, State, hibernate};
handle_event({alerts = K, V}, State) ->
V2 = lists:map(fun({email_server, ES}) ->
lists:map(fun({pass, _}) -> {pass, "********"};
(ESKeyVal) -> ESKeyVal
end,
ES);
(V2KeyVal) -> V2KeyVal
end,
V),
error_logger:info_msg("config change:~n~p ->~n~p~n", [K, V2]),
{ok, State, hibernate};
handle_event({K, V}, State) ->
%% These can get pretty big, so pre-format them for the logger.
VB = list_to_binary(io_lib:print(V, 0, 80, 100)),
error_logger:info_msg("config change:~n~p ->~n~s~n", [K, VB]),
{ok, State, hibernate};
handle_event(KVList, State) when is_list(KVList) ->
{ok, State#state{last = KVList}, hibernate};
handle_event(_, State) ->
{ok, State, hibernate}.
handle_call(Request, State) ->
error_logger:info_msg("handle_call(~p, ~p)~n", [Request, State]),
{ok, ok, State, hibernate}.
handle_info(_Info, State) ->
{ok, State, hibernate}.