lib/membrane/rtp/metrics.ex

defmodule Membrane.RTP.Metrics do
  @moduledoc """
  Defines list of metrics, that can be aggregated based on events from membrane_rtp_plugin.
  """

  alias Telemetry.Metrics

  @doc """
  Returns list of metrics, that can be aggregated based on events from membrane_rtp_plugin.
  """
  @spec metrics() :: [Metrics.t()]
  def metrics() do
    [
      Metrics.counter(
        "inbound-rtp.packets",
        event_name: [Membrane.RTP, :packet, :arrival]
      ),
      Metrics.sum(
        "inbound-rtp.bytes_received",
        event_name: [Membrane.RTP, :packet, :arrival],
        measurement: :bytes
      ),
      Metrics.last_value(
        "inbound-rtp.encoding",
        event_name: [Membrane.RTP, :inbound_track, :new],
        measurement: :encoding
      ),
      Metrics.last_value(
        "inbound-rtp.ssrc",
        event_name: [Membrane.RTP, :inbound_track, :new],
        measurement: :ssrc
      ),
      Metrics.counter(
        "inbound-rtp.markers_received",
        event_name: [Membrane.RTP, :rtp, :marker_received]
      ),
      Metrics.counter(
        "outbound-rtp.markers_sent",
        event_name: [Membrane.RTP, :rtp, :marker_sent]
      ),
      Metrics.counter(
        "rtcp.total_packets_received",
        event_name: [Membrane.RTP, :rtcp, :arrival]
      ),
      Metrics.counter(
        "rtcp.total_packets_sent",
        event_name: [Membrane.RTP, :rtcp, :sent]
      ),
      Metrics.counter(
        "rtcp.nack_sent",
        event_name: [Membrane.RTP, :rtcp, :nack, :sent]
      ),
      Metrics.counter(
        "rtcp.fir_sent",
        event_name: [Membrane.RTP, :rtcp, :fir, :sent]
      ),
      Metrics.counter(
        "rtcp.sender_reports_sent",
        event_name: [Membrane.RTP, :rtcp, :sender_report, :sent]
      ),
      Metrics.counter(
        "rtcp.receiver_reports_sent",
        event_name: [Membrane.RTP, :rtcp, :receiver_report, :sent]
      ),
      Metrics.counter(
        "rtcp.nack_received",
        event_name: [Membrane.RTP, :rtcp, :nack, :arrival]
      ),
      Metrics.counter(
        "rtcp.fir_received",
        event_name: [Membrane.RTP, :rtcp, :fir, :arrival]
      ),
      Metrics.counter(
        "rtcp.pli_received",
        event_name: [Membrane.RTP, :rtcp, :pli, :arrival]
      ),
      Metrics.counter(
        "rtcp.sender_reports_received",
        event_name: [Membrane.RTP, :rtcp, :sender_report, :arrival]
      ),
      Metrics.counter(
        "rtcp.receiver_reports_received",
        event_name: [Membrane.RTP, :rtcp, :receiver_report, :arrival]
      ),
      Metrics.sum(
        "outbound-rtp.rtx_sent",
        event_name: [Membrane.RTP, :rtx, :sent],
        measurement: :amount
      ),
      Metrics.counter(
        "outbound-rtp.packets",
        event_name: [Membrane.RTP, :packet, :sent]
      ),
      Metrics.counter(
        "outbound-rtp.bytes",
        event_name: [Membrane.RTP, :packet, :sent],
        measurement: :bytes
      )
    ]
  end
end