# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved.
use Croma
defmodule AntikytheraCore.Alert.HandlerConfig do
@moduledoc """
Type module for map of configurations for a single alert handler.
Fields are treated as opaque at this layer; details are defined by each handler implementation.
"""
alias Antikythera.GearName
alias AntikytheraCore.Alert.HandlerConfigsMap
use Croma.SubtypeOfMap, key_module: Croma.String, value_module: Croma.Any
defun get(handler :: v[module], otp_app_name :: v[:antikythera | GearName.t()]) :: t do
HandlerConfigsMap.get(otp_app_name)
|> Map.get(key(handler), %{})
end
defunp key(handler :: v[module]) :: String.t() do
handler
|> Module.split()
|> List.last()
|> Macro.underscore()
end
end
defmodule AntikytheraCore.Alert.HandlerConfigsMap do
@moduledoc """
Type module for map of all alert configurations for a single OTP application (antikythera or a gear).
Keys must be snake-cased handler names and values must be maps of each alert handler's configurations.
These maps are stored in core/gear configs.
"""
alias Antikythera.GearName
alias AntikytheraCore.Ets.ConfigCache
use Croma.SubtypeOfMap,
key_module: Croma.String,
value_module: AntikytheraCore.Alert.HandlerConfig
defun get(otp_app_name :: v[:antikythera | GearName.t()]) :: t do
case otp_app_name do
:antikythera -> ConfigCache.Core.read() |> Map.get(:alerts, %{})
gear_name -> ConfigCache.Gear.read(gear_name).alerts
end
end
end