Clean up closed tracks stats and handle -ve packet_lost (#430)

Signed-off-by: shishir gowda <shishir@livekit.io>
This commit is contained in:
shishirng
2022-02-10 11:21:17 -05:00
committed by GitHub
parent f3572d2654
commit e96e8e7f97
2 changed files with 24 additions and 0 deletions
+23
View File
@@ -71,6 +71,9 @@ type StatsWorker struct {
outgoingPerTrack map[livekit.TrackID]Stats
incomingPerTrack map[livekit.TrackID]Stats
// clean up stats for unpublished tracks
closedTracks map[livekit.TrackID]bool
}
func newStatsWorker(
@@ -89,6 +92,7 @@ func newStatsWorker(
outgoingPerTrack: make(map[livekit.TrackID]Stats),
incomingPerTrack: make(map[livekit.TrackID]Stats),
closedTracks: make(map[livekit.TrackID]bool),
}
return s
}
@@ -113,6 +117,16 @@ func (s *StatsWorker) OnTrackStat(trackID livekit.TrackID, direction livekit.Str
}
}
func (s *StatsWorker) CleanUpTrackStats() {
if len(s.closedTracks) > 0 {
for trackID := range s.closedTracks {
delete(s.outgoingPerTrack, trackID)
delete(s.incomingPerTrack, trackID)
}
s.closedTracks = make(map[livekit.TrackID]bool)
}
}
func (s *StatsWorker) Update() {
ts := timestamppb.Now()
@@ -122,6 +136,7 @@ func (s *StatsWorker) Update() {
if len(stats) > 0 {
s.t.Report(s.ctx, stats)
}
s.CleanUpTrackStats()
}
func (s *StatsWorker) collectDownstreamStats(ts *timestamppb.Timestamp, stats []*livekit.AnalyticsStat) []*livekit.AnalyticsStat {
@@ -315,6 +330,10 @@ func (stats *Stats) computeDeltaStats() *livekit.AnalyticsStat {
deltaStats.TotalNacks = cur.TotalNacks - prev.TotalNacks
deltaStats.TotalFirs = cur.TotalFirs - prev.TotalFirs
deltaStats.TotalPacketsLost = cur.TotalPacketsLost - prev.TotalPacketsLost
// https://datatracker.ietf.org/doc/html/rfc3550#page-83
if int32(deltaStats.TotalPacketsLost) < 0 {
deltaStats.TotalPacketsLost = 0
}
deltaStats.TotalPrimaryPackets = cur.TotalPrimaryPackets - prev.TotalPrimaryPackets
deltaStats.TotalRetransmitPackets = cur.TotalRetransmitPackets - prev.TotalRetransmitPackets
deltaStats.TotalPaddingPackets = cur.TotalPaddingPackets - prev.TotalPaddingPackets
@@ -345,3 +364,7 @@ func (stats *Stats) computeDeltaStats() *livekit.AnalyticsStat {
}
return deltaStats.ToAnalyticsStats(videoLayer)
}
func (s *StatsWorker) RemoveStats(trackID livekit.TrackID) {
s.closedTracks[trackID] = true
}
@@ -126,6 +126,7 @@ func (t *telemetryServiceInternal) TrackUnpublished(ctx context.Context, partici
if w != nil {
roomID = w.roomID
roomName = w.roomName
w.RemoveStats(livekit.TrackID(track.GetSid()))
}
prometheus.SubPublishedTrack(track.Type.String())