59 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
# Pleroma: A lightweight social networking server
 | 
						|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 | 
						|
# SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
defmodule Pleroma.Web.FedSockets.Supervisor do
 | 
						|
  use Supervisor
 | 
						|
  import Cachex.Spec
 | 
						|
 | 
						|
  def start_link(opts) do
 | 
						|
    Supervisor.start_link(__MODULE__, opts, name: __MODULE__)
 | 
						|
  end
 | 
						|
 | 
						|
  def init(args) do
 | 
						|
    children = [
 | 
						|
      build_cache(:fed_socket_fetches, args),
 | 
						|
      build_cache(:fed_socket_rejections, args),
 | 
						|
      {Registry, keys: :unique, name: FedSockets.Registry, meta: [rejected: %{}]}
 | 
						|
    ]
 | 
						|
 | 
						|
    opts = [strategy: :one_for_all, name: Pleroma.Web.Streamer.Supervisor]
 | 
						|
    Supervisor.init(children, opts)
 | 
						|
  end
 | 
						|
 | 
						|
  defp build_cache(name, args) do
 | 
						|
    opts = get_opts(name, args)
 | 
						|
 | 
						|
    %{
 | 
						|
      id: String.to_atom("#{name}_cache"),
 | 
						|
      start: {Cachex, :start_link, [name, opts]},
 | 
						|
      type: :worker
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  defp get_opts(cache_name, args)
 | 
						|
       when cache_name in [:fed_socket_fetches, :fed_socket_rejections] do
 | 
						|
    default = get_opts_or_config(args, cache_name, :default, 15_000)
 | 
						|
    interval = get_opts_or_config(args, cache_name, :interval, 3_000)
 | 
						|
    lazy = get_opts_or_config(args, cache_name, :lazy, false)
 | 
						|
 | 
						|
    [expiration: expiration(default: default, interval: interval, lazy: lazy)]
 | 
						|
  end
 | 
						|
 | 
						|
  defp get_opts(name, args) do
 | 
						|
    Keyword.get(args, name, [])
 | 
						|
  end
 | 
						|
 | 
						|
  defp get_opts_or_config(args, name, key, default) do
 | 
						|
    args
 | 
						|
    |> Keyword.get(name, [])
 | 
						|
    |> Keyword.get(key)
 | 
						|
    |> case do
 | 
						|
      nil ->
 | 
						|
        Pleroma.Config.get([:fed_sockets, name, key], default)
 | 
						|
 | 
						|
      value ->
 | 
						|
        value
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |