From 978db00034bdc98d53845a79cd85f0d3a39c695b Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Thu, 19 Sep 2024 02:42:47 +0000 Subject: [PATCH] Add sdk, participant_kind to pub sub metrics (#3023) * exclude go client from track publication metric * add sdk,participant_kind lables * fix test --- pkg/rtc/participant.go | 7 +------ pkg/rtc/subscriptionmanager.go | 3 ++- pkg/rtc/subscriptionmanager_test.go | 6 +++++- pkg/telemetry/prometheus/rooms.go | 18 +++++++++++++----- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index 9286cd96e..6bc61e523 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -2131,12 +2131,7 @@ func (p *ParticipantImpl) mediaTrackReceived(track *webrtc.TrackRemote, rtpRecei "cost", pubTime.Milliseconds(), ) - // SIP client relies on the remote peer's media packet to publish the track and - // sometimes it costs 10s to arrive after handshake. - // So we ignore the publish time for SIP client to avoid the high value in the metrics. - if p.Kind() != livekit.ParticipantInfo_SIP { - prometheus.RecordPublishTime(mt.Source(), mt.Kind(), pubTime) - } + prometheus.RecordPublishTime(mt.Source(), mt.Kind(), pubTime, p.GetClientInfo().GetSdk(), p.Kind()) p.handleTrackPublished(mt) }() } diff --git a/pkg/rtc/subscriptionmanager.go b/pkg/rtc/subscriptionmanager.go index 5025a3350..31d90eb6a 100644 --- a/pkg/rtc/subscriptionmanager.go +++ b/pkg/rtc/subscriptionmanager.go @@ -996,7 +996,8 @@ func (s *trackSubscription) maybeRecordSuccess(ts telemetry.TelemetryService, pI d := time.Since(s.createAt) s.logger.Debugw("track subscribed", "cost", d.Milliseconds()) - prometheus.RecordSubscribeTime(mediaTrack.Source(), mediaTrack.Kind(), d) + subscriber := subTrack.Subscriber() + prometheus.RecordSubscribeTime(mediaTrack.Source(), mediaTrack.Kind(), d, subscriber.GetClientInfo().GetSdk(), subscriber.Kind()) eventSent := s.eventSent.Swap(true) diff --git a/pkg/rtc/subscriptionmanager_test.go b/pkg/rtc/subscriptionmanager_test.go index c6410391c..f44b99153 100644 --- a/pkg/rtc/subscriptionmanager_test.go +++ b/pkg/rtc/subscriptionmanager_test.go @@ -461,6 +461,7 @@ func newTestSubscriptionManagerWithParams(t *testing.T, params testSubscriptionP p.CanSubscribeReturns(true) p.IDReturns("subID") p.IdentityReturns("sub") + p.KindReturns(livekit.ParticipantInfo_STANDARD) return NewSubscriptionManager(SubscriptionManagerParams{ Participant: p, Logger: logger.GetLogger(), @@ -517,7 +518,10 @@ func (t *testResolver) Resolve(identity livekit.ParticipantIdentity, trackID liv st.IDReturns(trackID) st.PublisherIDReturns(t.pubID) st.PublisherIdentityReturns(t.pubIdentity) - mt.AddSubscriberReturns(st, nil) + mt.AddSubscriberCalls(func(sub types.LocalParticipant) (types.SubscribedTrack, error) { + st.SubscriberReturns(sub) + return st, nil + }) st.MediaTrackReturns(mt) res.Track = mt } diff --git a/pkg/telemetry/prometheus/rooms.go b/pkg/telemetry/prometheus/rooms.go index cb4f3f989..fa7126539 100644 --- a/pkg/telemetry/prometheus/rooms.go +++ b/pkg/telemetry/prometheus/rooms.go @@ -115,7 +115,7 @@ func initRoomStats(nodeID string, nodeType livekit.NodeType) { Name: "ms", ConstLabels: prometheus.Labels{"node_id": nodeID, "node_type": nodeType.String()}, Buckets: []float64{100, 200, 500, 700, 1000, 5000, 10000}, - }, promStreamLabels) + }, append(promStreamLabels, "sdk", "kind")) prometheus.MustRegister(promRoomCurrent) prometheus.MustRegister(promRoomDuration) @@ -172,12 +172,20 @@ func AddPublishSuccess(kind string) { promTrackPublishCounter.WithLabelValues(kind, "success").Inc() } -func RecordPublishTime(source livekit.TrackSource, trackType livekit.TrackType, d time.Duration) { - promPubSubTime.WithLabelValues("publish", source.String(), trackType.String()).Observe(float64(d.Milliseconds())) +func RecordPublishTime(source livekit.TrackSource, trackType livekit.TrackType, d time.Duration, sdk livekit.ClientInfo_SDK, kind livekit.ParticipantInfo_Kind) { + recordPubSubTime(true, source, trackType, d, sdk, kind) } -func RecordSubscribeTime(source livekit.TrackSource, trackType livekit.TrackType, d time.Duration) { - promPubSubTime.WithLabelValues("subscribe", source.String(), trackType.String()).Observe(float64(d.Milliseconds())) +func RecordSubscribeTime(source livekit.TrackSource, trackType livekit.TrackType, d time.Duration, sdk livekit.ClientInfo_SDK, kind livekit.ParticipantInfo_Kind) { + recordPubSubTime(false, source, trackType, d, sdk, kind) +} + +func recordPubSubTime(isPublish bool, source livekit.TrackSource, trackType livekit.TrackType, d time.Duration, sdk livekit.ClientInfo_SDK, kind livekit.ParticipantInfo_Kind) { + direction := "subscribe" + if isPublish { + direction = "publish" + } + promPubSubTime.WithLabelValues(direction, source.String(), trackType.String(), sdk.String(), kind.String()).Observe(float64(d.Milliseconds())) } func RecordTrackSubscribeSuccess(kind string) {