Skip to content

Commit 17b7e28

Browse files
Add a timeseries log for bitrate as received and sent. (#2290)
1 parent bb0696a commit 17b7e28

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

jitsi-media-transform/src/main/kotlin/org/jitsi/nlj/RtpReceiverImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ class RtpReceiverImpl @JvmOverloads constructor(
125125
private val silenceDiscarder = DiscardableDiscarder("Silence discarder", false)
126126
private val paddingOnlyDiscarder = DiscardableDiscarder("Padding-only discarder", true)
127127
private val statsTracker = IncomingStatisticsTracker(streamInformationStore)
128-
private val packetStreamStats = PacketStreamStatsNode()
128+
private val packetStreamStats = PacketStreamStatsNode(diagnosticContext, "receive")
129129
private val rtcpRrGenerator = RtcpRrGenerator(backgroundExecutor, rtcpSender, statsTracker) {
130130
remoteBandwidthEstimator.createRemb()?.let {
131131
listOf(it)

jitsi-media-transform/src/main/kotlin/org/jitsi/nlj/RtpSenderImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class RtpSenderImpl(
115115
private val headerExtensionStripper = HeaderExtStripper(streamInformationStore)
116116
private val absSendTime = AbsSendTime(streamInformationStore)
117117
private val statsTracker = OutgoingStatisticsTracker()
118-
private val packetStreamStats = PacketStreamStatsNode()
118+
private val packetStreamStats = PacketStreamStatsNode(diagnosticContext, "send")
119119
private val rtcpSrUpdater = RtcpSrUpdater(statsTracker)
120120
private val keyframeRequester = KeyframeRequester(streamInformationStore, logger)
121121
private val probingDataSender: ProbingDataSender

jitsi-media-transform/src/main/kotlin/org/jitsi/nlj/transform/node/PacketStreamStatsNode.kt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,19 @@ package org.jitsi.nlj.transform.node
1717

1818
import org.jitsi.nlj.PacketInfo
1919
import org.jitsi.nlj.stats.PacketStreamStats
20+
import org.jitsi.utils.logging.DiagnosticContext
21+
import org.jitsi.utils.logging.TimeSeriesLogger
2022

2123
/**
2224
* A [Node] which keeps track of the basic statistics for a stream of packets (packet and bit rates)
2325
*
2426
* @author Boris Grozev
2527
*/
26-
class PacketStreamStatsNode(private val packetStreamStats: PacketStreamStats = PacketStreamStats()) :
28+
class PacketStreamStatsNode(
29+
private val diagnosticContext: DiagnosticContext,
30+
private val direction: String,
31+
private val packetStreamStats: PacketStreamStats = PacketStreamStats()
32+
) :
2733
ObserverNode("PacketStreamStats") {
2834

2935
override fun observe(packetInfo: PacketInfo) {
@@ -32,13 +38,25 @@ class PacketStreamStatsNode(private val packetStreamStats: PacketStreamStats = P
3238

3339
override fun trace(f: () -> Unit) = f.invoke()
3440

35-
fun snapshot() = packetStreamStats.snapshot()
41+
fun snapshot() = packetStreamStats.snapshot().also {
42+
if (timeseriesLogger.isTraceEnabled) {
43+
timeseriesLogger.trace(
44+
diagnosticContext.makeTimeSeriesPoint("${direction}_packet_stream_stats")
45+
.addField("bitrate_bps", it.bitrate.bps)
46+
.addField("packet_rate", it.packetRate)
47+
)
48+
}
49+
}
3650

3751
fun getBitrate() = snapshot().bitrate
3852

3953
/**
4054
* Creates a new [Node] instance which shares the same [packetStreamStats]. Useful when we want to add nodes to
4155
* different branches of a [Node] tree.
4256
*/
43-
fun createNewNode() = PacketStreamStatsNode(packetStreamStats)
57+
fun createNewNode() = PacketStreamStatsNode(diagnosticContext, direction, packetStreamStats)
58+
59+
companion object {
60+
private val timeseriesLogger = TimeSeriesLogger.getTimeSeriesLogger(PacketStreamStatsNode::class.java)
61+
}
4462
}

0 commit comments

Comments
 (0)