metrics: add labels to the output (#5687)

group metrics under visible, distinct labels.
This commit is contained in:
Alessandro Ros
2026-04-24 23:20:49 +02:00
committed by GitHub
parent 91aa6d9c6d
commit 87543f91dd
3 changed files with 754 additions and 713 deletions
+70 -217
View File
@@ -75,22 +75,35 @@ func TestMetrics(t *testing.T) {
t.Run("initial", func(t *testing.T) {
bo := httpPullFile(t, hc, "http://localhost:9998/metrics")
require.Equal(t, `paths 0
require.Equal(t, `# Paths
paths 0
paths_inbound_bytes 0
paths_outbound_bytes 0
paths_inbound_frames_in_error 0
# Paths (deprecated)
paths_bytes_received 0
paths_bytes_sent 0
paths_readers 0
# HLS muxers
hls_muxers 0
hls_muxers_outbound_bytes 0
hls_muxers_outbound_frames_discarded 0
# HLS muxers (deprecated)
hls_muxers_bytes_sent 0
# RTSP connections
rtsp_conns 0
rtsp_conns_inbound_bytes 0
rtsp_conns_outbound_bytes 0
# RTSP connections (deprecated)
rtsp_conns_bytes_received 0
rtsp_conns_bytes_sent 0
# RTSP sessions
rtsp_sessions 0
rtsp_sessions_inbound_bytes 0
rtsp_sessions_inbound_rtp_packets 0
@@ -104,6 +117,8 @@ rtsp_sessions_outbound_rtp_packets 0
rtsp_sessions_outbound_rtp_packets_reported_lost 0
rtsp_sessions_outbound_rtp_packets_discarded 0
rtsp_sessions_outbound_rtcp_packets 0
# RTSP sessions (deprecated)
rtsp_sessions_bytes_received 0
rtsp_sessions_bytes_sent 0
rtsp_sessions_rtp_packets_received 0
@@ -114,11 +129,17 @@ rtsp_sessions_rtp_packets_jitter 0
rtsp_sessions_rtcp_packets_received 0
rtsp_sessions_rtcp_packets_sent 0
rtsp_sessions_rtcp_packets_in_error 0
# RTSPS connections
rtsps_conns 0
rtsps_conns_inbound_bytes 0
rtsps_conns_outbound_bytes 0
# RTSPS connections (deprecated)
rtsps_conns_bytes_received 0
rtsps_conns_bytes_sent 0
# RTSPS sessions
rtsps_sessions 0
rtsps_sessions_inbound_bytes 0
rtsps_sessions_inbound_rtp_packets 0
@@ -132,6 +153,8 @@ rtsps_sessions_outbound_rtp_packets 0
rtsps_sessions_outbound_rtp_packets_reported_lost 0
rtsps_sessions_outbound_rtp_packets_discarded 0
rtsps_sessions_outbound_rtcp_packets 0
# RTSPS sessions (deprecated)
rtsps_sessions_bytes_received 0
rtsps_sessions_bytes_sent 0
rtsps_sessions_rtp_packets_received 0
@@ -142,18 +165,28 @@ rtsps_sessions_rtp_packets_jitter 0
rtsps_sessions_rtcp_packets_received 0
rtsps_sessions_rtcp_packets_sent 0
rtsps_sessions_rtcp_packets_in_error 0
# RTMP connections
rtmp_conns 0
rtmp_conns_inbound_bytes 0
rtmp_conns_outbound_bytes 0
rtmp_conns_outbound_frames_discarded 0
# RTMP connections (deprecated)
rtmp_conns_bytes_received 0
rtmp_conns_bytes_sent 0
# RTMPS connections
rtmps_conns 0
rtmps_conns_inbound_bytes 0
rtmps_conns_outbound_bytes 0
rtmps_conns_outbound_frames_discarded 0
# RTMPS connections (deprecated)
rtmps_conns_bytes_received 0
rtmps_conns_bytes_sent 0
# SRT connections
srt_conns 0
srt_conns_packets_sent 0
srt_conns_packets_received 0
@@ -209,6 +242,8 @@ srt_conns_packets_received_avg_belated_time 0
srt_conns_packets_send_loss_rate 0
srt_conns_packets_received_loss_rate 0
srt_conns_outbound_frames_discarded 0
# WebRTC sessions
webrtc_sessions 0
webrtc_sessions_inbound_bytes 0
webrtc_sessions_inbound_rtp_packets 0
@@ -219,6 +254,8 @@ webrtc_sessions_outbound_bytes 0
webrtc_sessions_outbound_rtp_packets 0
webrtc_sessions_outbound_rtcp_packets 0
webrtc_sessions_outbound_frames_discarded 0
# WebRTC sessions (deprecated)
webrtc_sessions_bytes_received 0
webrtc_sessions_bytes_sent 0
webrtc_sessions_rtp_packets_received 0
@@ -227,6 +264,7 @@ webrtc_sessions_rtp_packets_lost 0
webrtc_sessions_rtp_packets_jitter 0
webrtc_sessions_rtcp_packets_received 0
webrtc_sessions_rtcp_packets_sent 0
`, string(bo))
})
@@ -408,220 +446,31 @@ webrtc_sessions_rtcp_packets_sent 0
bo := httpPullFile(t, hc, "http://localhost:9998/metrics")
require.Regexp(t,
`^paths\{name=".*?",state="ready"\} 1`+"\n"+
`paths_inbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_outbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_inbound_frames_in_error\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_received\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_sent\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_readers\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths\{name=".*?",state="ready"\} 1`+"\n"+
`paths_inbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_outbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_inbound_frames_in_error\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_received\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_sent\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_readers\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths\{name=".*?",state="ready"\} 1`+"\n"+
`paths_inbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_outbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_inbound_frames_in_error\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_received\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_sent\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_readers\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths\{name=".*?",state="ready"\} 1`+"\n"+
`paths_inbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_outbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_inbound_frames_in_error\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_received\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_sent\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_readers\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths\{name=".*?",state="ready"\} 1`+"\n"+
`paths_inbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_outbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_inbound_frames_in_error\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_received\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_sent\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_readers\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths\{name=".*?",state="ready"\} 1`+"\n"+
`paths_inbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_outbound_bytes\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_inbound_frames_in_error\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_received\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_bytes_sent\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`paths_readers\{name=".*?",state="ready"\} [0-9]+`+"\n"+
`hls_muxers\{name=".*?"\} 1`+"\n"+
`hls_muxers_outbound_bytes\{name=".*?"\} 0`+"\n"+
`hls_muxers_outbound_frames_discarded\{name=".*?"\} 0`+"\n"+
`hls_muxers_bytes_sent\{name=".*?"\} 0`+"\n"+
`hls_muxers\{name=".*?"\} 1`+"\n"+
`hls_muxers_outbound_bytes\{name=".*?"\} 0`+"\n"+
`hls_muxers_outbound_frames_discarded\{name=".*?"\} 0`+"\n"+
`hls_muxers_bytes_sent\{name=".*?"\} 0`+"\n"+
`hls_muxers\{name=".*?"\} 1`+"\n"+
`hls_muxers_outbound_bytes\{name=".*?"\} 0`+"\n"+
`hls_muxers_outbound_frames_discarded\{name=".*?"\} 0`+"\n"+
`hls_muxers_bytes_sent\{name=".*?"\} 0`+"\n"+
`hls_muxers\{name=".*?"\} 1`+"\n"+
`hls_muxers_outbound_bytes\{name=".*?"\} 0`+"\n"+
`hls_muxers_outbound_frames_discarded\{name=".*?"\} 0`+"\n"+
`hls_muxers_bytes_sent\{name=".*?"\} 0`+"\n"+
`hls_muxers\{name=".*?"\} 1`+"\n"+
`hls_muxers_outbound_bytes\{name=".*?"\} 0`+"\n"+
`hls_muxers_outbound_frames_discarded\{name=".*?"\} 0`+"\n"+
`hls_muxers_bytes_sent\{name=".*?"\} 0`+"\n"+
`hls_muxers\{name=".*?"\} 1`+"\n"+
`hls_muxers_outbound_bytes\{name=".*?"\} 0`+"\n"+
`hls_muxers_outbound_frames_discarded\{name=".*?"\} 0`+"\n"+
`hls_muxers_bytes_sent\{name=".*?"\} 0`+"\n"+
`rtsp_conns\{id=".*?"\} 1`+"\n"+
`rtsp_conns_inbound_bytes\{id=".*?"\} [0-9]+`+"\n"+
`rtsp_conns_outbound_bytes\{id=".*?"\} [0-9]+`+"\n"+
`rtsp_conns_bytes_received\{id=".*?"\} [0-9]+`+"\n"+
`rtsp_conns_bytes_sent\{id=".*?"\} [0-9]+`+"\n"+
`rtsp_sessions\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 1`+"\n"+
`rtsp_sessions_inbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_inbound_rtp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_inbound_rtp_packets_lost\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_inbound_rtp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_inbound_rtp_packets_jitter\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_inbound_rtcp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_inbound_rtcp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_outbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_outbound_rtp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_outbound_rtp_packets_reported_lost\{id=".*?",path=".*?",`+
`remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_outbound_rtp_packets_discarded\{id=".*?",path=".*?",`+
`remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_outbound_rtcp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_bytes_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 0`+"\n"+
`rtsp_sessions_bytes_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtp_packets_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtp_packets_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtp_packets_lost\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtp_packets_jitter\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtcp_packets_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtcp_packets_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsp_sessions_rtcp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_conns\{id=".*?"\} 1`+"\n"+
`rtsps_conns_inbound_bytes\{id=".*?"\} [0-9]+`+"\n"+
`rtsps_conns_outbound_bytes\{id=".*?"\} [0-9]+`+"\n"+
`rtsps_conns_bytes_received\{id=".*?"\} [0-9]+`+"\n"+
`rtsps_conns_bytes_sent\{id=".*?"\} [0-9]+`+"\n"+
`rtsps_sessions\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 1`+"\n"+
`rtsps_sessions_inbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_inbound_rtp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_inbound_rtp_packets_lost\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_inbound_rtp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_inbound_rtp_packets_jitter\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_inbound_rtcp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_inbound_rtcp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_outbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_outbound_rtp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_outbound_rtp_packets_reported_lost\{id=".*?",path=".*?",`+
`remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_outbound_rtp_packets_discarded\{id=".*?",path=".*?",`+
`remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_outbound_rtcp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_bytes_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 0`+"\n"+
`rtsps_sessions_bytes_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtp_packets_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtp_packets_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtp_packets_lost\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtp_packets_jitter\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtcp_packets_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtcp_packets_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtsps_sessions_rtcp_packets_in_error\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmp_conns\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 1`+"\n"+
`rtmp_conns_inbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmp_conns_outbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmp_conns_outbound_frames_discarded\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmp_conns_bytes_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmp_conns_bytes_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmps_conns\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 1`+"\n"+
`rtmps_conns_inbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmps_conns_outbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmps_conns_outbound_frames_discarded\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmps_conns_bytes_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`rtmps_conns_bytes_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 1`+"\n"+
`srt_conns_packets_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_sent_unique\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_unique\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 1`+"\n"+
`srt_conns_packets_send_loss\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_loss\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_retrans\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_retrans\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_sent_ack\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_ack\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_sent_nak\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_nak\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_sent_km\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_km\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_us_snd_duration\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_belated\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_send_drop\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_drop\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_undecrypt\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 0`+"\n"+
`srt_conns_bytes_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_sent_unique\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_received_unique\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_received_loss\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_retrans\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_received_retrans\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_received_belated\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_send_drop\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_received_drop\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_received_undecrypt\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_us_packets_send_period\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} \d+\.\d+`+"\n"+
`srt_conns_packets_flow_window\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_flight_size\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_ms_rtt\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} \d+\.\d+`+"\n"+
`srt_conns_mbps_send_rate\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_mbps_receive_rate\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_mbps_link_capacity\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_avail_send_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_avail_receive_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_mbps_max_bw\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} -1`+"\n"+
`srt_conns_bytes_mss\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_send_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_send_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_ms_send_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_ms_send_tsb_pd_delay\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_receive_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_bytes_receive_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_ms_receive_buf\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_ms_receive_tsb_pd_delay\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_reorder_tolerance\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_avg_belated_time\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_send_loss_rate\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_packets_received_loss_rate\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`srt_conns_outbound_frames_discarded\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} 1`+"\n"+
`webrtc_sessions_inbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_inbound_rtp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_inbound_rtp_packets_lost\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_inbound_rtp_packets_jitter\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_inbound_rtcp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_outbound_bytes\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_outbound_rtp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_outbound_rtcp_packets\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_outbound_frames_discarded\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_bytes_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_bytes_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_rtp_packets_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_rtp_packets_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_rtp_packets_lost\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_rtp_packets_jitter\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_rtcp_packets_received\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
`webrtc_sessions_rtcp_packets_sent\{id=".*?",path=".*?",remoteAddr=".*?",state="publish"\} [0-9]+`+"\n"+
"$",
string(bo))
boStr := string(bo)
require.Contains(t, boStr, "paths{name=\"rtmp_path\",state=\"ready\"} 1\n")
require.Contains(t, boStr, "paths{name=\"rtmps_path\",state=\"ready\"} 1\n")
require.Contains(t, boStr, "paths{name=\"rtsp_path\",state=\"ready\"} 1\n")
require.Contains(t, boStr, "paths{name=\"rtsps_path\",state=\"ready\"} 1\n")
require.Contains(t, boStr, "paths{name=\"srt_path\",state=\"ready\"} 1\n")
require.Contains(t, boStr, "paths{name=\"webrtc_path\",state=\"ready\"} 1\n")
require.Contains(t, boStr, "hls_muxers{name=\"rtmp_path\"} 1\n")
require.Contains(t, boStr, "hls_muxers{name=\"rtmps_path\"} 1\n")
require.Contains(t, boStr, "hls_muxers{name=\"rtsp_path\"} 1\n")
require.Contains(t, boStr, "hls_muxers{name=\"rtsps_path\"} 1\n")
require.Contains(t, boStr, "hls_muxers{name=\"srt_path\"} 1\n")
require.Contains(t, boStr, "hls_muxers{name=\"webrtc_path\"} 1\n")
require.Regexp(t, `(?m)^rtsp_conns\{id=".*?"\} 1$`, boStr)
require.Regexp(t, `(?m)^rtsp_sessions\{id=".*?",path="rtsp_path",remoteAddr=".*?",state="publish"\} 1$`, boStr)
require.Regexp(t, `(?m)^rtsps_conns\{id=".*?"\} 1$`, boStr)
require.Regexp(t, `(?m)^rtsps_sessions\{id=".*?",path="rtsps_path",remoteAddr=".*?",state="publish"\} 1$`, boStr)
require.Regexp(t, `(?m)^rtmp_conns\{id=".*?",path="rtmp_path",remoteAddr=".*?",state="publish"\} 1$`, boStr)
require.Regexp(t, `(?m)^rtmps_conns\{id=".*?",path="rtmps_path",remoteAddr=".*?",state="publish"\} 1$`, boStr)
require.Regexp(t, `(?m)^srt_conns\{id=".*?",path="srt_path",remoteAddr=".*?",state="publish"\} 1$`, boStr)
require.Regexp(t, `(?m)^srt_conns_ms_rtt\{id=".*?",path="srt_path",`+
`remoteAddr=".*?",state="publish"\} [0-9.]+$`, boStr)
require.Regexp(t, `(?m)^webrtc_sessions\{id=".*?",path="webrtc_path",remoteAddr=".*?",state="publish"\} 1$`, boStr)
require.Regexp(t, `(?m)^webrtc_sessions_rtcp_packets_received\{id=".*?",path="webrtc_path",`+
`remoteAddr=".*?",state="publish"\} [0-9]+$`, boStr)
close(terminate)
wg.Wait()
@@ -640,13 +489,17 @@ webrtc_sessions_rtcp_packets_sent 0
bo := httpPullFile(t, hc, "http://localhost:9998/metrics")
require.Equal(t, "paths 0\n"+
require.Equal(t, "# Paths\n"+
"paths 0\n"+
"paths_inbound_bytes 0\n"+
"paths_outbound_bytes 0\n"+
"paths_inbound_frames_in_error 0\n"+
"\n"+
"# Paths (deprecated)\n"+
"paths_bytes_received 0\n"+
"paths_bytes_sent 0\n"+
"paths_readers 0\n",
"paths_readers 0\n"+
"\n",
string(bo))
})
}
+124 -38
View File
@@ -239,52 +239,70 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
"name": i.Name,
"state": state,
})
out.WriteString("# Paths\n")
metric(&out, "paths", ta, 1)
metric(&out, "paths_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "paths_outbound_bytes", ta, int64(i.OutboundBytes))
metric(&out, "paths_inbound_frames_in_error", ta, int64(i.InboundFramesInError))
// deprecated
out.WriteString("\n")
out.WriteString("# Paths (deprecated)\n")
metric(&out, "paths_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "paths_bytes_sent", ta, int64(i.BytesSent))
metric(&out, "paths_readers", ta, int64(len(i.Readers)))
out.WriteString("\n")
}
}
} else if pathFilter == "" {
out.WriteString("# Paths\n")
metric(&out, "paths", "", 0)
metric(&out, "paths_inbound_bytes", "", 0)
metric(&out, "paths_outbound_bytes", "", 0)
metric(&out, "paths_inbound_frames_in_error", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# Paths (deprecated)\n")
metric(&out, "paths_bytes_received", "", 0)
metric(&out, "paths_bytes_sent", "", 0)
metric(&out, "paths_readers", "", 0)
out.WriteString("\n")
}
}
if !interfaceIsEmpty(m.hlsServer) &&
(typ == "" || typ == "hls_muxers") &&
(!anyFilterActive || hlsMuxerFilter != "") {
var data *defs.APIHLSMuxerList
data, err := m.hlsServer.APIMuxersList()
if err == nil && len(data.Items) != 0 {
for _, i := range data.Items {
if hlsMuxerFilter == "" || hlsMuxerFilter == i.Path {
ta := tags(map[string]string{
"name": i.Path,
})
metric(&out, "hls_muxers", ta, 1)
metric(&out, "hls_muxers_outbound_bytes", ta, int64(i.OutboundBytes))
metric(&out, "hls_muxers_outbound_frames_discarded", ta, int64(i.OutboundFramesDiscarded))
// deprecated
metric(&out, "hls_muxers_bytes_sent", ta, int64(i.BytesSent))
if !interfaceIsEmpty(m.hlsServer) {
if (typ == "" || typ == "hls_muxers") && (!anyFilterActive || hlsMuxerFilter != "") {
var data *defs.APIHLSMuxerList
data, err := m.hlsServer.APIMuxersList()
if err == nil && len(data.Items) != 0 {
for _, i := range data.Items {
if hlsMuxerFilter == "" || hlsMuxerFilter == i.Path {
ta := tags(map[string]string{
"name": i.Path,
})
out.WriteString("# HLS muxers\n")
metric(&out, "hls_muxers", ta, 1)
metric(&out, "hls_muxers_outbound_bytes", ta, int64(i.OutboundBytes))
metric(&out, "hls_muxers_outbound_frames_discarded", ta, int64(i.OutboundFramesDiscarded))
out.WriteString("\n")
out.WriteString("# HLS muxers (deprecated)\n")
metric(&out, "hls_muxers_bytes_sent", ta, int64(i.BytesSent))
out.WriteString("\n")
}
}
} else if hlsMuxerFilter == "" {
out.WriteString("# HLS muxers\n")
metric(&out, "hls_muxers", "", 0)
metric(&out, "hls_muxers_outbound_bytes", "", 0)
metric(&out, "hls_muxers_outbound_frames_discarded", "", 0)
out.WriteString("\n")
out.WriteString("# HLS muxers (deprecated)\n")
metric(&out, "hls_muxers_bytes_sent", "", 0)
out.WriteString("\n")
}
} else if hlsMuxerFilter == "" {
metric(&out, "hls_muxers", "", 0)
metric(&out, "hls_muxers_outbound_bytes", "", 0)
metric(&out, "hls_muxers_outbound_frames_discarded", "", 0)
// deprecated
metric(&out, "hls_muxers_bytes_sent", "", 0)
}
}
@@ -298,21 +316,30 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
ta := tags(map[string]string{
"id": i.ID.String(),
})
out.WriteString("# RTSP connections\n")
metric(&out, "rtsp_conns", ta, 1)
metric(&out, "rtsp_conns_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "rtsp_conns_outbound_bytes", ta, int64(i.OutboundBytes))
// deprecated
out.WriteString("\n")
out.WriteString("# RTSP connections (deprecated)\n")
metric(&out, "rtsp_conns_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "rtsp_conns_bytes_sent", ta, int64(i.BytesSent))
out.WriteString("\n")
}
}
} else if rtspConnFilter == "" {
out.WriteString("# RTSP connections\n")
metric(&out, "rtsp_conns", "", 0)
metric(&out, "rtsp_conns_inbound_bytes", "", 0)
metric(&out, "rtsp_conns_outbound_bytes", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# RTSP connections (deprecated)\n")
metric(&out, "rtsp_conns_bytes_received", "", 0)
metric(&out, "rtsp_conns_bytes_sent", "", 0)
out.WriteString("\n")
}
}
@@ -328,6 +355,8 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
"path": i.Path,
"remoteAddr": i.RemoteAddr,
})
out.WriteString("# RTSP sessions\n")
metric(&out, "rtsp_sessions", ta, 1)
metric(&out, "rtsp_sessions_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "rtsp_sessions_inbound_rtp_packets", ta, int64(i.InboundRTPPackets))
@@ -341,7 +370,9 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsp_sessions_outbound_rtp_packets_reported_lost", ta, int64(i.OutboundRTPPacketsReportedLost))
metric(&out, "rtsp_sessions_outbound_rtp_packets_discarded", ta, int64(i.OutboundRTPPacketsDiscarded))
metric(&out, "rtsp_sessions_outbound_rtcp_packets", ta, int64(i.OutboundRTCPPackets))
// deprecated
out.WriteString("\n")
out.WriteString("# RTSP sessions (deprecated)\n")
metric(&out, "rtsp_sessions_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "rtsp_sessions_bytes_sent", ta, int64(i.BytesSent))
metric(&out, "rtsp_sessions_rtp_packets_received", ta, int64(i.RTPPacketsReceived))
@@ -352,9 +383,11 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsp_sessions_rtcp_packets_received", ta, int64(i.RTCPPacketsReceived))
metric(&out, "rtsp_sessions_rtcp_packets_sent", ta, int64(i.RTCPPacketsSent))
metric(&out, "rtsp_sessions_rtcp_packets_in_error", ta, int64(i.RTCPPacketsInError))
out.WriteString("\n")
}
}
} else if rtspSessionFilter == "" {
out.WriteString("# RTSP sessions\n")
metric(&out, "rtsp_sessions", "", 0)
metric(&out, "rtsp_sessions_inbound_bytes", "", 0)
metric(&out, "rtsp_sessions_inbound_rtp_packets", "", 0)
@@ -368,7 +401,9 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsp_sessions_outbound_rtp_packets_reported_lost", "", 0)
metric(&out, "rtsp_sessions_outbound_rtp_packets_discarded", "", 0)
metric(&out, "rtsp_sessions_outbound_rtcp_packets", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# RTSP sessions (deprecated)\n")
metric(&out, "rtsp_sessions_bytes_received", "", 0)
metric(&out, "rtsp_sessions_bytes_sent", "", 0)
metric(&out, "rtsp_sessions_rtp_packets_received", "", 0)
@@ -379,6 +414,7 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsp_sessions_rtcp_packets_received", "", 0)
metric(&out, "rtsp_sessions_rtcp_packets_sent", "", 0)
metric(&out, "rtsp_sessions_rtcp_packets_in_error", "", 0)
out.WriteString("\n")
}
}
}
@@ -393,21 +429,30 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
ta := tags(map[string]string{
"id": i.ID.String(),
})
out.WriteString("# RTSPS connections\n")
metric(&out, "rtsps_conns", ta, 1)
metric(&out, "rtsps_conns_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "rtsps_conns_outbound_bytes", ta, int64(i.OutboundBytes))
// deprecated
out.WriteString("\n")
out.WriteString("# RTSPS connections (deprecated)\n")
metric(&out, "rtsps_conns_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "rtsps_conns_bytes_sent", ta, int64(i.BytesSent))
out.WriteString("\n")
}
}
} else if rtspsConnFilter == "" {
out.WriteString("# RTSPS connections\n")
metric(&out, "rtsps_conns", "", 0)
metric(&out, "rtsps_conns_inbound_bytes", "", 0)
metric(&out, "rtsps_conns_outbound_bytes", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# RTSPS connections (deprecated)\n")
metric(&out, "rtsps_conns_bytes_received", "", 0)
metric(&out, "rtsps_conns_bytes_sent", "", 0)
out.WriteString("\n")
}
}
@@ -423,6 +468,8 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
"path": i.Path,
"remoteAddr": i.RemoteAddr,
})
out.WriteString("# RTSPS sessions\n")
metric(&out, "rtsps_sessions", ta, 1)
metric(&out, "rtsps_sessions_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "rtsps_sessions_inbound_rtp_packets", ta, int64(i.InboundRTPPackets))
@@ -436,7 +483,9 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsps_sessions_outbound_rtp_packets_reported_lost", ta, int64(i.OutboundRTPPacketsReportedLost))
metric(&out, "rtsps_sessions_outbound_rtp_packets_discarded", ta, int64(i.OutboundRTPPacketsDiscarded))
metric(&out, "rtsps_sessions_outbound_rtcp_packets", ta, int64(i.OutboundRTCPPackets))
// deprecated
out.WriteString("\n")
out.WriteString("# RTSPS sessions (deprecated)\n")
metric(&out, "rtsps_sessions_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "rtsps_sessions_bytes_sent", ta, int64(i.BytesSent))
metric(&out, "rtsps_sessions_rtp_packets_received", ta, int64(i.RTPPacketsReceived))
@@ -447,9 +496,11 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsps_sessions_rtcp_packets_received", ta, int64(i.RTCPPacketsReceived))
metric(&out, "rtsps_sessions_rtcp_packets_sent", ta, int64(i.RTCPPacketsSent))
metric(&out, "rtsps_sessions_rtcp_packets_in_error", ta, int64(i.RTCPPacketsInError))
out.WriteString("\n")
}
}
} else if rtspsSessionFilter == "" {
out.WriteString("# RTSPS sessions\n")
metric(&out, "rtsps_sessions", "", 0)
metric(&out, "rtsps_sessions_inbound_bytes", "", 0)
metric(&out, "rtsps_sessions_inbound_rtp_packets", "", 0)
@@ -463,7 +514,9 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsps_sessions_outbound_rtp_packets_reported_lost", "", 0)
metric(&out, "rtsps_sessions_outbound_rtp_packets_discarded", "", 0)
metric(&out, "rtsps_sessions_outbound_rtcp_packets", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# RTSPS sessions (deprecated)\n")
metric(&out, "rtsps_sessions_bytes_received", "", 0)
metric(&out, "rtsps_sessions_bytes_sent", "", 0)
metric(&out, "rtsps_sessions_rtp_packets_received", "", 0)
@@ -474,6 +527,7 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "rtsps_sessions_rtcp_packets_received", "", 0)
metric(&out, "rtsps_sessions_rtcp_packets_sent", "", 0)
metric(&out, "rtsps_sessions_rtcp_packets_in_error", "", 0)
out.WriteString("\n")
}
}
}
@@ -492,23 +546,32 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
"path": i.Path,
"remoteAddr": i.RemoteAddr,
})
out.WriteString("# RTMP connections\n")
metric(&out, "rtmp_conns", ta, 1)
metric(&out, "rtmp_conns_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "rtmp_conns_outbound_bytes", ta, int64(i.OutboundBytes))
metric(&out, "rtmp_conns_outbound_frames_discarded", ta, int64(i.OutboundFramesDiscarded))
// deprecated
out.WriteString("\n")
out.WriteString("# RTMP connections (deprecated)\n")
metric(&out, "rtmp_conns_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "rtmp_conns_bytes_sent", ta, int64(i.BytesSent))
out.WriteString("\n")
}
}
} else if rtmpConnFilter == "" {
out.WriteString("# RTMP connections\n")
metric(&out, "rtmp_conns", "", 0)
metric(&out, "rtmp_conns_inbound_bytes", "", 0)
metric(&out, "rtmp_conns_outbound_bytes", "", 0)
metric(&out, "rtmp_conns_outbound_frames_discarded", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# RTMP connections (deprecated)\n")
metric(&out, "rtmp_conns_bytes_received", "", 0)
metric(&out, "rtmp_conns_bytes_sent", "", 0)
out.WriteString("\n")
}
}
@@ -526,23 +589,32 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
"path": i.Path,
"remoteAddr": i.RemoteAddr,
})
out.WriteString("# RTMPS connections\n")
metric(&out, "rtmps_conns", ta, 1)
metric(&out, "rtmps_conns_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "rtmps_conns_outbound_bytes", ta, int64(i.OutboundBytes))
metric(&out, "rtmps_conns_outbound_frames_discarded", ta, int64(i.OutboundFramesDiscarded))
// deprecated
out.WriteString("\n")
out.WriteString("# RTMPS connections (deprecated)\n")
metric(&out, "rtmps_conns_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "rtmps_conns_bytes_sent", ta, int64(i.BytesSent))
out.WriteString("\n")
}
}
} else if rtmpsConnFilter == "" {
out.WriteString("# RTMPS connections\n")
metric(&out, "rtmps_conns", "", 0)
metric(&out, "rtmps_conns_inbound_bytes", "", 0)
metric(&out, "rtmps_conns_outbound_bytes", "", 0)
metric(&out, "rtmps_conns_outbound_frames_discarded", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# RTMPS connections (deprecated)\n")
metric(&out, "rtmps_conns_bytes_received", "", 0)
metric(&out, "rtmps_conns_bytes_sent", "", 0)
out.WriteString("\n")
}
}
@@ -560,6 +632,8 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
"path": i.Path,
"remoteAddr": i.RemoteAddr,
})
out.WriteString("# SRT connections\n")
metric(&out, "srt_conns", ta, 1)
metric(&out, "srt_conns_packets_sent", ta, int64(i.PacketsSent))
metric(&out, "srt_conns_packets_received", ta, int64(i.PacketsReceived))
@@ -615,9 +689,11 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metricFloat(&out, "srt_conns_packets_send_loss_rate", ta, i.PacketsSendLossRate)
metricFloat(&out, "srt_conns_packets_received_loss_rate", ta, i.PacketsReceivedLossRate)
metric(&out, "srt_conns_outbound_frames_discarded", ta, int64(i.OutboundFramesDiscarded))
out.WriteString("\n")
}
}
} else if srtConnFilter == "" {
out.WriteString("# SRT connections\n")
metric(&out, "srt_conns", "", 0)
metric(&out, "srt_conns_packets_sent", "", 0)
metric(&out, "srt_conns_packets_received", "", 0)
@@ -673,6 +749,7 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metricFloat(&out, "srt_conns_packets_send_loss_rate", "", 0)
metricFloat(&out, "srt_conns_packets_received_loss_rate", "", 0)
metric(&out, "srt_conns_outbound_frames_discarded", "", 0)
out.WriteString("\n")
}
}
@@ -690,6 +767,8 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
"path": i.Path,
"remoteAddr": i.RemoteAddr,
})
out.WriteString("# WebRTC sessions\n")
metric(&out, "webrtc_sessions", ta, 1)
metric(&out, "webrtc_sessions_inbound_bytes", ta, int64(i.InboundBytes))
metric(&out, "webrtc_sessions_inbound_rtp_packets", ta, int64(i.InboundRTPPackets))
@@ -700,7 +779,9 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "webrtc_sessions_outbound_rtp_packets", ta, int64(i.OutboundRTPPackets))
metric(&out, "webrtc_sessions_outbound_rtcp_packets", ta, int64(i.OutboundRTCPPackets))
metric(&out, "webrtc_sessions_outbound_frames_discarded", ta, int64(i.OutboundFramesDiscarded))
// deprecated
out.WriteString("\n")
out.WriteString("# WebRTC sessions (deprecated)\n")
metric(&out, "webrtc_sessions_bytes_received", ta, int64(i.BytesReceived))
metric(&out, "webrtc_sessions_bytes_sent", ta, int64(i.BytesSent))
metric(&out, "webrtc_sessions_rtp_packets_received", ta, int64(i.RTPPacketsReceived))
@@ -709,9 +790,11 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metricFloat(&out, "webrtc_sessions_rtp_packets_jitter", ta, i.RTPPacketsJitter)
metric(&out, "webrtc_sessions_rtcp_packets_received", ta, int64(i.RTCPPacketsReceived))
metric(&out, "webrtc_sessions_rtcp_packets_sent", ta, int64(i.RTCPPacketsSent))
out.WriteString("\n")
}
}
} else if webrtcSessionFilter == "" {
out.WriteString("# WebRTC sessions\n")
metric(&out, "webrtc_sessions", "", 0)
metric(&out, "webrtc_sessions_inbound_bytes", "", 0)
metric(&out, "webrtc_sessions_inbound_rtp_packets", "", 0)
@@ -722,7 +805,9 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metric(&out, "webrtc_sessions_outbound_rtp_packets", "", 0)
metric(&out, "webrtc_sessions_outbound_rtcp_packets", "", 0)
metric(&out, "webrtc_sessions_outbound_frames_discarded", "", 0)
// deprecated
out.WriteString("\n")
out.WriteString("# WebRTC sessions (deprecated)\n")
metric(&out, "webrtc_sessions_bytes_received", "", 0)
metric(&out, "webrtc_sessions_bytes_sent", "", 0)
metric(&out, "webrtc_sessions_rtp_packets_received", "", 0)
@@ -731,6 +816,7 @@ func (m *Metrics) onMetrics(ctx *gin.Context) {
metricFloat(&out, "webrtc_sessions_rtp_packets_jitter", "", 0)
metric(&out, "webrtc_sessions_rtcp_packets_received", "", 0)
metric(&out, "webrtc_sessions_rtcp_packets_sent", "", 0)
out.WriteString("\n")
}
}
File diff suppressed because it is too large Load Diff