# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved. use Croma defmodule AntikytheraCore.ExecutorPool.Setting do alias Antikythera.{MapUtil, GearName} alias AntikytheraCore.Ets.ConfigCache alias AntikytheraCore.ExecutorPool.WsConnectionsCapping use Croma.Struct, recursive_new?: true, fields: [ n_pools_a: Croma.NonNegInteger, pool_size_a: Croma.NonNegInteger, pool_size_j: Croma.NonNegInteger, ws_max_connections: Croma.NonNegInteger ] @default %{ # Ugly hack to define instance of struct within the same compilation unit of `defstruct` __struct__: __MODULE__, n_pools_a: 1, pool_size_a: 5, pool_size_j: 2, ws_max_connections: 100 } defun default() :: t, do: @default defun of_gear(gear_name :: v[GearName.t()]) :: t do Map.get(all(), gear_name, @default) end defun all() :: %{GearName.t() => t} do ConfigCache.Core.read() |> Map.get(:gears, %{}) |> MapUtil.map_values(fn {_, map} -> Map.merge(@default, Map.get(map, :executor_pool, %{})) |> WsConnectionsCapping.cap_based_on_available_memory() end) end end