Packages

ExWebRTC Endpoint for Membrane RTC Engine

Current section

Files

Jump to
Raw

lib/metrics.ex

defmodule Membrane.RTC.Engine.Endpoint.ExWebRTC.Metrics do
@moduledoc """
Defines metrics and events for stats received from the ExWebRTC Endpoint
"""
require Logger
alias Membrane.RTC.Engine.Endpoint
@webrtc_event [Endpoint.ExWebRTC, :transport]
@spec metrics() :: [Telemetry.Metrics.t()]
def metrics() do
[
Telemetry.Metrics.sum(
"ex-webrtc.trasnport.bytes_received_total",
event_name: @webrtc_event,
measurement: :bytes_received
),
Telemetry.Metrics.sum(
"ex-webrtc.transport.bytes_sent_total",
event_name: @webrtc_event,
measurement: :bytes_sent
)
]
end
@spec emit_transport_event(map(), Keyword.t(), map() | nil) :: :ok
def emit_transport_event(rtc_stats, telemetry_label, nil) do
emit_transport_event(rtc_stats, telemetry_label, %{bytes_received: 0, bytes_sent: 0})
end
def emit_transport_event(%{transport: transport}, telemetry_label, %{
bytes_received: prev_bytes_received,
bytes_sent: prev_bytes_sent
}) do
:telemetry.execute(
[Endpoint.ExWebRTC, :transport],
%{
bytes_received: transport.bytes_received - prev_bytes_received,
bytes_sent: transport.bytes_sent - prev_bytes_sent
},
Map.new(telemetry_label)
)
transport
end
end