use default child_specs
This commit is contained in:
parent
4a5b0965a0
commit
51bdf0cab6
@ -3,11 +3,14 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.Application do
|
defmodule Pleroma.Application do
|
||||||
|
import Cachex.Spec
|
||||||
use Application
|
use Application
|
||||||
|
|
||||||
@name Mix.Project.config()[:name]
|
@name Mix.Project.config()[:name]
|
||||||
@version Mix.Project.config()[:version]
|
@version Mix.Project.config()[:version]
|
||||||
@repository Mix.Project.config()[:source_url]
|
@repository Mix.Project.config()[:source_url]
|
||||||
|
@env Mix.env()
|
||||||
|
|
||||||
def name, do: @name
|
def name, do: @name
|
||||||
def version, do: @version
|
def version, do: @version
|
||||||
def named_version, do: @name <> " " <> @version
|
def named_version, do: @name <> " " <> @version
|
||||||
@ -21,116 +24,25 @@ defmodule Pleroma.Application do
|
|||||||
# See http://elixir-lang.org/docs/stable/elixir/Application.html
|
# See http://elixir-lang.org/docs/stable/elixir/Application.html
|
||||||
# for more information on OTP Applications
|
# for more information on OTP Applications
|
||||||
def start(_type, _args) do
|
def start(_type, _args) do
|
||||||
import Cachex.Spec
|
|
||||||
|
|
||||||
Pleroma.Config.DeprecationWarnings.warn()
|
Pleroma.Config.DeprecationWarnings.warn()
|
||||||
setup_instrumenters()
|
setup_instrumenters()
|
||||||
|
|
||||||
# Define workers and child supervisors to be supervised
|
# Define workers and child supervisors to be supervised
|
||||||
children =
|
children =
|
||||||
[
|
[
|
||||||
# Start the Ecto repository
|
Pleroma.Repo,
|
||||||
%{id: Pleroma.Repo, start: {Pleroma.Repo, :start_link, []}, type: :supervisor},
|
Pleroma.Config.TransferTask,
|
||||||
%{id: Pleroma.Config.TransferTask, start: {Pleroma.Config.TransferTask, :start_link, []}},
|
Pleroma.Emoji,
|
||||||
%{id: Pleroma.Emoji, start: {Pleroma.Emoji, :start_link, []}},
|
Pleroma.Captcha,
|
||||||
%{id: Pleroma.Captcha, start: {Pleroma.Captcha, :start_link, []}},
|
Pleroma.FlakeId,
|
||||||
%{
|
Pleroma.ScheduledActivityWorker
|
||||||
id: :cachex_used_captcha_cache,
|
|
||||||
start:
|
|
||||||
{Cachex, :start_link,
|
|
||||||
[
|
|
||||||
:used_captcha_cache,
|
|
||||||
[
|
|
||||||
ttl_interval:
|
|
||||||
:timer.seconds(Pleroma.Config.get!([Pleroma.Captcha, :seconds_valid]))
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :cachex_user,
|
|
||||||
start:
|
|
||||||
{Cachex, :start_link,
|
|
||||||
[
|
|
||||||
:user_cache,
|
|
||||||
[
|
|
||||||
default_ttl: 25_000,
|
|
||||||
ttl_interval: 1000,
|
|
||||||
limit: 2500
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :cachex_object,
|
|
||||||
start:
|
|
||||||
{Cachex, :start_link,
|
|
||||||
[
|
|
||||||
:object_cache,
|
|
||||||
[
|
|
||||||
default_ttl: 25_000,
|
|
||||||
ttl_interval: 1000,
|
|
||||||
limit: 2500
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :cachex_rich_media,
|
|
||||||
start:
|
|
||||||
{Cachex, :start_link,
|
|
||||||
[
|
|
||||||
:rich_media_cache,
|
|
||||||
[
|
|
||||||
default_ttl: :timer.minutes(120),
|
|
||||||
limit: 5000
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :cachex_scrubber,
|
|
||||||
start:
|
|
||||||
{Cachex, :start_link,
|
|
||||||
[
|
|
||||||
:scrubber_cache,
|
|
||||||
[
|
|
||||||
limit: 2500
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: :cachex_idem,
|
|
||||||
start:
|
|
||||||
{Cachex, :start_link,
|
|
||||||
[
|
|
||||||
:idempotency_cache,
|
|
||||||
[
|
|
||||||
expiration:
|
|
||||||
expiration(
|
|
||||||
default: :timer.seconds(6 * 60 * 60),
|
|
||||||
interval: :timer.seconds(60)
|
|
||||||
),
|
|
||||||
limit: 2500
|
|
||||||
]
|
|
||||||
]}
|
|
||||||
},
|
|
||||||
%{id: Pleroma.FlakeId, start: {Pleroma.FlakeId, :start_link, []}},
|
|
||||||
%{
|
|
||||||
id: Pleroma.ScheduledActivityWorker,
|
|
||||||
start: {Pleroma.ScheduledActivityWorker, :start_link, []}
|
|
||||||
}
|
|
||||||
] ++
|
] ++
|
||||||
|
cachex_children() ++
|
||||||
hackney_pool_children() ++
|
hackney_pool_children() ++
|
||||||
[
|
[
|
||||||
%{
|
Pleroma.Web.Federator.RetryQueue,
|
||||||
id: Pleroma.Web.Federator.RetryQueue,
|
Pleroma.Web.OAuth.Token.CleanWorker,
|
||||||
start: {Pleroma.Web.Federator.RetryQueue, :start_link, []}
|
Pleroma.Stats,
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: Pleroma.Web.OAuth.Token.CleanWorker,
|
|
||||||
start: {Pleroma.Web.OAuth.Token.CleanWorker, :start_link, []}
|
|
||||||
},
|
|
||||||
%{
|
|
||||||
id: Pleroma.Stats,
|
|
||||||
start: {Pleroma.Stats, :start_link, []}
|
|
||||||
},
|
|
||||||
%{
|
%{
|
||||||
id: :web_push_init,
|
id: :web_push_init,
|
||||||
start: {Task, :start_link, [&Pleroma.Web.Push.init/0]},
|
start: {Task, :start_link, [&Pleroma.Web.Push.init/0]},
|
||||||
@ -147,16 +59,11 @@ defmodule Pleroma.Application do
|
|||||||
restart: :temporary
|
restart: :temporary
|
||||||
}
|
}
|
||||||
] ++
|
] ++
|
||||||
streamer_child() ++
|
streamer_child(@env) ++
|
||||||
chat_child() ++
|
chat_child(@env, chat_enabled?()) ++
|
||||||
[
|
[
|
||||||
# Start the endpoint when the application starts
|
Pleroma.Web.Endpoint,
|
||||||
%{
|
Pleroma.Gopher.Server
|
||||||
id: Pleroma.Web.Endpoint,
|
|
||||||
start: {Pleroma.Web.Endpoint, :start_link, []},
|
|
||||||
type: :supervisor
|
|
||||||
},
|
|
||||||
%{id: Pleroma.Gopher.Server, start: {Pleroma.Gopher.Server, :start_link, []}}
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
|
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
|
||||||
@ -201,28 +108,46 @@ defmodule Pleroma.Application do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if Pleroma.Config.get(:env) == :test do
|
defp cachex_children do
|
||||||
defp streamer_child, do: []
|
[
|
||||||
defp chat_child, do: []
|
build_cachex("used_captcha", ttl_interval: seconds_valid_interval()),
|
||||||
else
|
build_cachex("user", default_ttl: 25_000, ttl_interval: 1000, limit: 2500),
|
||||||
defp streamer_child do
|
build_cachex("object", default_ttl: 25_000, ttl_interval: 1000, limit: 2500),
|
||||||
[%{id: Pleroma.Web.Streamer, start: {Pleroma.Web.Streamer, :start_link, []}}]
|
build_cachex("rich_media", default_ttl: :timer.minutes(120), limit: 5000),
|
||||||
end
|
build_cachex("scrubber", limit: 2500),
|
||||||
|
build_cachex("idempotency", expiration: idempotency_expiration(), limit: 2500)
|
||||||
defp chat_child do
|
]
|
||||||
if Pleroma.Config.get([:chat, :enabled]) do
|
|
||||||
[
|
|
||||||
%{
|
|
||||||
id: Pleroma.Web.ChatChannel.ChatChannelState,
|
|
||||||
start: {Pleroma.Web.ChatChannel.ChatChannelState, :start_link, []}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
else
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp idempotency_expiration,
|
||||||
|
do: expiration(default: :timer.seconds(6 * 60 * 60), interval: :timer.seconds(60))
|
||||||
|
|
||||||
|
defp seconds_valid_interval,
|
||||||
|
do: :timer.seconds(Pleroma.Config.get!([Pleroma.Captcha, :seconds_valid]))
|
||||||
|
|
||||||
|
defp build_cachex(type, opts),
|
||||||
|
do: %{
|
||||||
|
id: String.to_atom("cachex_" <> type),
|
||||||
|
start: {Cachex, :start_link, [String.to_atom(type <> "_cache"), opts]},
|
||||||
|
type: :worker
|
||||||
|
}
|
||||||
|
|
||||||
|
defp chat_enabled?, do: Pleroma.Config.get([:chat, :enabled])
|
||||||
|
|
||||||
|
defp streamer_child(:test), do: []
|
||||||
|
|
||||||
|
defp streamer_child(_) do
|
||||||
|
[Pleroma.Web.Streamer]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp chat_child(:test, _), do: []
|
||||||
|
|
||||||
|
defp chat_child(_env, true) do
|
||||||
|
[Pleroma.Web.ChatChannel.ChatChannelState]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp chat_child(_, _), do: []
|
||||||
|
|
||||||
defp hackney_pool_children do
|
defp hackney_pool_children do
|
||||||
for pool <- enabled_hackney_pools() do
|
for pool <- enabled_hackney_pools() do
|
||||||
options = Pleroma.Config.get([:hackney_pools, pool])
|
options = Pleroma.Config.get([:hackney_pools, pool])
|
||||||
|
@ -12,7 +12,7 @@ defmodule Pleroma.Captcha do
|
|||||||
use GenServer
|
use GenServer
|
||||||
|
|
||||||
@doc false
|
@doc false
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
GenServer.start_link(__MODULE__, [], name: __MODULE__)
|
GenServer.start_link(__MODULE__, [], name: __MODULE__)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ defmodule Pleroma.Config.TransferTask do
|
|||||||
use Task
|
use Task
|
||||||
alias Pleroma.Web.AdminAPI.Config
|
alias Pleroma.Web.AdminAPI.Config
|
||||||
|
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
load_and_update_env()
|
load_and_update_env()
|
||||||
if Pleroma.Config.get(:env) == :test, do: Ecto.Adapters.SQL.Sandbox.checkin(Pleroma.Repo)
|
if Pleroma.Config.get(:env) == :test, do: Ecto.Adapters.SQL.Sandbox.checkin(Pleroma.Repo)
|
||||||
:ignore
|
:ignore
|
||||||
|
@ -24,7 +24,7 @@ defmodule Pleroma.Emoji do
|
|||||||
@ets_options [:ordered_set, :protected, :named_table, {:read_concurrency, true}]
|
@ets_options [:ordered_set, :protected, :named_table, {:read_concurrency, true}]
|
||||||
|
|
||||||
@doc false
|
@doc false
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
GenServer.start_link(__MODULE__, [], name: __MODULE__)
|
GenServer.start_link(__MODULE__, [], name: __MODULE__)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ defmodule Pleroma.FlakeId do
|
|||||||
def autogenerate, do: get()
|
def autogenerate, do: get()
|
||||||
|
|
||||||
# -- GenServer API
|
# -- GenServer API
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
:gen_server.start_link({:local, :flake}, __MODULE__, [], [])
|
:gen_server.start_link({:local, :flake}, __MODULE__, [], [])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ defmodule Pleroma.Gopher.Server do
|
|||||||
use GenServer
|
use GenServer
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
config = Pleroma.Config.get(:gopher, [])
|
config = Pleroma.Config.get(:gopher, [])
|
||||||
ip = Keyword.get(config, :ip, {0, 0, 0, 0})
|
ip = Keyword.get(config, :ip, {0, 0, 0, 0})
|
||||||
port = Keyword.get(config, :port, 1234)
|
port = Keyword.get(config, :port, 1234)
|
||||||
|
@ -16,7 +16,7 @@ defmodule Pleroma.ScheduledActivityWorker do
|
|||||||
|
|
||||||
@schedule_interval :timer.minutes(1)
|
@schedule_interval :timer.minutes(1)
|
||||||
|
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
GenServer.start_link(__MODULE__, nil)
|
GenServer.start_link(__MODULE__, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -7,7 +7,9 @@ defmodule Pleroma.Stats do
|
|||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
|
||||||
def start_link do
|
use Agent
|
||||||
|
|
||||||
|
def start_link(_) do
|
||||||
agent = Agent.start_link(fn -> {[], %{}} end, name: __MODULE__)
|
agent = Agent.start_link(fn -> {[], %{}} end, name: __MODULE__)
|
||||||
spawn(fn -> schedule_update() end)
|
spawn(fn -> schedule_update() end)
|
||||||
agent
|
agent
|
||||||
|
@ -33,9 +33,11 @@ defmodule Pleroma.Web.ChatChannel do
|
|||||||
end
|
end
|
||||||
|
|
||||||
defmodule Pleroma.Web.ChatChannel.ChatChannelState do
|
defmodule Pleroma.Web.ChatChannel.ChatChannelState do
|
||||||
|
use Agent
|
||||||
|
|
||||||
@max_messages 20
|
@max_messages 20
|
||||||
|
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
Agent.start_link(fn -> %{max_id: 1, messages: []} end, name: __MODULE__)
|
Agent.start_link(fn -> %{max_id: 1, messages: []} end, name: __MODULE__)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ defmodule Pleroma.Web.Federator.RetryQueue do
|
|||||||
{:ok, %{args | queue_table: queue_table, running_jobs: :sets.new()}}
|
{:ok, %{args | queue_table: queue_table, running_jobs: :sets.new()}}
|
||||||
end
|
end
|
||||||
|
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
enabled =
|
enabled =
|
||||||
if Pleroma.Config.get(:env) == :test,
|
if Pleroma.Config.get(:env) == :test,
|
||||||
do: true,
|
do: true,
|
||||||
|
@ -6,6 +6,7 @@ defmodule Pleroma.Web.OAuth.Token.CleanWorker do
|
|||||||
@moduledoc """
|
@moduledoc """
|
||||||
The module represents functions to clean an expired oauth tokens.
|
The module represents functions to clean an expired oauth tokens.
|
||||||
"""
|
"""
|
||||||
|
use GenServer
|
||||||
|
|
||||||
# 10 seconds
|
# 10 seconds
|
||||||
@start_interval 10_000
|
@start_interval 10_000
|
||||||
@ -18,7 +19,7 @@ defmodule Pleroma.Web.OAuth.Token.CleanWorker do
|
|||||||
|
|
||||||
alias Pleroma.Web.OAuth.Token
|
alias Pleroma.Web.OAuth.Token
|
||||||
|
|
||||||
def start_link, do: GenServer.start_link(__MODULE__, nil)
|
def start_link(_), do: GenServer.start_link(__MODULE__, nil)
|
||||||
|
|
||||||
def init(_) do
|
def init(_) do
|
||||||
if Pleroma.Config.get([:oauth2, :clean_expired_tokens], false) do
|
if Pleroma.Config.get([:oauth2, :clean_expired_tokens], false) do
|
||||||
|
@ -18,7 +18,7 @@ defmodule Pleroma.Web.Streamer do
|
|||||||
|
|
||||||
@keepalive_interval :timer.seconds(30)
|
@keepalive_interval :timer.seconds(30)
|
||||||
|
|
||||||
def start_link do
|
def start_link(_) do
|
||||||
GenServer.start_link(__MODULE__, %{}, name: __MODULE__)
|
GenServer.start_link(__MODULE__, %{}, name: __MODULE__)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ defmodule Pleroma.Config.TransferTaskTest do
|
|||||||
value: [live: 15, com: 35]
|
value: [live: 15, com: 35]
|
||||||
})
|
})
|
||||||
|
|
||||||
Pleroma.Config.TransferTask.start_link()
|
Pleroma.Config.TransferTask.start_link([])
|
||||||
|
|
||||||
assert Application.get_env(:pleroma, :test_key) == [live: 2, com: 3]
|
assert Application.get_env(:pleroma, :test_key) == [live: 2, com: 3]
|
||||||
assert Application.get_env(:idna, :test_key) == [live: 15, com: 35]
|
assert Application.get_env(:idna, :test_key) == [live: 15, com: 35]
|
||||||
@ -50,7 +50,7 @@ defmodule Pleroma.Config.TransferTaskTest do
|
|||||||
})
|
})
|
||||||
|
|
||||||
assert ExUnit.CaptureLog.capture_log(fn ->
|
assert ExUnit.CaptureLog.capture_log(fn ->
|
||||||
Pleroma.Config.TransferTask.start_link()
|
Pleroma.Config.TransferTask.start_link([])
|
||||||
end) =~
|
end) =~
|
||||||
"updating env causes error, key: \"undefined_atom_key\", error: %ArgumentError{message: \"argument error\"}"
|
"updating env causes error, key: \"undefined_atom_key\", error: %ArgumentError{message: \"argument error\"}"
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user