add total track w/ packet trailer metric

This commit is contained in:
David Chen
2026-07-17 14:30:16 -07:00
parent 1b27d229b9
commit 3db57c3b23
2 changed files with 31 additions and 18 deletions
+14 -4
View File
@@ -44,7 +44,8 @@ var (
promParticipantCurrent prometheus.Gauge
promTrackPublishedCurrent *prometheus.GaugeVec
promTrackSubscribedCurrent *prometheus.GaugeVec
promTrackPacketTrailerCurrent *prometheus.GaugeVec
promTrackPacketTrailerCurrent prometheus.Gauge
promTrackPacketTrailerByFeatureCurrent *prometheus.GaugeVec
promTrackPublishCounter *prometheus.CounterVec
promTrackSubscribeCounter *prometheus.CounterVec
promSessionJoinLatency *prometheus.HistogramVec
@@ -89,16 +90,23 @@ func initRoomStats(nodeID string, nodeType livekit.NodeType) {
Name: "subscribed_total",
ConstLabels: prometheus.Labels{"node_id": nodeID, "node_type": nodeType.String()},
}, []string{"kind"})
promTrackPacketTrailerCurrent = prometheus.NewGaugeVec(prometheus.GaugeOpts{
promTrackPacketTrailerCurrent = prometheus.NewGauge(prometheus.GaugeOpts{
Namespace: livekitNamespace,
Subsystem: "track",
Name: "packet_trailer_total",
Help: "Current number of published video tracks with packet trailers enabled.",
ConstLabels: prometheus.Labels{"node_id": nodeID, "node_type": nodeType.String()},
})
promTrackPacketTrailerByFeatureCurrent = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Namespace: livekitNamespace,
Subsystem: "track",
Name: "packet_trailer_feature_total",
Help: "Current number of published video tracks by enabled packet trailer feature.",
ConstLabels: prometheus.Labels{"node_id": nodeID, "node_type": nodeType.String()},
}, []string{"feature"})
for value := range livekit.PacketTrailerFeature_name {
feature := livekit.PacketTrailerFeature(value)
promTrackPacketTrailerCurrent.WithLabelValues(feature.String()).Set(0)
promTrackPacketTrailerByFeatureCurrent.WithLabelValues(feature.String()).Set(0)
}
promTrackPublishCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Namespace: livekitNamespace,
@@ -153,6 +161,7 @@ func initRoomStats(nodeID string, nodeType livekit.NodeType) {
prometheus.MustRegister(promTrackPublishedCurrent)
prometheus.MustRegister(promTrackSubscribedCurrent)
prometheus.MustRegister(promTrackPacketTrailerCurrent)
prometheus.MustRegister(promTrackPacketTrailerByFeatureCurrent)
prometheus.MustRegister(promTrackPublishCounter)
prometheus.MustRegister(promTrackSubscribeCounter)
prometheus.MustRegister(promSessionJoinLatency)
@@ -213,8 +222,9 @@ func updatePacketTrailerTracks(track *livekit.TrackInfo, delta float64) {
return
}
promTrackPacketTrailerCurrent.Add(delta)
for _, feature := range features {
promTrackPacketTrailerCurrent.WithLabelValues(feature).Add(delta)
promTrackPacketTrailerByFeatureCurrent.WithLabelValues(feature).Add(delta)
}
}
+17 -14
View File
@@ -39,33 +39,36 @@ func TestPacketTrailerTrackMetrics(t *testing.T) {
},
}
timestampBefore := gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_TIMESTAMP"))
frameIDBefore := gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_FRAME_ID"))
userDataBefore := gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_DATA"))
unknownBefore := gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("UNKNOWN"))
trailerBefore := gaugeValue(t, promTrackPacketTrailerCurrent)
timestampBefore := gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_USER_TIMESTAMP"))
frameIDBefore := gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_FRAME_ID"))
userDataBefore := gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_USER_DATA"))
unknownBefore := gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("UNKNOWN"))
AddPacketTrailerTrack(track)
require.Equal(t, timestampBefore+1, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_TIMESTAMP")))
require.Equal(t, frameIDBefore+1, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_FRAME_ID")))
require.Equal(t, userDataBefore+1, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_DATA")))
require.Equal(t, unknownBefore+1, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("UNKNOWN")))
require.Equal(t, trailerBefore+1, gaugeValue(t, promTrackPacketTrailerCurrent))
require.Equal(t, timestampBefore+1, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_USER_TIMESTAMP")))
require.Equal(t, frameIDBefore+1, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_FRAME_ID")))
require.Equal(t, userDataBefore+1, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_USER_DATA")))
require.Equal(t, unknownBefore+1, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("UNKNOWN")))
SubPacketTrailerTrack(track)
require.Equal(t, timestampBefore, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_TIMESTAMP")))
require.Equal(t, frameIDBefore, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_FRAME_ID")))
require.Equal(t, userDataBefore, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_DATA")))
require.Equal(t, unknownBefore, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("UNKNOWN")))
require.Equal(t, trailerBefore, gaugeValue(t, promTrackPacketTrailerCurrent))
require.Equal(t, timestampBefore, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_USER_TIMESTAMP")))
require.Equal(t, frameIDBefore, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_FRAME_ID")))
require.Equal(t, userDataBefore, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("PTF_USER_DATA")))
require.Equal(t, unknownBefore, gaugeValue(t, promTrackPacketTrailerByFeatureCurrent.WithLabelValues("UNKNOWN")))
}
func TestPacketTrailerTrackMetricsIgnoreAudio(t *testing.T) {
require.NoError(t, Init("test", livekit.NodeType_SERVER))
before := gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_DATA"))
before := gaugeValue(t, promTrackPacketTrailerCurrent)
AddPacketTrailerTrack(&livekit.TrackInfo{
Type: livekit.TrackType_AUDIO,
PacketTrailerFeatures: []livekit.PacketTrailerFeature{livekit.PacketTrailerFeature_PTF_USER_DATA},
})
require.Equal(t, before, gaugeValue(t, promTrackPacketTrailerCurrent.WithLabelValues("PTF_USER_DATA")))
require.Equal(t, before, gaugeValue(t, promTrackPacketTrailerCurrent))
}
func gaugeValue(t *testing.T, gauge promclient.Gauge) float64 {