X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fpleroma%2Fapplication.ex;h=eeb415084041cdec1e212942a9d75f9b6e94a38e;hb=527093e35760633c0abb23d67d1c379d5536d342;hp=4b997c04862bdbacada2b667b73b443e6d2d290d;hpb=dec23500d8988c22a99f049ef1d1e49328ba075a;p=akkoma
diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex
index 4b997c048..eeb415084 100644
--- a/lib/pleroma/application.ex
+++ b/lib/pleroma/application.ex
@@ -1,18 +1,20 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2018 Pleroma Authors
+# Copyright © 2017-2019 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Application do
use Application
import Supervisor.Spec
- @name "Pleroma"
+ @name Mix.Project.config()[:name]
@version Mix.Project.config()[:version]
+ @repository Mix.Project.config()[:source_url]
def name, do: @name
def version, do: @version
- def named_version(), do: @name <> " " <> @version
+ def named_version, do: @name <> " " <> @version
+ def repository, do: @repository
- def user_agent() do
+ def user_agent do
info = "#{Pleroma.Web.base_url()} <#{Pleroma.Config.get([:instance, :email], "")}>"
named_version() <> "; " <> info
end
@@ -22,6 +24,9 @@ defmodule Pleroma.Application do
def start(_type, _args) do
import Cachex.Spec
+ Pleroma.Config.DeprecationWarnings.warn()
+ setup_instrumenters()
+
# Define workers and child supervisors to be supervised
children =
[
@@ -29,12 +34,22 @@ defmodule Pleroma.Application do
supervisor(Pleroma.Repo, []),
worker(Pleroma.Emoji, []),
worker(Pleroma.Captcha, []),
+ worker(
+ Cachex,
+ [
+ :used_captcha_cache,
+ [
+ ttl_interval: :timer.seconds(Pleroma.Config.get!([Pleroma.Captcha, :seconds_valid]))
+ ]
+ ],
+ id: :cachex_used_captcha_cache
+ ),
worker(
Cachex,
[
:user_cache,
[
- default_ttl: 25000,
+ default_ttl: 25_000,
ttl_interval: 1000,
limit: 2500
]
@@ -46,13 +61,24 @@ defmodule Pleroma.Application do
[
:object_cache,
[
- default_ttl: 25000,
+ default_ttl: 25_000,
ttl_interval: 1000,
limit: 2500
]
],
id: :cachex_object
),
+ worker(
+ Cachex,
+ [
+ :rich_media_cache,
+ [
+ default_ttl: :timer.minutes(120),
+ limit: 5000
+ ]
+ ],
+ id: :cachex_rich_media
+ ),
worker(
Cachex,
[
@@ -78,11 +104,16 @@ defmodule Pleroma.Application do
],
id: :cachex_idem
),
- worker(Pleroma.Web.Federator.RetryQueue, []),
- worker(Pleroma.Web.Federator, []),
- worker(Pleroma.Stats, []),
- worker(Pleroma.Web.Push, [])
+ worker(Pleroma.FlakeId, []),
+ worker(Pleroma.ScheduledActivityWorker, [])
] ++
+ hackney_pool_children() ++
+ [
+ worker(Pleroma.Web.Federator.RetryQueue, []),
+ worker(Pleroma.Stats, []),
+ worker(Task, [&Pleroma.Web.Push.init/0], restart: :temporary, id: :web_push_init),
+ worker(Task, [&Pleroma.Web.Federator.init/0], restart: :temporary, id: :federator_init)
+ ] ++
streamer_child() ++
chat_child() ++
[
@@ -97,15 +128,47 @@ defmodule Pleroma.Application do
Supervisor.start_link(children, opts)
end
+ defp setup_instrumenters do
+ require Prometheus.Registry
+
+ :ok =
+ :telemetry.attach(
+ "prometheus-ecto",
+ [:pleroma, :repo, :query],
+ &Pleroma.Repo.Instrumenter.handle_event/4,
+ %{}
+ )
+
+ Prometheus.Registry.register_collector(:prometheus_process_collector)
+ Pleroma.Web.Endpoint.MetricsExporter.setup()
+ Pleroma.Web.Endpoint.PipelineInstrumenter.setup()
+ Pleroma.Web.Endpoint.Instrumenter.setup()
+ Pleroma.Repo.Instrumenter.setup()
+ end
+
+ def enabled_hackney_pools do
+ [:media] ++
+ if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Hackney do
+ [:federation]
+ else
+ []
+ end ++
+ if Pleroma.Config.get([Pleroma.Uploader, :proxy_remote]) do
+ [:upload]
+ else
+ []
+ end
+ end
+
if Mix.env() == :test do
- defp streamer_child(), do: []
- defp chat_child(), do: []
+ defp streamer_child, do: []
+ defp chat_child, do: []
else
- defp streamer_child() do
+ defp streamer_child do
[worker(Pleroma.Web.Streamer, [])]
end
- defp chat_child() do
+ defp chat_child do
if Pleroma.Config.get([:chat, :enabled]) do
[worker(Pleroma.Web.ChatChannel.ChatChannelState, [])]
else
@@ -113,4 +176,11 @@ defmodule Pleroma.Application do
end
end
end
+
+ defp hackney_pool_children do
+ for pool <- enabled_hackney_pools() do
+ options = Pleroma.Config.get([:hackney_pools, pool])
+ :hackney_pool.child_spec(pool, options)
+ end
+ end
end