@@ -32,81 +32,56 @@ defmodule Plausible.Application do
32
32
ttl_check_interval: :timer . seconds ( 1 ) ,
33
33
global_ttl: :timer . minutes ( 30 )
34
34
) ,
35
- { Plausible.Site.Cache , ttl_check_interval: false } ,
36
- { Plausible.Cache.Warmer ,
37
- [
38
- child_name: Plausible.Site.Cache.All ,
39
- cache_impl: Plausible.Site.Cache ,
40
- interval: :timer . minutes ( 15 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) ,
41
- warmer_fn: :refresh_all
42
- ] } ,
43
- { Plausible.Cache.Warmer ,
44
- [
45
- child_name: Plausible.Site.Cache.RecentlyUpdated ,
46
- cache_impl: Plausible.Site.Cache ,
47
- interval: :timer . seconds ( 30 ) ,
48
- warmer_fn: :refresh_updated_recently
49
- ] } ,
50
- { Plausible.Shield.IPRuleCache , ttl_check_interval: false } ,
51
- { Plausible.Cache.Warmer ,
52
- [
53
- child_name: Plausible.Shield.IPRuleCache.All ,
54
- cache_impl: Plausible.Shield.IPRuleCache ,
55
- interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) ,
56
- warmer_fn: :refresh_all
57
- ] } ,
58
- { Plausible.Cache.Warmer ,
59
- [
60
- child_name: Plausible.Shield.IPRuleCache.RecentlyUpdated ,
61
- cache_impl: Plausible.Shield.IPRuleCache ,
62
- interval: :timer . seconds ( 35 ) ,
63
- warmer_fn: :refresh_updated_recently
64
- ] } ,
65
- { Plausible.Shield.CountryRuleCache , ttl_check_interval: false } ,
66
- { Plausible.Cache.Warmer ,
67
- [
68
- child_name: Plausible.Shield.CountryRuleCache.All ,
69
- cache_impl: Plausible.Shield.CountryRuleCache ,
70
- interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) ,
71
- warmer_fn: :refresh_all
72
- ] } ,
73
- { Plausible.Cache.Warmer ,
74
- [
75
- child_name: Plausible.Shield.CountryRuleCache.RecentlyUpdated ,
76
- cache_impl: Plausible.Shield.CountryRuleCache ,
77
- interval: :timer . seconds ( 35 ) ,
78
- warmer_fn: :refresh_updated_recently
79
- ] } ,
80
- { Plausible.Shield.PageRuleCache , ttl_check_interval: false , ets_options: [ :bag ] } ,
81
- { Plausible.Cache.Warmer ,
82
- [
83
- child_name: Plausible.Shield.PageRuleCache.All ,
84
- cache_impl: Plausible.Shield.PageRuleCache ,
85
- interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) ,
86
- warmer_fn: :refresh_all
87
- ] } ,
88
- { Plausible.Cache.Warmer ,
89
- [
90
- child_name: Plausible.Shield.PageRuleCache.RecentlyUpdated ,
91
- cache_impl: Plausible.Shield.PageRuleCache ,
92
- interval: :timer . seconds ( 35 ) ,
93
- warmer_fn: :refresh_updated_recently
94
- ] } ,
95
- { Plausible.Shield.HostnameRuleCache , ttl_check_interval: false , ets_options: [ :bag ] } ,
96
- { Plausible.Cache.Warmer ,
97
- [
98
- child_name: Plausible.Shield.HostnameRuleCache.All ,
99
- cache_impl: Plausible.Shield.HostnameRuleCache ,
100
- interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) ,
101
- warmer_fn: :refresh_all
102
- ] } ,
103
- { Plausible.Cache.Warmer ,
104
- [
105
- child_name: Plausible.Shield.HostnameRuleCache.RecentlyUpdated ,
106
- cache_impl: Plausible.Shield.HostnameRuleCache ,
107
- interval: :timer . seconds ( 25 ) ,
108
- warmer_fn: :refresh_updated_recently
109
- ] } ,
35
+ warmed_cache ( Plausible.Site.Cache ,
36
+ adapter_opts: [ ttl_check_interval: false ] ,
37
+ warmers: [
38
+ refresh_all:
39
+ { Plausible.Site.Cache.All ,
40
+ interval: :timer . minutes ( 15 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) } ,
41
+ refresh_updated_recently:
42
+ { Plausible.Site.Cache.RecentlyUpdated , interval: :timer . seconds ( 30 ) }
43
+ ]
44
+ ) ,
45
+ warmed_cache ( Plausible.Shield.IPRuleCache ,
46
+ adapter_opts: [ ttl_check_interval: false ] ,
47
+ warmers: [
48
+ refresh_all:
49
+ { Plausible.Shield.IPRuleCache.All ,
50
+ interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) } ,
51
+ refresh_updated_recently:
52
+ { Plausible.Shield.IPRuleCache.RecentlyUpdated , interval: :timer . seconds ( 35 ) }
53
+ ]
54
+ ) ,
55
+ warmed_cache ( Plausible.Shield.CountryRuleCache ,
56
+ adapter_opts: [ ttl_check_interval: false ] ,
57
+ warmers: [
58
+ refresh_all:
59
+ { Plausible.Shield.CountryRuleCache.All ,
60
+ interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) } ,
61
+ refresh_updated_recently:
62
+ { Plausible.Shield.CountryRuleCache.RecentlyUpdated , interval: :timer . seconds ( 35 ) }
63
+ ]
64
+ ) ,
65
+ warmed_cache ( Plausible.Shield.PageRuleCache ,
66
+ adapter_opts: [ ttl_check_interval: false , ets_options: [ :bag ] ] ,
67
+ warmers: [
68
+ refresh_all:
69
+ { Plausible.Shield.PageRuleCache.All ,
70
+ interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) } ,
71
+ refresh_updated_recently:
72
+ { Plausible.Shield.PageRuleCache.RecentlyUpdated , interval: :timer . seconds ( 35 ) }
73
+ ]
74
+ ) ,
75
+ warmed_cache ( Plausible.Shield.HostnameRuleCache ,
76
+ adapter_opts: [ ttl_check_interval: false , ets_options: [ :bag ] ] ,
77
+ warmers: [
78
+ refresh_all:
79
+ { Plausible.Shield.HostnameRuleCache.All ,
80
+ interval: :timer . minutes ( 3 ) + Enum . random ( 1 .. :timer . seconds ( 10 ) ) } ,
81
+ refresh_updated_recently:
82
+ { Plausible.Shield.HostnameRuleCache.RecentlyUpdated , interval: :timer . seconds ( 25 ) }
83
+ ]
84
+ ) ,
110
85
{ Plausible.Auth.TOTP.Vault , key: totp_vault_key ( ) } ,
111
86
PlausibleWeb.Endpoint ,
112
87
{ Oban , Application . get_env ( :plausible , Oban ) } ,
@@ -123,7 +98,7 @@ defmodule Plausible.Application do
123
98
Location . load_all ( )
124
99
Plausible.Geo . await_loader ( )
125
100
126
- Supervisor . start_link ( children , opts )
101
+ Supervisor . start_link ( List . flatten ( children ) , opts )
127
102
end
128
103
129
104
def config_change ( changed , _new , removed ) do
@@ -222,4 +197,23 @@ defmodule Plausible.Application do
222
197
opts = Application . fetch_env! ( :plausible , Plausible.Geo )
223
198
:ok = Plausible.Geo . load_db ( opts )
224
199
end
200
+
201
+ defp warmed_cache ( impl_mod , opts ) when is_atom ( impl_mod ) and is_list ( opts ) do
202
+ warmers = Keyword . fetch! ( opts , :warmers )
203
+
204
+ warmer_specs =
205
+ Enum . map ( warmers , fn { warmer_fn , { warmer_id , warmer_opts } } ->
206
+ { Plausible.Cache.Warmer ,
207
+ Keyword . merge (
208
+ [
209
+ child_name: warmer_id ,
210
+ cache_impl: impl_mod ,
211
+ warmer_fn: warmer_fn
212
+ ] ,
213
+ warmer_opts
214
+ ) }
215
+ end )
216
+
217
+ [ { impl_mod , Keyword . fetch! ( opts , :adapter_opts ) } | warmer_specs ]
218
+ end
225
219
end
0 commit comments