lib/timescaledb.ex

defmodule Membrane.RTC.Engine.TimescaleDB do
  @moduledoc """
  Allows to store `Membrane.RTC.Engine` metrics reports in a database.
  """

  @type report() :: %{
          optional({:room_id, binary()}) => %{
            optional({:peer_id, binary()}) => %{
              {:track_id, binary()} => %{
                :"inbound-rtp.encoding" => atom(),
                :"inbound-rtp.ssrc" => integer(),
                :"inbound-rtp.bytes_received" => integer(),
                :"inbound-rtp.keyframe_request_sent" => integer(),
                :"inbound-rtp.packets" => integer(),
                :"inbound-rtp.frames" => integer(),
                :"inbound-rtp.keyframes" => integer()
              },
              :"ice.binding_requests_received" => integer(),
              :"ice.binding_responses_sent" => integer(),
              :"ice.bytes_received" => integer(),
              :"ice.bytes_sent" => integer(),
              :"ice.packets_received" => integer(),
              :"ice.packets_sent" => integer()
            }
          }
        }

  @doc """
  Stores `Membrane.RTC.Engine` metrics report in the database using `:repo` module passed in Application environment.
  """
  @spec store_report(report()) :: :ok
  defdelegate store_report(report), to: __MODULE__.Reporter
end