Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions jicofo/src/main/java/org/jitsi/jicofo/jibri/JibriSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@
package org.jitsi.jicofo.jibri;

import edu.umd.cs.findbugs.annotations.*;
import io.opentelemetry.api.trace.*;
import io.opentelemetry.context.*;
import org.jetbrains.annotations.Nullable;
import org.jitsi.jicofo.*;
import org.jitsi.jicofo.xmpp.*;
import org.jitsi.xmpp.extensions.*;
import org.jitsi.xmpp.extensions.jibri.*;
import org.jitsi.xmpp.extensions.jibri.JibriIq.*;
import org.jetbrains.annotations.*;
Expand Down Expand Up @@ -370,6 +373,18 @@ synchronized public void stop(Jid initiator)
stopRequest.setAction(JibriIq.Action.STOP);
stopRequest.setSessionId(this.sessionId);

Span span = Span.fromContextOrNull(Context.current());
if (span != null)
{
stopRequest.addExtension(
new TraceParent(
span.getSpanContext().getTraceId(),
span.getSpanContext().getSpanId(),
span.getSpanContext().getTraceFlags().asHex()
)
);
}

logger.info("Sending stop IQ (fire-and-forget): " + stopRequest.toXML());

try
Expand Down Expand Up @@ -512,6 +527,17 @@ private void sendJibriStartIq(final Jid jibriJid)
// Insert name of the room into Jibri START IQ
startIq.setRoom(roomName);

Span span = Span.fromContextOrNull(Context.current());
if (span != null)
{
startIq.addExtension(
new TraceParent(
span.getSpanContext().getTraceId(),
span.getSpanContext().getSpanId(),
span.getSpanContext().getTraceFlags().asHex()
)
);
}
// We will not wait forever for the Jibri to start. This method can be
// run multiple times on retry, so we want to restart the pending
// timeout each time.
Expand All @@ -532,6 +558,19 @@ private void sendJibriStartIq(final Jid jibriJid)
stopRequest.setTo(jibriJid);
stopRequest.setAction(JibriIq.Action.STOP);
stopRequest.setSessionId(sessionId);

span = Span.fromContextOrNull(Context.current());
if (span != null)
{
stopRequest.addExtension(
new TraceParent(
span.getSpanContext().getTraceId(),
span.getSpanContext().getSpanId(),
span.getSpanContext().getTraceFlags().asHex()
)
);
}

try
{
jibriDetector.getXmppConnection().trySendStanza(stopRequest);
Expand Down
16 changes: 15 additions & 1 deletion jicofo/src/main/kotlin/org/jitsi/jicofo/jibri/BaseJibri.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
*/
package org.jitsi.jicofo.jibri

import io.opentelemetry.api.trace.StatusCode
import io.opentelemetry.api.trace.Tracer
import org.jitsi.jicofo.ConferenceConfig
import org.jitsi.jicofo.conference.JitsiMeetConferenceImpl
import org.jitsi.jicofo.jibri.JibriSession.StateListener
Expand All @@ -27,12 +29,14 @@ import org.jitsi.jicofo.xmpp.IqProcessingResult.RejectedWithError
import org.jitsi.jicofo.xmpp.IqRequest
import org.jitsi.jicofo.xmpp.muc.hasModeratorRights
import org.jitsi.jicofo.xmpp.tryToSendStanza
import org.jitsi.tracing.TracingGlobal
import org.jitsi.utils.logging2.Logger
import org.jitsi.xmpp.extensions.jibri.JibriIq
import org.jitsi.xmpp.extensions.jibri.JibriIq.Action
import org.jivesoftware.smack.packet.IQ
import org.jivesoftware.smack.packet.StanzaError
import java.lang.Exception
import kotlin.use
import org.jitsi.jicofo.util.ErrorResponse.create as error

/**
Expand All @@ -48,6 +52,7 @@ abstract class BaseJibri internal constructor(
) : StateListener {

protected val logger: Logger = parentLogger.createChildLogger(BaseJibri::class.simpleName)
val tracer: Tracer = TracingGlobal.sdk.getTracer("org.jitsi.jicofo.jibri")

fun handleJibriRequest(request: JibriRequest): IqProcessingResult = if (accept(request.iq)) {
logger.info("Accepted jibri request: ${request.iq.toXML()}")
Expand All @@ -58,14 +63,23 @@ abstract class BaseJibri internal constructor(
}

chatRoom.queueXmppTask {
val span = tracer.spanBuilder("jibri.${request.iq.action}")
.setAttribute("client.id", request.iq.from.toString())
.setAttribute("recording-mode", request.iq.recordingMode.toString())
.startSpan()
val response = try {
doHandleIQRequest(request.iq)
span.makeCurrent().use {
doHandleIQRequest(request.iq)
}
} catch (e: Exception) {
logger.warn("Failed to handle request: ${request.iq}", e)
request.connection.tryToSendStanza(
IQ.createErrorResponse(request.iq, StanzaError.Condition.internal_server_error)
)
span.setStatus(StatusCode.ERROR, e.message ?: "")
null
} finally {
span.end()
}
response?.let { request.connection.tryToSendStanza(it) }
}
Expand Down
Loading