fix(backend): fix config cache not being used everytime
When loading a page, we inject various meta tags in the HTML. These made database calls everytime Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
a6721ec4ae
commit
ed3cd5858c
|
@ -1,45 +1,20 @@
|
||||||
|
|
||||||
02CE4963DFD1B0D6D5C567357CAFFE97
|
|
||||||
155A1FB53DE39EC8EFCFD7FB94EA823D
|
155A1FB53DE39EC8EFCFD7FB94EA823D
|
||||||
2262742E5C8944D5BF6698EC61F5DE50
|
1C29EE70E90ECED01AF28EC58D2575B5
|
||||||
25BEE162A99754480967216281E9EF33
|
31CE26BC979C57B9E3CC97B40C290CE5
|
||||||
2A6F71CD6F1246F0B152C2376E2E398A
|
3529E7A4CECC24D02678820E6F521162
|
||||||
30552A09D485A6AA73401C1D54F63C21
|
4A4B7002DEB734A943B467DF7D2BD1AA
|
||||||
52900CE4EE3598F6F178A651FB256770
|
4E7C044C59E0BCB76AA826789998F624
|
||||||
6151F44368FC19F2394274F513C29151
|
53CBBEB6243FAF5C37249CBA17DE6F4C
|
||||||
765526195D4C6D770EAF4DC944A8CBF4
|
5BCE3651A03711295046DE48BDFE007E
|
||||||
B2FF1A12F13B873507C85091688C1D6D
|
630C0972985257251EDF89A7117DE423
|
||||||
B9AF8A342CD7FF39E10CC10A408C28E1
|
8274AF29B81EC7CF7F585D5EED8A64E1
|
||||||
C042E87389F7BDCFF4E076E95731AE69
|
94ACF7B17C3FF42F64E57DD1DA936BD8
|
||||||
C42BFAEF7100F57BED75998B217C857A
|
A32E125003F1EDFAD95C487C6A969725
|
||||||
D11958E86F1B6D37EF656B63405CA8A4
|
ACF6272A1DBB3A2ABD96C0C120B5CA69
|
||||||
F16F054F2628609A726B9FF2F089D484
|
C46C4893B2F702ACADC4CAA5683FE370
|
||||||
26E816A7B054CB0347A2C6451F03B92B
|
CDF2CCE0CF10F49CDFAE22FE26208155
|
||||||
2B76BDDB2BB4D36D69FAE793EBD63894
|
E720CB13C50FF3ADEE7C522531E11217
|
||||||
301A837DE24C6AEE1DA812DF9E5486C1
|
E8FC5F2C5DEA6671BA596B022C4FE6F2
|
||||||
395A2740CB468F93F6EBE6E90EE08291
|
F3D5851D3FB050939841ED2F14307A27
|
||||||
4013C9866943B9381D9F9F97027F88A9
|
FD1C9756370A195B74E95CE504C45E9E
|
||||||
4C796DD588A4B1C98E86BBCD0349949A
|
|
||||||
51289D8D7BDB59CB6473E0DED0591ED7
|
|
||||||
5A70DC86895DB3610C605EA9F31ED300
|
|
||||||
705C17F9C852F546D886B20DB2C4D0D1
|
|
||||||
75D2074B6F771BA8C032008EC18CABDF
|
|
||||||
7B1C6E35A374C38FF5F07DBF23B3EAE2
|
|
||||||
955ACF52ADD8FCAA450FB8138CB1FD1A
|
|
||||||
A092A563729E1F2C1C8D5D809A31F754
|
|
||||||
BFA12FDEDEAD7DEAB6D44DF6FDFBD5E1
|
|
||||||
D9A08930F140F9BA494BB90B3F812C87
|
|
||||||
FE1EEB91EA633570F703B251AE2D4D4E
|
|
||||||
02B15A0FE85181E2470E4E1E6740DFF6
|
|
||||||
128653EA565172F81FD177D1D6491CF3
|
|
||||||
2EB031217231C480C89EA0C1576EF3CA
|
|
||||||
39CFFBCF3FD4F6DB0E4DE4A9A78D3961
|
|
||||||
40C6EAD7C05ABB6A85BB904589DEF72F
|
|
||||||
49DE9560D506F9E7EF3AFD8DA6E5564B
|
|
||||||
759F752FA0768CCC7871895DC2A5CD51
|
|
||||||
7EEC79571F3F7CEEB04A8B86D908382A
|
|
||||||
E7967805C1EA5301F2722C7BDB2F25F3
|
|
||||||
BDFB0FB1AAF69C18212CBCFD42F8B717
|
|
||||||
40220A533CCACB3A1CE9DBF1A8A430A1
|
|
||||||
EEB29D1DDA3A3015BC645A989B5BD38E
|
|
||||||
5AEE3C678C80E0389C3B0D9D11886EB6
|
|
|
@ -273,7 +273,6 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||||
|> Enum.into(%{}),
|
|> Enum.into(%{}),
|
||||||
:ok <- eventually_update_instance_actor(res) do
|
:ok <- eventually_update_instance_actor(res) do
|
||||||
Config.clear_config_cache()
|
Config.clear_config_cache()
|
||||||
Cachex.put(:config, :admin_config, res)
|
|
||||||
|
|
||||||
{:ok, res}
|
{:ok, res}
|
||||||
end
|
end
|
||||||
|
|
|
@ -78,6 +78,11 @@ defmodule Mobilizon.Admin do
|
||||||
|
|
||||||
defp stringify_struct(struct), do: struct
|
defp stringify_struct(struct), do: struct
|
||||||
|
|
||||||
|
@spec get_all_admin_settings :: list(Setting.t())
|
||||||
|
def get_all_admin_settings do
|
||||||
|
Repo.all(Setting)
|
||||||
|
end
|
||||||
|
|
||||||
@spec get_admin_setting_value(String.t(), String.t(), String.t() | nil) ::
|
@spec get_admin_setting_value(String.t(), String.t(), String.t() | nil) ::
|
||||||
String.t() | boolean() | nil | map() | list()
|
String.t() | boolean() | nil | map() | list()
|
||||||
def get_admin_setting_value(group, name, fallback \\ nil)
|
def get_admin_setting_value(group, name, fallback \\ nil)
|
||||||
|
|
|
@ -4,6 +4,7 @@ defmodule Mobilizon.Config do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
alias Mobilizon.Actors
|
alias Mobilizon.Actors
|
||||||
|
alias Mobilizon.Admin.Setting
|
||||||
alias Mobilizon.Service.GitStatus
|
alias Mobilizon.Service.GitStatus
|
||||||
require Logger
|
require Logger
|
||||||
import Mobilizon.Service.Export.Participants.Common, only: [enabled_formats: 0]
|
import Mobilizon.Service.Export.Participants.Common, only: [enabled_formats: 0]
|
||||||
|
@ -28,10 +29,67 @@ defmodule Mobilizon.Config do
|
||||||
@spec instance_config :: mobilizon_config
|
@spec instance_config :: mobilizon_config
|
||||||
def instance_config, do: Application.get_env(:mobilizon, :instance)
|
def instance_config, do: Application.get_env(:mobilizon, :instance)
|
||||||
|
|
||||||
|
@spec db_instance_config :: list(Setting.t())
|
||||||
|
def db_instance_config, do: Mobilizon.Admin.get_all_admin_settings()
|
||||||
|
|
||||||
|
@spec config_cache :: map()
|
||||||
|
def config_cache do
|
||||||
|
case Cachex.fetch(:config, :all_db_config, fn _key ->
|
||||||
|
value =
|
||||||
|
Enum.reduce(
|
||||||
|
Mobilizon.Admin.get_all_admin_settings(),
|
||||||
|
%{},
|
||||||
|
&arrange_values/2
|
||||||
|
)
|
||||||
|
|
||||||
|
{:commit, value}
|
||||||
|
end) do
|
||||||
|
{status, value} when status in [:ok, :commit] -> value
|
||||||
|
_err -> %{}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec arrange_values(Setting.t(), map()) :: map()
|
||||||
|
defp arrange_values(setting, acc) do
|
||||||
|
{_, new_data} =
|
||||||
|
Map.get_and_update(acc, setting.group, fn current_value ->
|
||||||
|
new_value = current_value || %{}
|
||||||
|
|
||||||
|
{current_value, Map.put(new_value, setting.name, process_value(setting.value))}
|
||||||
|
end)
|
||||||
|
|
||||||
|
new_data
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec process_value(String.t() | nil) :: any()
|
||||||
|
defp process_value(nil), do: nil
|
||||||
|
defp process_value(""), do: nil
|
||||||
|
|
||||||
|
defp process_value(value) do
|
||||||
|
case Jason.decode(value) do
|
||||||
|
{:ok, val} ->
|
||||||
|
val
|
||||||
|
|
||||||
|
{:error, _} ->
|
||||||
|
case value do
|
||||||
|
"true" -> true
|
||||||
|
"false" -> false
|
||||||
|
value -> value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec config_cached_value(String.t(), String.t(), String.t()) :: any()
|
||||||
|
def config_cached_value(group, name, fallback \\ nil) do
|
||||||
|
config_cache()
|
||||||
|
|> Map.get(group, %{})
|
||||||
|
|> Map.get(name, fallback)
|
||||||
|
end
|
||||||
|
|
||||||
@spec instance_name :: String.t()
|
@spec instance_name :: String.t()
|
||||||
def instance_name,
|
def instance_name,
|
||||||
do:
|
do:
|
||||||
Mobilizon.Admin.get_admin_setting_value(
|
config_cached_value(
|
||||||
"instance",
|
"instance",
|
||||||
"instance_name",
|
"instance_name",
|
||||||
instance_config()[:name]
|
instance_config()[:name]
|
||||||
|
@ -40,7 +98,7 @@ defmodule Mobilizon.Config do
|
||||||
@spec instance_description :: String.t()
|
@spec instance_description :: String.t()
|
||||||
def instance_description,
|
def instance_description,
|
||||||
do:
|
do:
|
||||||
Mobilizon.Admin.get_admin_setting_value(
|
config_cached_value(
|
||||||
"instance",
|
"instance",
|
||||||
"instance_description",
|
"instance_description",
|
||||||
instance_config()[:description]
|
instance_config()[:description]
|
||||||
|
@ -49,37 +107,37 @@ defmodule Mobilizon.Config do
|
||||||
@spec instance_long_description :: String.t()
|
@spec instance_long_description :: String.t()
|
||||||
def instance_long_description,
|
def instance_long_description,
|
||||||
do:
|
do:
|
||||||
Mobilizon.Admin.get_admin_setting_value(
|
config_cached_value(
|
||||||
"instance",
|
"instance",
|
||||||
"instance_long_description"
|
"instance_long_description"
|
||||||
)
|
)
|
||||||
|
|
||||||
@spec instance_slogan :: String.t() | nil
|
@spec instance_slogan :: String.t() | nil
|
||||||
def instance_slogan, do: Mobilizon.Admin.get_admin_setting_value("instance", "instance_slogan")
|
def instance_slogan, do: config_cached_value("instance", "instance_slogan")
|
||||||
|
|
||||||
@spec contact :: String.t() | nil
|
@spec contact :: String.t() | nil
|
||||||
def contact do
|
def contact do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "contact")
|
config_cached_value("instance", "contact")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_terms(String.t()) :: String.t()
|
@spec instance_terms(String.t()) :: String.t()
|
||||||
def instance_terms(locale \\ "en") do
|
def instance_terms(locale \\ "en") do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms", generate_terms(locale))
|
config_cached_value("instance", "instance_terms", generate_terms(locale))
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_terms_type :: String.t()
|
@spec instance_terms_type :: String.t()
|
||||||
def instance_terms_type do
|
def instance_terms_type do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms_type", "DEFAULT")
|
config_cached_value("instance", "instance_terms_type", "DEFAULT")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_terms_url :: String.t() | nil
|
@spec instance_terms_url :: String.t() | nil
|
||||||
def instance_terms_url do
|
def instance_terms_url do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms_url")
|
config_cached_value("instance", "instance_terms_url")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_privacy(String.t()) :: String.t()
|
@spec instance_privacy(String.t()) :: String.t()
|
||||||
def instance_privacy(locale \\ "en") do
|
def instance_privacy(locale \\ "en") do
|
||||||
Mobilizon.Admin.get_admin_setting_value(
|
config_cached_value(
|
||||||
"instance",
|
"instance",
|
||||||
"instance_privacy_policy",
|
"instance_privacy_policy",
|
||||||
generate_privacy(locale)
|
generate_privacy(locale)
|
||||||
|
@ -88,17 +146,17 @@ defmodule Mobilizon.Config do
|
||||||
|
|
||||||
@spec instance_privacy_type :: String.t()
|
@spec instance_privacy_type :: String.t()
|
||||||
def instance_privacy_type do
|
def instance_privacy_type do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_privacy_policy_type", "DEFAULT")
|
config_cached_value("instance", "instance_privacy_policy_type", "DEFAULT")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_privacy_url :: String.t()
|
@spec instance_privacy_url :: String.t()
|
||||||
def instance_privacy_url do
|
def instance_privacy_url do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_privacy_policy_url")
|
config_cached_value("instance", "instance_privacy_policy_url")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_rules :: String.t()
|
@spec instance_rules :: String.t()
|
||||||
def instance_rules do
|
def instance_rules do
|
||||||
Mobilizon.Admin.get_admin_setting_value("instance", "instance_rules")
|
config_cached_value("instance", "instance_rules")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec instance_version :: String.t()
|
@spec instance_version :: String.t()
|
||||||
|
@ -113,7 +171,7 @@ defmodule Mobilizon.Config do
|
||||||
def instance_registrations_open?,
|
def instance_registrations_open?,
|
||||||
do:
|
do:
|
||||||
to_boolean(
|
to_boolean(
|
||||||
Mobilizon.Admin.get_admin_setting_value(
|
config_cached_value(
|
||||||
"instance",
|
"instance",
|
||||||
"registrations_open",
|
"registrations_open",
|
||||||
instance_config()[:registrations_open]
|
instance_config()[:registrations_open]
|
||||||
|
@ -123,7 +181,7 @@ defmodule Mobilizon.Config do
|
||||||
@spec instance_languages :: list(String.t())
|
@spec instance_languages :: list(String.t())
|
||||||
def instance_languages,
|
def instance_languages,
|
||||||
do:
|
do:
|
||||||
Mobilizon.Admin.get_admin_setting_value(
|
config_cached_value(
|
||||||
"instance",
|
"instance",
|
||||||
"instance_languages",
|
"instance_languages",
|
||||||
instance_config()[:languages]
|
instance_config()[:languages]
|
||||||
|
@ -322,8 +380,6 @@ defmodule Mobilizon.Config do
|
||||||
|
|
||||||
@spec anonymous_actor_id :: integer
|
@spec anonymous_actor_id :: integer
|
||||||
def anonymous_actor_id, do: get_cached_value(:anonymous_actor_id)
|
def anonymous_actor_id, do: get_cached_value(:anonymous_actor_id)
|
||||||
@spec admin_settings :: map
|
|
||||||
def admin_settings, do: get_cached_value(:admin_config)
|
|
||||||
|
|
||||||
@spec get(keys :: module | atom | [module | atom]) :: any
|
@spec get(keys :: module | atom | [module | atom]) :: any
|
||||||
def get(key), do: get(key, nil)
|
def get(key), do: get(key, nil)
|
||||||
|
@ -399,8 +455,11 @@ defmodule Mobilizon.Config do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp create_cache(:admin_config) do
|
defp create_cache(_), do: {:error, :cache_key_not_handled}
|
||||||
data = %{
|
|
||||||
|
@spec admin_settings :: map()
|
||||||
|
def admin_settings do
|
||||||
|
%{
|
||||||
instance_description: instance_description(),
|
instance_description: instance_description(),
|
||||||
instance_long_description: instance_long_description(),
|
instance_long_description: instance_long_description(),
|
||||||
instance_name: instance_name(),
|
instance_name: instance_name(),
|
||||||
|
@ -416,8 +475,6 @@ defmodule Mobilizon.Config do
|
||||||
instance_rules: instance_rules(),
|
instance_rules: instance_rules(),
|
||||||
instance_languages: instance_languages()
|
instance_languages: instance_languages()
|
||||||
}
|
}
|
||||||
|
|
||||||
{:ok, data}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec clear_config_cache :: {:ok | :error, integer}
|
@spec clear_config_cache :: {:ok | :error, integer}
|
||||||
|
|
Loading…
Reference in a new issue