_site/cover/pgmp_config.COVER.html

1 %% Copyright (c) 2022 Peter Morgan <peter.james.morgan@gmail.com>
2 %%
3 %% Licensed under the Apache License, Version 2.0 (the "License");
4 %% you may not use this file except in compliance with the License.
5 %% You may obtain a copy of the License at
6 %%
7 %% http://www.apache.org/licenses/LICENSE-2.0
8 %%
9 %% Unless required by applicable law or agreed to in writing, software
10 %% distributed under the License is distributed on an "AS IS" BASIS,
11 %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 %% See the License for the specific language governing permissions and
13 %% limitations under the License.
14
15
16 -module(pgmp_config).
17
18
19 -export([backoff/1]).
20 -export([codec/1]).
21 -export([database/1]).
22 -export([enabled/1]).
23 -export([pg/1]).
24 -export([pgoutput/2]).
25 -export([pool/1]).
26 -export([protocol/1]).
27 -export([rep_log_ets/1]).
28 -export([replication/2]).
29 -export([sup_flags/1]).
30 -export([telemetry/1]).
31 -export([timeout/1]).
32 -import(envy, [envy/1]).
33
34
35 sup_flags(Supervisor) ->
36 131 lists:foldl(
37 fun
38 (Name, A) ->
39 262 A#{Name => restart(Supervisor, Name)}
40 end,
41 #{},
42 [intensity, period]).
43
44
45 restart(Supervisor, Name) when Name == intensity; Name == period ->
46 262 envy(#{caller => ?MODULE,
47 names => [Supervisor, ?FUNCTION_NAME, Name],
48 default => restart(Name)}).
49
50 restart(intensity) ->
51 131 1;
52 restart(period) ->
53 131 5.
54
55
56 backoff(rand_increment = Name) ->
57
:-(
envy(#{caller => ?MODULE,
58 names => [?FUNCTION_NAME, Name],
59 default => 1}).
60
61 timeout(Name) ->
62 370 envy(#{caller => ?MODULE,
63 names => [Name, ?FUNCTION_NAME],
64 default => infinity}).
65
66
67 enabled(rep_log_ets_schema_in_table_name = Name) ->
68 176 envy(#{caller => ?MODULE,
69 names => [Name, ?FUNCTION_NAME],
70 default => false});
71
72 enabled(rep_log_ets_pub_in_table_name = Name) ->
73 176 envy(#{caller => ?MODULE,
74 names => [Name, ?FUNCTION_NAME],
75 default => false});
76
77 enabled(Name) ->
78 30 envy(#{caller => ?MODULE,
79 names => [Name, ?FUNCTION_NAME],
80 default => true}).
81
82
83 codec(Type) ->
84 18 envy(#{caller => ?MODULE,
85 names => [?FUNCTION_NAME, Type],
86 default => pgmp_identity}).
87
88
89 pg(scope = Name) ->
90 10 envy(#{caller => ?MODULE,
91 names => [?FUNCTION_NAME, Name],
92 default => pgmp});
93
94 pg(group = Name) ->
95
:-(
envy(#{caller => ?MODULE,
96 names => [?FUNCTION_NAME, Name],
97 default => mm}).
98
99
100 protocol(major = Name) ->
101 66 envy(#{caller => ?MODULE,
102 names => [?FUNCTION_NAME, Name],
103 default => 3});
104
105 protocol(minor = Name) ->
106 66 envy(#{caller => ?MODULE,
107 names => [?FUNCTION_NAME, Name],
108 default => 0}).
109
110 rep_log_ets(prefix_table_name = Name) ->
111 176 envy(#{caller => ?MODULE,
112 names => [?FUNCTION_NAME, Name],
113 default => []}).
114
115 replication(logical = Type, module = Name) ->
116 10 envy(#{caller => ?MODULE,
117 names => [?FUNCTION_NAME, Type, Name],
118 default => pgmp_rep_log_ets});
119
120 replication(logical = Type, slot_prefix = Name) ->
121 10 envy(#{caller => ?MODULE,
122 names => [?FUNCTION_NAME, Type, Name],
123 default => <<"pgmp">>});
124
125 replication(logical = Type, max_rows = Name) ->
126 5 envy(#{caller => ?MODULE,
127 names => [?FUNCTION_NAME, Type, Name],
128 default => 5_000});
129
130 replication(logical = Type, temporary = Name) ->
131 5 envy(#{caller => ?MODULE,
132 names => [?FUNCTION_NAME, Type, Name],
133 default => true});
134
135 replication(logical = Type, two_phase = Name) ->
136 10 envy(#{caller => ?MODULE,
137 names => [?FUNCTION_NAME, Type, Name],
138 default => false});
139
140 replication(logical = Type, reserve_wal = Name) ->
141 5 envy(#{caller => ?MODULE,
142 names => [?FUNCTION_NAME, Type, Name],
143 default => false});
144
145 replication(logical = Type, snapshot = Name) ->
146 5 envy(#{caller => ?MODULE,
147 names => [?FUNCTION_NAME, Type, Name],
148 default => export});
149
150 replication(logical = Type, publication_names = Name) ->
151
:-(
binary:split(
152 envy(#{caller => ?MODULE,
153 names => [?FUNCTION_NAME, Type, Name],
154 default => <<"pub">>}),
155 <<",">>,
156 [global, trim_all]).
157
158
159 pgoutput(two_phase = Name, _Version) ->
160 5 replication(logical, Name);
161
162 pgoutput(origin = Name, _Version) ->
163 5 envy(#{caller => ?MODULE,
164 names => [?FUNCTION_NAME, Name],
165 default => "any"});
166
167 pgoutput(binary = Name, _Version) ->
168 5 envy(#{caller => ?MODULE,
169 names => [?FUNCTION_NAME, Name],
170 default => true});
171
172 pgoutput(messages = Name, _Version) ->
173 5 envy(#{caller => ?MODULE,
174 names => [?FUNCTION_NAME, Name],
175 default => true});
176
177 pgoutput(streaming = Name, Version) when Version >= 4 ->
178 5 envy(#{caller => ?MODULE,
179 names => [?FUNCTION_NAME, Name],
180 default => "parallel"});
181
182 pgoutput(streaming = Name, _Version) ->
183
:-(
envy(#{caller => ?MODULE,
184 names => [?FUNCTION_NAME, Name],
185 default => true}).
186
187
188 database(options = Name) ->
189
:-(
envy(#{type => list,
190 caller => ?MODULE,
191 names => [?FUNCTION_NAME, Name]});
192
193 %% URI used to connect to the database; multiple URIs are separarated
194 %% with database(uri_separator) [default ";"]
195 %%
196 database(uri = Name) ->
197 10 envy(#{type => binary,
198 caller => ?MODULE,
199 names => [?FUNCTION_NAME, Name]});
200
201 %% with multiple databases the separator used between each PostgreSQL
202 %% connection URI
203 %%
204 database(uri_separator = Name) ->
205
:-(
envy(#{type => list,
206 caller => ?MODULE,
207 default => ";",
208 names => [?FUNCTION_NAME, Name]});
209
210 database(application_name = Name) ->
211 12272 envy(#{caller => ?MODULE,
212 names => [?FUNCTION_NAME, Name],
213 default => <<"default_application_name">>});
214
215 database(hostname = Name) ->
216 10 envy(#{caller => ?MODULE,
217 names => [?FUNCTION_NAME, Name],
218 default => <<"localhost">>});
219
220 database(port = Name) ->
221 10 envy(#{caller => ?MODULE,
222 names => [?FUNCTION_NAME, Name],
223 default => 5432});
224
225 database(user = Name) ->
226 20 envy(#{type => binary,
227 caller => ?MODULE,
228 names => [?FUNCTION_NAME, Name],
229 default => os:getenv("USER")});
230
231 database(password = Name) ->
232 66 envy(#{caller => ?MODULE,
233 names => [?FUNCTION_NAME, Name],
234 default => <<"">>});
235
236 database(replication = Name) ->
237
:-(
envy(#{caller => ?MODULE,
238 names => [?FUNCTION_NAME, Name],
239 default => <<"false">>});
240
241 database(name = Name) ->
242 10 envy(#{caller => ?MODULE,
243 names => [?FUNCTION_NAME, Name],
244 default => ?FUNCTION_NAME(user)}).
245
246
247 pool(max = Name) ->
248 10 envy(#{caller => ?MODULE,
249 names => [?FUNCTION_NAME, Name],
250 default => 5}).
251
252
253 telemetry(Name) when Name == module; Name == function ->
254 10 envy(#{caller => ?MODULE,
255 type => atom,
256 names =>[?FUNCTION_NAME, Name]});
257
258 telemetry(event_names = Name) ->
259
:-(
envy(#{caller => ?MODULE,
260 names => [?FUNCTION_NAME, Name],
261 default => filename:join(pgmp:priv_dir(), "telemetry.terms")});
262
263 telemetry(config = Name) ->
264
:-(
envy:get_env(pgmp,
265 pgmp_util:snake_case([?FUNCTION_NAME, Name]),
266 [app_env, {default, []}]).
Line Hits Source